我从一开始就试图使用Python的Scapy来分析包。在最近的搜索中,我发现python中还有一个模块名为dpkt。通过这个模块,我可以解析数据包的层,创建数据包,读取.pcap文件,并将其写入.pcap文件。我发现它们之间的区别是:
dpkt中丢失实时数据包嗅探器struct.unpack在dpkt中解压缩。我还有什么不同之处吗?
发布于 2016-06-22 09:30:53
Scapy 比 dpkt**.**表现更好
rdpcap方法或sniff方法的offline参数读取sniff文件。可能还有许多其他的区别。
发布于 2019-05-13 21:07:53
我不明白为什么人们说Scapy表现得更好。我迅速检查了如下所示,获胜者是dpkt。是dpkt >替罪羊>大鲨鱼。
用于测试的输入pcap大约为12.5 MB。时间由bash命令time python testing.py导出。在每个片段中,我确保数据包确实是从原始数据中解码的。可以用所需的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秒。
我根本不做广告--我不在乎。关键是我需要解析当前的8GB文件。所以我用dpkt检查了上面为一个8GB pcap编写的代码,它完成了4.5分钟,这是可以忍受的,而我甚至不会等待其他库完成。至少这是我快速的第一印象。如果我有新的信息,我会更新这篇文章。
https://stackoverflow.com/questions/30826123
复制相似问题