网络流量pcap包特征提取并保存

前言

新手写博客,写博客主要目的是为了记录自己做项目的一些过程。关于网络流量项目,刚开始做项目一个月左右,所写的博客必然有很多不足的地方,欢迎大家交流和指教。

获取pcap包

pcap包特征提取第一步是要获得pcap包。pcap一般有两种获取方式,一种是下载开源的数据集,另外一种是通过自己抓包获得。

开源流量数据集有很多。这里贴一个博主总结的网络流量领域公开数据集
抓包一般可以通过wireshark工具实现。在抓包的时候由于我需要获取网络流量client_hello的部分这里用了wireshark自带的过滤器来提取。

由于我需要client_hello的部分在黄色框的地方输入ssl.handshake.type == 1既可以获得有关于client_hello的数据包,然后再导出即可。
在这里插入图片描述

基于flowcontainer的特征提取

这里我在提取网络流量特征提取的时候采用了flowcontainer的库,在提取特征的时候有尝试过例如pyshark之类的库,比较用起来觉得flowcontainer方便。查阅了一些资料说是flowcontainer在速度上会比较慢,但是博主没有尝试过,大家可以自己选择。

安装flowcontianer,在自己对应环境下输入即可。

pip install flowcontainer -i https://pypi.douban.com/simple/

这里说一下自己个人在安装和使用中碰到的问题:

(1)确保环境变量有tshark的环境,这里没有配置过的,搜索下如何配置环境变量,各个环境变量配置方法基本一致。在这里插入图片描述
(2)如果在编译器(博主是pycharm)运行记得启用管理者模式否则会出现以下报错,当时博主找了N久,才de出这个bug。

OSError: tshark is not installed or added to environment path.

其他有关于该库安装和使用的问题可以参考这篇博客。当时我学习这个库主要参考了这个博主的文章。

我自己使用这个库是为了获得有关网络流量中payload_length,time_delta,以及packet_length和sni的特征。这里上代码。extension可以自己选择想要提取的特征,如果想要提取别的特征参考上面超链接博客。

from flowcontainer.extractor import extract
result = extract(r"D:\Apaper\pyproje\pyproje\client-hello.pcap",filter='',extension=['tls.handshake.extensions_server_name','frame.time_delta','frame.cap_len'])

payload_length =[]  #total payload_length
time_delta=[]       #total time_delta
packet_length=[]    #total packet_length
sni = []            #total sni

for key in result:
    value = result[key]

    payload_length.append(value.payload_lengths[0])#save total payload_length
    time_delta.append((value.extension['frame.time_delta'][0])[0])#save total time_delta
    packet_length.append((value.extension['frame.cap_len'][0][0]))#save total packet_length

    if ('tls.handshake.extensions_server_name' in value.extension):#一些没有sni的client_hello数据包用NULL先暂时替代
        sni.append((value.extension['tls.handshake.extensions_server_name'][0])[0])#save total sni
    else:
        sni.append('NULL')  

#删除没有sni的pcap
for i in range (len(sni)-1,-1,-1):
    if sni[i] =='NULL':

        payload_length.pop(i)
        packet_length.pop(i)
        sni.pop(i)
        time_delta.pop(i)

print(payload_length)
print(time_delta)
print(packet_length)
print(sni)
print('\n')

这里我以列表的形式储存了特征。之所以有删除没有sni的pcap这个步骤,是因为我使用wireshark过滤后的client_hello包没有sni标志。具体原因不太理解,如果有懂的可以评论区说下。输出的结果如下
在这里插入图片描述

然后使用保存储存到excel就可以了,完整代码,两部分直接合并修改路径即可运行。

import xlwt
f = xlwt.Workbook('encoding = utf-8') #设置工作簿编码
sheet1 = f.add_sheet('sheet1',cell_overwrite_ok=True) #创建sheet工作表
sheet1.write(0,0,'sni')
sheet1.write(0,1,'payload_length')
sheet1.write(0,2,'packet_length')
sheet1.write(0,3,'time_delta')
for i in range(len(sni)):
    sheet1.write(i+1,0,sni[i]) #写入对应数据
    sheet1.write(i+1,1,payload_length[i])
    sheet1.write(i+1,2,packet_length[i])
    sheet1.write(i+1,3,time_delta[i])

f.save('text.xls')#保存.xls到当前工作目录

最终结果图

在这里插入图片描述

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 从pcap内提取TCP会话并重组是一种网络分析的常见任务,它可以帮助我们理解和分析网络流量。 首先,我们需要使用适当的工具打开pcap文件,如Wireshark或tshark。这些工具可以读取pcap文件并显示其中的网络流量。 接下来,我们需要筛选出TCP协议的网络流量,可以通过过滤器来实现。在Wireshark中,我们可以使用表达式"tcp"来过滤出所有的TCP流量。 一旦我们得到了TCP流量,我们需要根据IP地址和端口号来识别和重组TCP会话。每一对IP地址和端口号组合代表一次TCP会话。在Wireshark中,我们可以使用右键单击一个TCP流,然后选择"Follow",再选择"TCP Stream"来查看完整的重组会话。 如果我们想以程序的方式从pcap中提取并重组TCP会话,我们可以使用特定的编程库或工具,例如Scapy、dpkt等。这些工具提供了API和函数,可以让我们编写代码来读取pcap文件,提取TCP流量,并进行会话重组。 通过以上步骤,我们就可以从pcap中提取并重组TCP会话,以便于进一步的分析和调查。这对于网络管理员、安全分析师或研究人员来说,都是非常有价值的工作。 ### 回答2: 从pcap内提取TCP会话并重组是一种常见的网络流量分析技术,用于对网络通信进行深入研究和分析。下面是一个简单的步骤,用于从pcap中提取TCP会话并重组: 1. 使用网络流量分析工具(如Wireshark)打开pcap文件,并过滤出TCP流量。 2. 根据TCP协议的特性,使用源端口和目的端口以及IP地址信息来区分不同的TCP会话。 3. 对于每个TCP会话,按照TCP协议的顺序对进行排序,确保按照传输顺序进行重组。 4. 通过比较每个TCP的序列号和确认号,以及TCP首部中的ACK标志位来确定数据的重组顺序。 5. 将重组后的TCP按照正确的顺序进行拼接,以恢复原始的TCP会话数据。 6. 对重组后的TCP会话数据进行进一步分析,可以提取出TCP会话中的各种信息,如源IP和目的IP、源端口和目的端口、连接建立时间、连接关闭时间、数据传输的总大小等。 通过从pcap内提取TCP会话并重组,可以更好地理解网络通信的细节,如数据传输顺序、传输延迟、丢情况等。同时,还可以利用这些数据进行网络性能分析、故障排除和安全检测等工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值