网络流量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到当前工作目录

最终结果图

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值