pcap文件按照五元组分流

这段代码定义了一个Flow类,用于读取PCAP文件并根据源和目的地址切割网络流量。它首先创建一个目录来保存切割后的文件,然后遍历PCAP包,忽略非TCP流量。对于每个TCP包,它检查是否已存在与其匹配的流量文件,如果存在则写入,否则创建新的文件。这个工具适用于小规模的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值