6

最初からPython を使用してパケットを分析しようとしていますScapy。最近検索したところ、python に という名前の別のモジュールがあることがわかりましたdpkt。このモジュールを使用すると、パケットのレイヤーを解析し、パケットを作成し、ファイルを読み取り、.pcapファイルに書き込むことが.pcapできます。それらの間で私が見つけた違いは次のとおりです。

  1. でのライブ パケット スニファの欠落dpkt

  2. struct.unpack一部のフィールドは、 inを使用してアンパックする必要がありますdpkt

私が見逃している他の違いはありますか?

4

2 に答える 2

2

Scapy の方が優れていると人々が言う理由がわかりません。以下に示すようにすぐに確認したところ、勝者はdpktでした。dpkt > scapy > pyshark です。

テストに使用した入力 pcap ファイルは約 12.5 MB です。時刻は bash time コマンドで取得されtime python testing.pyます。各スニペットで、パケットが生のバイトから実際にデコードされていることを確認します。変数 FILENAME に必要な pcap ファイル名を割り当てることができます。

dpkt

from dpkt.pcap import *
from dpkt.ethernet import *
import os

readBytes = 0
fileSize  = os.stat(FILENAME).st_size

with open(FILENAME, 'rb') as f:
    for t, pkt in Reader(f):
        readBytes += len(Ethernet(pkt))
        print("%.2f" % (float(readBytes) / fileSize * 100))

平均時間は約0.3秒です。


scapy -- PcapReader の使用

from scapy.all import *
import os

readBytes = 0
fileSize  = os.stat(FILENAME).st_size

for pkt in PcapReader(FILENAME):

    readBytes += len(pkt)
    print("%.2f" % (float(readBytes) / fileSize * 100))

平均時間は約 4.5 秒です。


scapy -- RawPcapReader の使用

from scapy.all import *
import os

readBytes = 0
fileSize  = os.stat(FILENAME).st_size

for pkt, (sec, usec, wirelen, c) in RawPcapReader(FILENAME):

    readBytes += len(Ether(pkt))
    print("%.2f" % (float(readBytes) / fileSize * 100))

平均時間は約 4.5 秒です。


パイシャーク

import pyshark
import os

filtered_cap = pyshark.FileCapture(FILENAME)

readBytes = 0
fileSize  = os.stat(FILENAME).st_size

for pkt in filtered_cap:
     readBytes += int(pkt.length)
     print("%.2f" % (float(readBytes) / fileSize * 100))

平均時間は約12秒です。


私は dpkt をまったく宣伝していません。気にしません。ポイントは、現在 8GB のファイルを解析する必要があるということです。そこで、dpkt を使用して、8 GB の pcap ファイルの上記のコードが 4.5 分間実行されることを確認しましたが、これは耐えられますが、他のライブラリが完了するのを待つことさえありません。少なくとも、これが私の簡単な第一印象です。新しい情報があれば、記事を更新します。

于 2019-05-13T21:07:53.910 に答える