6

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

  1. 缺少实时数据包嗅探器dpkt

  2. 有些字段需要使用struct.unpackin解包dpkt

我还缺少其他差异吗?

4

2 回答 2

6

Scapy比 表现更好dpkt

  1. 您可以使用 scapy 创建、嗅探、修改和发送数据包。而 dpkt 只能分析数据包并创建它们。要发送它们,您需要原始套接字。
  2. 正如你提到的,Scapy 可以现场嗅探。它可以从网络中嗅探,也可以使用方法或方法的参数读取.pcap文件。rdpcapofflinesniff
  3. Scapy 通常用于创建数据包分析器和注入器。它的模块可用于为特定目的创建特定应用程序。

可能还有许多其他差异。

于 2016-06-22T09:30:53.303 回答
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 秒。


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

于 2019-05-13T21:07:53.910 回答