dpkt报错:invalid tcpdump header
本文最后更新于:2024年1月16日 晚上
使用dpkt解析pcap文件时,报错:invalid tcpdump header,原因是pcap文件的头部格式不对,需要将pcap文件的头部格式转换为标准格式。
问题描述
Wireshark 收集到的数据包太大,用 editcap 命令拆分,发现拆分后的文件无法用 dpkt 解析,报错:invalid tcpdump header。
拆分命令
1 | |
其中 -c 指定每个文件包含的数据包数量,20200116.pcap 是输入文件,20200116.pcap 是输出文件。
原因分析
editcap 命令拆分后的文件格式是 pcapng,而 dpkt 只支持 pcap 格式,也就是 libpcap 格式。
原因确认
使用 capinfos 命令查看文件格式:
1 | |
输出:
1 | |
其中 pcapng 就是 pcap next generation 的意思,是 libpcap 的下一代格式。
解决方法
使用 editcap 命令将 pcapng 格式转换为 pcap 格式:
1 | |
其中 -F pcap 指定输出格式为 pcap,第一个 20200116.pcap 是输入文件,第二个 20200116.pcap 是输出文件。
再次使用 capinfos 命令查看文件格式:
1 | |
输出:
1 | |
可以看到文件格式已经转换为 pcap 格式了。
其他解决办法
任何能够将 pcapng 转换为 pcap 的工具都可以,但我没有尝试。仅作记录。
tshark
1 | |
其中 -F pcap 指定输出格式为 pcap,-r 指定输入文件,-w 指定输出文件。
Wireshark 【最简单】
使用 wireshark 打开 pcapng 文件,然后另存为 pcap 格式。
tcpdump
1 | |
其中 -r 指定输入文件,-w 指定输出文件。
参考资料
dpkt报错:invalid tcpdump header
https://pawswrite.xyz/posts/f309c2f5.html