0

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(...)関数は追加として機能しません)?

4

1 に答える 1

0

私は(少なくとも明らかに)この方法で解決しました:

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()
于 2012-12-21T12:48:33.623 に答える