You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何解决dpkt无法解码.pcap文件及本地代码运行报错问题

解决Windows下dpkt读取pcap文件报错的问题

嘿,这个问题我之前也遇到过!先看看你的报错核心点:

Traceback (most recent call last): 
  File "wireshark_02.py", line 74, in <module> main() 
  File "wireshark_02.py", line 43, in main 
    input_data = dpkt.pcap.Reader(open(file_name,'r')) 
  File "C:\Users\Slava\AppData\Local\Programs\Python\Python36-32\lib\site-packages\dpkt\pcap.py", line 244, in __init__ 
    buf = self.__f.read(FileHdr.__hdr_len__) 
  File "C:\Users\Slava\AppData\...

问题根源

Linux系统里,Python用'r'模式打开文件时,不会区分文本和二进制文件,所以能正常读取pcap这种二进制格式。但Windows对文本模式和二进制模式有严格区分:用'r'打开时,会自动转换换行符(比如把\n转成\r\n),这直接破坏了pcap文件的二进制结构,导致dpkt读取文件头时出错。

快速解决方案

把打开文件的模式改成二进制读取模式'rb',修改代码第43行:

input_data = dpkt.pcap.Reader(open(file_name,'rb'))

这样Windows就会以二进制方式读取文件,不会修改原始内容,和Linux下的行为保持一致,dpkt就能正常解析pcap文件了。

额外排查点(如果修改后仍有问题)

  • 检查本地的pcap文件是否完整,有没有损坏:可以用Wireshark直接打开试试,能正常打开说明文件没问题
  • 对比本地和学校Linux机器上的dpkt版本:版本差异也可能导致兼容问题,你可以用pip show dpkt查看本地版本,再和学校的对比

内容的提问来源于stack exchange,提问作者Slava A.

火山引擎 最新活动