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 分間実行されることを確認しましたが、これは耐えられますが、他のライブラリが完了するのを待つことさえありません。少なくとも、これが私の簡単な第一印象です。新しい情報があれば、記事を更新します。