pythonscapy vs dpkt

pythonscapy vs dpkt,python,scapy,dpkt,Python,Scapy,Dpkt,我从一开始就试图使用Python的Scapy分析数据包。在最近的搜索中,我发现python中还有另一个模块名为dpkt。有了这个模块,我可以解析数据包的层,创建数据包,读取.pcap文件并写入.pcap文件。我发现他们之间的区别是: dpkt中缺少实时数据包嗅探器 一些字段需要使用dpkt中的struct.unpack解包 我还缺少其他方面的差异吗?Scapy的表现优于dpkt 您可以使用scapy创建、嗅探、修改和发送数据包。而dpkt只能分析并创建数据包。要发送它们,您需要原始套接字 正如你

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

  • dpkt中缺少实时数据包嗅探器

  • 一些字段需要使用
    dpkt
    中的
    struct.unpack
    解包


  • 我还缺少其他方面的差异吗?

    Scapy
    的表现优于
    dpkt

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

  • 可能还有很多其他的不同之处。

    我不明白为什么人们说Scapy的表现更好。如下图所示,我很快进行了检查,获胜者是dpkt。这是dpkt>scapy>pyshark

    我用于测试的输入pcap文件大约为12.5MB。时间是通过bash-time命令
    time-python-testing.py
    派生的。在每个片段中,我确保数据包确实是从原始比特解码的。可以使用所需的pcap文件名分配变量FILENAME

    dpkt

    从dpkt.pcap导入*
    从dpkt.ethernet导入*
    导入操作系统
    readBytes=0
    fileSize=os.stat(FILENAME).st\u size
    将open(FILENAME,'rb')作为f:
    对于t,读取器中的pkt(f):
    readBytes+=len(以太网(pkt))
    打印(“%.2f”%(浮点(读字节)/文件大小*100))
    
    平均时间约为0.3秒


    scapy——使用PcapReader

    从scapy.all导入*
    导入操作系统
    readBytes=0
    fileSize=os.stat(FILENAME).st\u size
    对于PcapReader中的pkt(文件名):
    readBytes+=len(pkt)
    打印(“%.2f”%(浮点(读字节)/文件大小*100))
    
    平均时间约为4.5秒


    scapy——使用RawPcapReader

    从scapy.all导入*
    导入操作系统
    readBytes=0
    fileSize=os.stat(FILENAME).st\u size
    对于RawPcapReader(文件名)中的pkt(sec、usec、wirelen、c):
    readBytes+=len(以太(pkt))
    打印(“%.2f”%(浮点(读字节)/文件大小*100))
    
    平均时间约为4.5秒


    pyshark

    导入pyshark
    导入操作系统
    filtered_cap=pyshark.FileCapture(文件名)
    readBytes=0
    fileSize=os.stat(FILENAME).st\u size
    对于过滤盖中的pkt:
    readBytes+=int(pkt.length)
    打印(“%.2f”%(浮点(读字节)/文件大小*100))
    
    平均时间约为12秒



    我根本不为dpkt做广告——我不在乎。关键是我目前需要解析8GB文件。所以我检查了一下,使用dpkt,上面为8GB pcap文件编写的代码完成了4.5分钟,这是可以接受的,而我甚至不会等待其他库完成。至少,这是我的第一印象。如果我有一些新的信息,我会更新帖子

    表演怎么样?您测试过它们了吗?Scapy提供了比dpkt.Hmm更好的性能,但永远不要忘记数据包捕获接口缓冲。您必须解决这一问题,否则将因实时监控而遭受巨大的性能损失。以上内容是错误的。Scapy是纯粹的pythonther,不应该有比较。一般来说,您可能不应该使用任何基于Python的软件来快速处理大量数据
    dpkt
    速度更快,但在
    scapy
    中添加自己的图层更容易
    pyshark
    wrapps
    tshark
    =wireshark,因此您根本无法添加任何内容,但它得益于wireshark的稳定性和多样性。FTR如果您尝试使用pypy,它会加快速度。好的,dpkt要快得多,对于某些(相当常见的)操作来说,它的速度大约是10倍。我在15分钟内处理了大约5000万个数据包,并进行了一些相对基本的操作,但仍然需要。我没有准备好等待我之前完成的scapy实现。@AdamKalisz我同意。但是对SCAPI有一点调整,Saby和DPKT的性能相当。只需将一些常见操作更改为内置函数。如果您能指出您提到的这些更改的摘要,并将其合并到主要的Scapy文档中,那就太好了。