网络安全攻击数据的多维度可视化分析

简介

本研究项目通过应用多种数据处理与可视化技术,对网络安全攻击事件数据集进行了深度分析。首先,利用Pandas库读取并预处理数据,包括检查缺失值、剔除冗余信息以及将时间戳转化为日期时间格式以利于后续时间序列分析。

研究步骤

  1. 数据分析前准备:加载numpy、pandas、seaborn和matplotlib等科学计算和可视化库,同时使用os模块遍历文件路径,显示数据集所在位置。

  2. 数据初步探索:读取并清洗cybersecurity_attacks.csv数据集,统计各类攻击类型的数量,并可视化攻击类型分布情况,采用柱状图清晰展示了不同攻击类型的频次差异。

  3. 特征分析:针对选定的三个关键特征(Anomaly Scores, Source Port, Packet Length)进行细致探讨,为每种特征分别绘制箱线图,揭示各特征在不同攻击类型下的统计特性。

  4. 网络协议占比分析:统计网络流量中UDP、ICMP和TCP三种主要协议的使用频率,利用饼图直观展现其在网络攻击中的相对重要性。

  5. 时间序列分析:根据攻击发生的时间戳生成年份和月份列,构建透视表并通过热力图展示攻击事件随时间和月份的变化趋势,进一步细化至每周,探究月与周日间攻击活动的周期性规律。

  6. Payload Data内容挖掘:对Payload Data列的内容进行文本分析,将其转换为单一字符串并生成词云,借此揭示攻击载荷中的高频词汇,从而洞察潜在的攻击模式和关键词。

代码解析及实现

导入必要的库

