从数据包ISO/OSI lay过滤PCAP文件

2024-06-28 20:00:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将一个PCAP文件分成两个不同的文件:第一个文件应该包括所有(并且只)指向ISO/OSI模型的应用层的数据包,而第二个文件包括所有其他文件。在

我用Scapy来应用过滤器:

pkts = PcapReader(infile)
applayerpkts = (pkt for pkt in pkts if pkt.haslayer(Raw))
lowlayerspkts = (pkt for pkt in pkts if not pkt.haslayer(Raw))
wrpcap(applayerfilename, applayerpkts)
wrpcap(lowlayersfilename, lowlayerspkts)

使用pkt.haslayer(Raw)方法,因为该层只应包含在定向到应用层的数据包上。在

怎么了?我注意到applayerfilename+lowlayersfilename(在文件大小中)与{}的文件大小不同(较小)。在

所报告的方法在计算上也很昂贵(我有一个大约1.5GB的PCAP列表),因为{}被解析了两次。在

我希望应用不同的过滤器,解析一次输入的PCAP。 我可以使用PcapReader类并手动解析PCAP,但是我不知道如何生成一个PCAP来传递给wrpcap(...)方法。在

编辑: 我也尝试过这个解决方案:

^{pr2}$

但它不起作用,因为我输入的PCAP太大,它消耗了太多内存。。。在

是否存在类似append_to_pcap(filename, packet)的函数(wrpcap(...)函数不作为追加函数工作)?在


Tags: 文件方法函数过滤器forrawpcap数据包
1条回答
网友
1楼 · 发布于 2024-06-28 20:00:12

我(至少表面上)是这样解决的:

pkts = PcapReader(infile)

app_writer = PcapWriter(applayerfilename, append=True)
low_writer = PcapWriter(lowlayersfilename, append=True)
for p in pkts:
    if p.haslayer(Raw):
        app_writer.write(p)
    else:
        low_writer.write(p)
app_writer.close()
low_writer.close()

相关问题 更多 >