PCAP ファイルを 2 つの異なるファイルに分割する必要があります。最初のファイルには ISO/OSI モデルのアプリケーション層に向けられたすべての (そして唯一の) パケットを含め、2 番目のファイルには他のすべてのパケットを含めます。
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
報告された方法は、 2 回解析されるため、計算コストも高くなります (それぞれ 1.5 GB までの PCAP のリストを取得しています) 。
入力 PCAP を 1 回解析して、別のフィルターを適用したいと思います。クラスを使用し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(...)
関数は追加として機能しません)?