import os
import time
from unittest.mock import patch
from scapy.all import *
class Flow():
def __init__(self,basePath,path,dst):
self.basePath=basePath
self.a = rdpcap(path)
self.dst=dst
def cutflows(self):
list = {}
for i in self.a:
print(i)
if(str(i[1].proto)!='6'):
continue
if (len(list)==0):
list[0]=(i[1].src+str(i[2].sport)+i[1].dst+str(i[2].dport))
wrpcap(self.basePath+self.dst+'\\0.pcap',i,append=True)
continue
for j in range(len(list)):
if((i[1].src+str(i[2].sport)+i[1].dst+str(i[2].dport))==list[j]or((i[1].dst+str(i[2].dport))+i[1].src+str(i[2].sport))==list[j]):
wrpcap(self.basePath+self.dst+'\\{}.pcap'.format(j),i,append=True)
break
if(j==len(list)-1):
list[j+1]=(i[1].src+str(i[2].sport)+i[1].dst+str(i[2].dport))
wrpcap(self.basePath+self.dst+'\\{}.pcap'.format(j+1),i,append=True)
break
if __name__ == '__main__':
# 目标pcap文件为 base_path + pcap_name
pcap_name='0.pcap'
base_path="H:\\flow_cut\\"
dst_folder='dst'
os.mkdir(base_path+dst_folder)
flow=Flow(base_path,base_path+pcap_name,dst_folder)
print("start")
flow.cutflows()
print("finish")
time.sleep(2)
刚接触网络流量的时候写的,用来处理小规模数据还可以捏
PS:需要修改base_path和pcap_name即可