Python Scapy vs dpkt

时间:2015-06-14 05:07:23

标签: python scapy dpkt

我正在尝试从头开始使用Python Scapy来分析数据包。在最近的搜索中,我发现python中有另一个名为dpkt的模块。使用此模块,我可以解析数据包的层,创建数据包,读取.pcap文件并写入.pcap文件。我发现他们之间的区别是:

  1. dpkt

  2. 中缺少实时数据包嗅探器
  3. 有些字段需要使用struct.unpack中的dpkt解压缩。

  4. 我还缺少其他差异吗?

2 个答案:

答案 0 :(得分:7)

Scapy的效果优于dpkt

  1. 您可以使用scapy创建,嗅探,修改和发送数据包。虽然dpkt只能分析数据包并创建它们。要发送它们,您需要原始套接字。
  2. 正如你所说,Scapy可以嗤之以鼻。它可以从网络中嗅探,也可以使用.pcap方法或rdpcap方法的offline参数读取sniff文件。
  3. Scapy通常用于创建数据包分析器和注入器。其模块可用于为特定目的创建特定应用程序。
  4. 也可能存在许多其他差异。

答案 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分钟内完成,这是可以接受的,而我什至不必等待其他库完成。至少,这是我的第一印象。如果我有一些新信息,我将更新该帖子。