我正在尝试从头开始使用Python Scapy
来分析数据包。在最近的搜索中,我发现python中有另一个名为dpkt
的模块。使用此模块,我可以解析数据包的层,创建数据包,读取.pcap
文件并写入.pcap
文件。我发现他们之间的区别是:
dpkt
有些字段需要使用struct.unpack
中的dpkt
解压缩。
我还缺少其他差异吗?
答案 0 :(得分:7)
Scapy
的效果优于dpkt
。
.pcap
方法或rdpcap
方法的offline
参数读取sniff
文件。也可能存在许多其他差异。
答案 1 :(得分:0)
我不明白为什么人们会说Scapy表现更好。我迅速检查如下图,获胜者是dpkt。是dpkt> scapy> pyshark。
我用于测试的输入pcap文件约为12.5 MB。该时间是通过bash时间命令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秒。
时髦-使用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秒。
时髦-使用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秒。
pyshark
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检查了上面为8GB pcap文件编写的代码在4.5分钟内完成,这是可以接受的,而我什至不必等待其他库完成。至少,这是我的第一印象。如果我有一些新信息,我将更新该帖子。