import numpy as np # 线性代数
import pandas as pd # 数据处理,CSV文件I/O(例如pd.read_csv)
import seaborn as sns # 数据可视化
import matplotlib.pyplot as plt # 绘图
import warnings # 忽略警告
import calendar # 日历功能# 输入数据文件位于只读的“../input/”目录中
# 例如,运行此代码(通过单击运行或按Shift+Enter)将列出输入目录下的所有文件import os
for dirname, _, filenames in os.walk('/kaggle/input'):for filename in filenames:print(os.path.join(dirname, filename))
data = pd.read_csv('/kaggle/input/cyber-security-attacks/cybersecurity_attacks.csv')
data.head()
TimestampSource IP AddressDestination IP AddressSource PortDestination PortProtocolPacket LengthPacket TypeTraffic TypePayload Data...Action TakenSeverity LevelUser InformationDevice InformationNetwork SegmentGeo-location DataProxy InformationFirewall LogsIDS/IPS AlertsLog Source
02023-05-30 06:33:58103.216.15.1284.9.164.2523122517616ICMP503DataHTTPQui natus odio asperiores nam. Optio nobis ius......LoggedLowReyansh DugalMozilla/5.0 (compatible; MSIE 8.0; Windows NT ...Segment AJamshedpur, Sikkim150.9.97.135Log DataNaNServer
12020-08-26 07:08:3078.199.217.19866.191.137.1541724548166ICMP1174DataHTTPAperiam quos modi officiis veritatis rem. Omni......BlockedLowSumer RanaMozilla/5.0 (compatible; MSIE 8.0; Windows NT ...Segment BBilaspur, NagalandNaNLog DataNaNFirewall
22022-11-13 08:23:2563.79.210.48198.219.82.171681153600UDP306ControlHTTPPerferendis sapiente vitae soluta. Hic delectu......IgnoredLowHimmat KarpeMozilla/5.0 (compatible; MSIE 9.0; Windows NT ...Segment CBokaro, Rajasthan114.133.48.179Log DataAlert DataFirewall
32023-07-02 10:38:46163.42.196.10101.228.192.2552001832534UDP385DataHTTPTotam maxime beatae expedita explicabo porro l......BlockedMediumFateh KibeMozilla/5.0 (Macintosh; PPC Mac OS X 10_11_5; ...Segment BJaunpur, RajasthanNaNNaNAlert DataFirewall
42023-07-16 13:11:0771.166.185.76189.243.174.238613126646TCP1462DataDNSOdit nesciunt dolorem nisi iste iusto. Animi v......BlockedLowDhanush ChadMozilla/5.0 (compatible; MSIE 5.0; Windows NT ...Segment CAnantapur, Tripura149.6.110.119NaNAlert DataFirewall

5 rows × 25 columns

data.shape

(40000, 25)

data.info()

在这里插入图片描述

data.columns

Index([‘Timestamp’, ‘Source IP Address’, ‘Destination IP Address’,
‘Source Port’, ‘Destination Port’, ‘Protocol’, ‘Packet Length’,
‘Packet Type’, ‘Traffic Type’, ‘Payload Data’, ‘Malware Indicators’,
‘Anomaly Scores’, ‘Alerts/Warnings’, ‘Attack Type’, ‘Attack Signature’,
‘Action Taken’, ‘Severity Level’, ‘User Information’,
‘Device Information’, ‘Network Segment’, ‘Geo-location Data’,
‘Proxy Information’, ‘Firewall Logs’, ‘IDS/IPS Alerts’, ‘Log Source’],
dtype=‘object’)

data.isnull().sum()

在这里插入图片描述
无关列去除

columns_to_drop=['Malware Indicators', 'Alerts/Warnings', 'Proxy Information', 'Firewall Logs', 'IDS/IPS Alerts']
data=data.drop(columns_to_drop, axis=1)
data.isnull().sum()

在这里插入图片描述

data.head()
TimestampSource IP AddressDestination IP AddressSource PortDestination PortProtocolPacket LengthPacket TypeTraffic TypePayload DataAnomaly ScoresAttack TypeAttack SignatureAction TakenSeverity LevelUser InformationDevice InformationNetwork SegmentGeo-location DataLog Source
02023-05-30 06:33:58103.216.15.1284.9.164.2523122517616ICMP503DataHTTPQui natus odio asperiores nam. Optio nobis ius...28.67MalwareKnown Pattern BLoggedLowReyansh DugalMozilla/5.0 (compatible; MSIE 8.0; Windows NT ...Segment AJamshedpur, SikkimServer
12020-08-26 07:08:3078.199.217.19866.191.137.1541724548166ICMP1174DataHTTPAperiam quos modi officiis veritatis rem. Omni...51.50MalwareKnown Pattern ABlockedLowSumer RanaMozilla/5.0 (compatible; MSIE 8.0; Windows NT ...Segment BBilaspur, NagalandFirewall
22022-11-13 08:23:2563.79.210.48198.219.82.171681153600UDP306ControlHTTPPerferendis sapiente vitae soluta. Hic delectu...87.42DDoSKnown Pattern BIgnoredLowHimmat KarpeMozilla/5.0 (compatible; MSIE 9.0; Windows NT ...Segment CBokaro, RajasthanFirewall
32023-07-02 10:38:46163.42.196.10101.228.192.2552001832534UDP385DataHTTPTotam maxime beatae expedita explicabo porro l...15.79MalwareKnown Pattern BBlockedMediumFateh KibeMozilla/5.0 (Macintosh; PPC Mac OS X 10_11_5; ...Segment BJaunpur, RajasthanFirewall
42023-07-16 13:11:0771.166.185.76189.243.174.238613126646TCP1462DataDNSOdit nesciunt dolorem nisi iste iusto. Animi v...0.52DDoSKnown Pattern BBlockedLowDhanush ChadMozilla/5.0 (compatible; MSIE 5.0; Windows NT ...Segment CAnantapur, TripuraFirewall
data.duplicated().sum()

0

# 在创建DataFrame时,将'Timestamp'列转换为datetime对象
data['Timestamp'] = pd.to_datetime(data['Timestamp'])

绘制攻击类型分布的柱状图

根据给定数据集,绘制攻击类型分布的柱状图。

# 统计每种攻击类型的数量
attack_counts = data['Attack Type'].value_counts()# 设置绘图的颜色方案
colors = sns.color_palette('viridis', len(attack_counts))# 创建图表并绘制柱状图
plt.figure(figsize=(12, 6))
sns.barplot(x=attack_counts.index, y=attack_counts, palette=colors)# 为每个柱子添加数据标签
for i, count in enumerate(attack_counts):plt.text(i, count + 0.1, str(count), ha='center', va='bottom', fontsize=10, fontweight='bold')# 添加x轴和y轴标签以及图表标题
plt.xlabel('Attack Type', fontsize=14, fontweight='bold')
plt.ylabel('Count', fontsize=14, fontweight='bold')
plt.title('Distribution of Attack Types', fontsize=16)# 旋转x轴标签,以改善可读性
plt.xticks(rotation=45, ha='right')# 调整布局并显示图表
plt.tight_layout()
plt.show()

在这里插入图片描述

绘制异常分数、源端口和数据包长度的分布箱线图

绘制异常分数、源端口和数据包长度的分布情况,通过箱线图展示每种特征在不同攻击类型中的分布情况。

# 定义要绘制的列
columns = ['Anomaly Scores', 'Source Port', 'Packet Length']# 遍历列名列表,为每列绘制箱线图
for col in columns:# 创建一个新的画布,设置尺寸为12英寸*6英寸plt.figure(figsize=(12, 6))# 绘制箱线图,设置不显示异常值(outliers)sns.boxplot(data=data, x=col, y='Attack Type', showfliers=False)# 设置图表标题plt.title(f'Distribution of {col.capitalize()} by Attack Type')# 设置x轴和y轴标签plt.xlabel(col.capitalize(), fontsize=14, fontweight='bold')plt.ylabel('Attack Type', fontsize=14, fontweight='bold')# 显示绘制的图表plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用饼图,展示网络流量协议分布

# 定义饼图的标签
labels = ['UDP', 'ICMP', 'TCP']
# 通过data['Protocol']列的值计数,获取每个类别比例大小
sizes = data['Protocol'].value_counts()
# 爆炸效果设置,使第一个类别(UDP)突出
explode = (0.1, 0, 0)
# 设置自定义颜色方案
colors = sns.color_palette('pastel')[0:len(labels)]
# 设置seaborn的白色格子风格,用于创建具有创意主题的图表
sns.set(style="whitegrid")
# 创建饼图
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, colors=colors, explode=explode, autopct='%1.1f%%', startangle=90)
# 设置等比例属性,确保饼图被绘制为一个圆形
plt.axis('equal')
# 设置图表标题
plt.title('Distribution of Network Traffic Protocols', fontsize=16, fontweight='bold')
# 显示饼图
plt.show()

在这里插入图片描述

# 为dataframe的'Timestamp'列创建'Year''Month'两个新列
# 'Year'列将包含时间戳对应的年份
# 'Month'列将包含时间戳对应的月份名称
data['Year'] = data['Timestamp'].dt.year  # 创建'Year'列,包含时间戳的年份
data['Month'] = data['Timestamp'].dt.month_name()  # 创建'Month'列,包含时间戳的月份名称

生成一个透视表,以年为行索引,月为列索引,统计每个年份每个月出现的次数。

"""参数:
- data: 输入的数据,预期包含'Year', 'Month', 'Timestamp'等列。
- values: 用于计算透视表的值列,这里使用'Timestamp'列。
- index: 透视表的行索引,这里使用'Year'列。
- columns: 透视表的列索引,这里使用'Month'列。
- aggfunc: 对values列进行聚合的函数,这里使用'count'函数。
- fill_value: 缺失值的填充值,这里填充为0。返回值:
- pivot_table: 生成的透视表,显示了每年每个月的计数。
"""
# 生成透视表
pivot_table = pd.pivot_table(data, values='Timestamp', index='Year', columns='Month', aggfunc='count', fill_value=0)# 显示透视表
print("Pivot Table - Year vs Month:")
print(pivot_table)

在这里插入图片描述

分析时间序列,绘制热力图

# 设置热力图的可视化窗口大小
plt.figure(figsize=(12, 8))
# 生成热力图,注释表示数值,格式化为整数,使用"viridis"颜色方案,设置行宽度为0.5
sns.heatmap(pivot_table, annot=True, fmt="d", cmap="viridis", linewidths=.5)
# 添加标题和坐标轴标签
plt.title('Count of Records: Year vs Month')
plt.xlabel('Month')
plt.ylabel('Year')# 显示热力图
plt.show()

在这里插入图片描述

# 显示透视表
print("Pivot Table - Year vs Month:")
print(pivot_table)

在这里插入图片描述
生成一个关于月份与周几的透视表

pivot_table_month_weekday = pd.pivot_table(data, values='Timestamp', index='Month', columns='Weekday', aggfunc='count', fill_value=0)
print("Pivot Table - Month vs Weekday:")
print(pivot_table_month_weekday)

在这里插入图片描述
生成一个可视化热力图,展示记录数在月份与周几之间的分布情况。

# 创建一个新的画布,设置画布的尺寸为12英寸宽,8英寸高
plt.figure(figsize=(12, 8))
# 生成热力图,设置显示数值,格式为整数,颜色映射为'YlGnBu',线条宽度为0.5
sns.heatmap(pivot_table_month_weekday, annot=True, fmt="d", cmap="YlGnBu", linewidths=.5)
# 设置图表标题,x轴标签和y轴标签
plt.title('Count of Records: Month vs Weekday')
plt.xlabel('Weekday')
plt.ylabel('Month')# 显示热力图
plt.show()

在这里插入图片描述

将攻击载荷中的高频词汇生成单词云图

# 将'Data Payload'列的所有值转换为字符串,并合并为一个单一字符串
text = ' '.join(data['Payload Data'].astype(str).values)# 创建绘图子图
fig, ax = subplots(figsize=(12, 12))# 生成并显示单词云
wordcloud = WordCloud(random_state=2023, height=1200, width=1200).generate(text)
imshow(wordcloud)
axis('off')  # 关闭坐标轴显示# 显示单词云图
plt.show()

在这里插入图片描述

优化建议

  1. 数据预处理优化:
  • 对于含有大量缺失值的特定列,可以考虑采用更为精细的数据填充策略,如基于统计模型(如均值、中位数、众数填充)或机器学习方法(如KNN插补、多重插补等)进行缺失值填补。
  • 在特征选择阶段,除了基于现有业务理解剔除部分冗余信息外,还可以运用特征重要性评估(如基于随机森林、梯度提升树等模型计算特征重要性),进一步筛选出对攻击类型预测具有较高价值的特征。
  1. 可视化增强与解读:
  • 为柱状图、箱线图和饼图添加图例、图注以及单位信息,使图表更易于理解和解读。
  • 对于时间序列分析,可引入滑动窗口统计或周期性趋势分析,探索攻击事件在季度、季节性周期中的规律性变化,并结合节假日等外部因素研究其潜在关联性。
  • 在词云生成时,增加自定义停用词表过滤常见高频但无实际意义的词汇,并尝试使用TF-IDF或TextRank算法提取更具代表性的关键词。
  1. 深度挖掘与建模:
  • 对Payload Data内容进行深度文本挖掘,例如进行情感分析以判断攻击载荷的威胁程度,或者利用主题模型(如LDA)发现隐藏的主题结构。
  • 构建分类模型(如逻辑回归、支持向量机、神经网络等)来预测攻击类型,通过模型训练和验证,深入了解各特征与攻击类型的内在关系,从而优化防御策略。
  1. 结果解释与报告撰写:
  • 结合可视化结果与统计检验方法(如卡方检验、T检验等),对观察到的模式和趋势提供定量化的显著性分析。
  • 将分析结果整合成详细的研究报告,包括假设检验、数据分析步骤、主要发现及结论,并针对网络安全防护提出具体且有针对性的改进建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git commit --amend

git commit --amend 1. 修改已经输入的commit 1. 修改已经输入的commit 我已经输入了commit fix: 删除无用代码 然后现在表示不准确,然后我通过命令git commit --amend修改commit

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 2、线条平滑曲面但有间隔

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata imp…

【李沐论文精读】GPT、GPT-2和GPT-3论文精读

论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…

java基础2-常用API

常用API Math类 帮助我们进行数学计算的工具类。 里面的方法都是静态的。 3.常见方法如下: abs:获取绝对值 absExact:获取绝对值 ceil:向上取整 floor:向下取整 round:四舍五入 max:获取最大值 …

Stable Diffusion 模型:从噪声中生成逼真图像

你好,我是郭震 简介 Stable Diffusion 模型是一种生成式模型,可以从噪声中生成逼真的图像。它由 Google AI 研究人员于 2022 年提出,并迅速成为图像生成领域的热门模型。 数学基础 Stable Diffusion模型基于一种称为扩散概率模型(Diffusion P…

并查集算法

文章目录 并查集并查集引入1.初始化2.查询3.合并路径压缩代码模板(1)朴素并查集:(2)维护size的并查集:(3)维护到祖宗节点距离的并查集: 并查集 并查集引入 并查集(Union-find Sets)是一种非常精巧而实用的数据结构&a…

设计模式 -- 1:简单工厂模式

目录 代码记录代码部分 代码记录 设计模式的代码注意要运用到面向对象的思想 考虑到紧耦合和松耦合 把具体的操作类分开 不让其互相影响&#xff08;注意这点&#xff09; 下面是UML类图 代码部分 #include <iostream> #include <memory> // 引入智能指针的头文…

Redis底层核心对象RedisObject源码分析

文章目录 1. redis底层数据结构2. 插入KV底层源码流程分析 1. redis底层数据结构 redis 6数据结构和底层数据结构的关系 String类型本质是SDS动态字符串&#xff0c;即redis层面的数据结构底层会有对应的数据结构实现&#xff0c;上面是redis 6之前的实现 redis 7数据结构和底…

[MYSQL数据库]--表的增删查改和字段类型

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、表的增…

高数立体几何笔记

上个学期立体几何章节的一点笔记&#xff0c;很潦草&#xff0c;但重点内容基本都有复习到 Page1&#xff1a;介绍了向量的模、夹角、单位向量、投影投影向量、方向角、点乘、叉乘、混合积的基本运算和性质Page2: 回顾了高中所学的平面直线的多种表示方法以及距离的计算方法&…

【工作实践-07】uniapp关于单位rpx坑

问题&#xff1a;在浏览器页面退出登录按钮上“退出登录”字样消失&#xff0c;而在手机端页面正常;通过查看浏览器页面的HTML代码&#xff0c;发现有“退出登录”这几个字&#xff0c;只不过由于样式问题&#xff0c;这几个字被挤到看不见了。 样式代码中有一行为&#xff1a…

Midjourney绘图欣赏系列(十一)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

Linux常见指令总结

ls&#xff1a;显示当前目录下文件列表 常用的命令行参数&#xff1a; -l 显示更多的文件属性 -a 显示所有的文件/目录&#xff08;包括隐藏的&#xff09; -d 只显示目录 ps&#xff1a;参数可以叠加使用。 例如&#xff1a;ls -la 显示所有文件…

wait 和 notify方法

目录 1.1 wait()方法 wait 做的事情: wait 结束等待的条件: 1.2 notify()方法 1.3notifyAll方法 1.4wait()和sleep()对比 由于线程之间是抢占式执行的, 因此线程之间执行的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序. 完成这个协调…

重学SpringBoot3-日志Logging

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-日志Logging 引言默认日志配置日志门面如何实现默认配置 自定义日志配置日志级别日志分组日志格式日志输出自定义 Logback 配置切换日志框架 日志使用方…

数据结构 - 链表 (四)

这篇博客将介绍带头循环的双向链表&#xff0c;实现链表的头部插入/删除&#xff0c;尾部插入/删除&#xff0c;查找&#xff0c;以及任意位置的插入删除。 1.结构 带头循环的双向链表的结构如下图所示&#xff0c;一个结点内部包含数据&#xff0c;以及分别指向前一个以及后…

LabVIEW质谱仪开发与升级

LabVIEW质谱仪开发与升级 随着科技的发展和实验要求的提高&#xff0c;传统基于VB的质谱仪系统已经无法满足当前的高精度和高效率需求。这些系统通常存在着功能不全和操作复杂的问题&#xff0c;影响了科研和生产的进度。为了解决这些问题&#xff0c;开发了一套基于LabVIEW开…

16. C++标准库

C标准库兼容C语言标准函数库&#xff0c;可以在C标准库中直接使用C语言标准函数库文件&#xff0c;同时C标准库增加了自己的源代码文件&#xff0c;新增文件使用C编写&#xff0c;多数代码放在std命名空间中&#xff0c;所以连接C标准库文件后还需要 using namespace std;。 【…

Python算法题集_搜索旋转排序数组

Python算法题集_搜索旋转排序数组 题33&#xff1a;搜索旋转排序数组1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【二分法区间判断】2) 改进版一【二分找分界标准二分法】3) 改进版二【递归实现二分法】 4. 最优算法5. 相关资源 本文为Pytho…

【C++进阶】C++多态概念详解

C多态概念详解 一&#xff0c;多态概念二&#xff0c;多态的定义2.1 多态构成的条件2.2 什么是虚函数2.3 虚函数的重写2.3.1 虚函数重写的特例2.3.2 override和final 2.4 重载和重写&#xff08;覆盖&#xff09;和重定义&#xff08;隐藏&#xff09;的区别 三&#xff0c;抽象…