如何解决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.




