当前位置:   article > 正文

网络流量pcap包特征提取并保存_oserror: tshark is not installed or added to envir

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

前言

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

获取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

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

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

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

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

我自己使用这个库是为了获得有关网络流量中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')
  • 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

这里我以列表的形式储存了特征。之所以有删除没有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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

最终结果图

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/487245
推荐阅读
相关标签
  

闽ICP备14008679号