组流技术与流特征分析
源代码:
【免费】组流技术与流特征分析实验源代码资源-CSDN文库
- 实验背景
本实验中使用方法为python中的dpkt模块,支持的解析协议有限,常见的 IP、TCP、UDP、SSL等。
原理:对于每一个协议都有一个单独的类负责该层协议进行解析,输入是该协议的二进制数据,输出的是将二进制解析成有意义的单独字段。
需要使用dpkt.pcap.Reader读取pcap报文,去除报文的头部信息。将上层的数据根据解码情况传递到具体的协议类中进行解析。
编写Python代码实现组流功能,可借鉴参考代码框架,具体要求如下:
任务1. 处理pcap文件:实现对PCAP文件的读取和处理;
任务2. 组流:能正确将报文依照五元组进行归类,并进一步统计流的个数(打印输出);
任务3. 流特征分析:能对流的特征进行统计分析,具体要求为:
1) 提取每个流的报文长度序列;
2) 计算每个流的报文长度方差;
任务4. 实现简单的数据可视化:绘制对应统计特征下流的频数分布直方图。
- 实验内容
2.1 使用文档及运行样例
2.1.1 项目结构
仅为添加内容:
/Flow_Aggregation.py
/result.txt
/实验报告
2.1.2 使用方法
需要预先安装的库如下图所示:
直接运行Flow_Aggregation.py即可实现预期功能。
2.2 UML图与主要数据结构
如图所示:
2.3 主要算法说明
在合并流的时候,通过五元组判断是否为同一流:
if (src_ip == flow_unit.src_ip and dst_ip == flow_unit.dst_ip and
src_port == flow_unit.src_port and dst_port == flow_unit.dst_port):
# 合并流
flow_unit.append_packet(eth, tms, pkt_size)
flow_is_exist = True
break
计算每个流的报文长度方差时,利用框架中封装好的pktsizeseq即可:
varset = []"""此处计算每个流的报文长度方差"""for flow_unit in flow:varset.append(np.var(flow_unit.pktsizeseq))return varset
绘制频数分布图的时候,将两个图合并到一个图中输出:
logbins = np.append([0], np.power(10, np.arange(0, int(np.log10(max(x))) + 1, 0.5)))plt.subplot(plotspot)plt.hist(x, bins=logbins)plt.xscale("log")plt.title(title)plt.xlabel("报文长度方差")plt.ylabel("流数量")
2.4 结果展示
2.4.1 任务一:处理pcap文件
这部分框架中已基本实现,可以看到有输出,说明完成了对PCAP文件的读取和处理:
2.4.2 任务二:组流
进行了正确归类,并且单向流统计数目为62,双向流统计数目为33:
2.4.3 任务三:流特征分析
正确输出五元组,mac地址,长度序列以及方差:
完整输出详见result.txt
2.4.4 任务四:实现简单的数据可视化
完成的直方图如下图所示:
- 实验总结
本次实验通过四个任务使得我对组流有了初步的认识,增强了我的画图能力,也加深了我对计算机网络知识的理解。在实现任务时通过和同学的讨论以及询问学长再加上网上查找的资料,终于将问题一一解决,最终获得预期输出时的满足感不言而喻。这对将对我进行后续实验有着好的影响。