0
我需要將PCAP文件分成兩個不同的文件:第一個應該包括所有(且僅限於)指向ISO/OSI模型應用層的數據包,而第二個包括所有其他的。從數據包ISO/OSI層過濾PCAP文件
我使用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
(文件大小)與文件大小infile
的和是不同的(低)。
由於infile
被解析了兩次,所報告的方法在計算上也很昂貴(並且我得到了每個約1.5GB的PCAP列表)。
我寧願應用不同的過濾器,解析一次輸入PCAP。 我可以使用PcapReader
類並手動解析PCAP,但我不知道如何生成PCAP傳遞給wrpcap(...)
方法。
編輯: 我也試過這種解決方案:
pkts = PcapReader(infile)
app_pkts = []
low_pkts = []
for p in pkts:
if p.haslayer(Raw):
app_pkts.append(p)
else:
low_pkts.append(p)
wrpcap(applayerfilename, app_pkts)
wrpcap(lowlayersfilename, low_pkts)
,但它不工作,因爲它消耗,因爲我輸入PCAP的大小太多的內存...
append_to_pcap(filename, packet)
like函數是否存在(wrpcap(...)
函數不起作用)?