dpkt报错:invalid tcpdump header

本文最后更新于:2024年1月16日 晚上

使用dpkt解析pcap文件时,报错:invalid tcpdump header,原因是pcap文件的头部格式不对,需要将pcap文件的头部格式转换为标准格式。

问题描述

Wireshark 收集到的数据包太大,用 editcap 命令拆分,发现拆分后的文件无法用 dpkt 解析,报错:invalid tcpdump header

拆分命令

1
editcap -c 10000 20200116.pcap 20200116.pcap

其中 -c 指定每个文件包含的数据包数量,20200116.pcap 是输入文件,20200116.pcap 是输出文件。

原因分析

editcap 命令拆分后的文件格式是 pcapng,而 dpkt 只支持 pcap 格式,也就是 libpcap 格式。

原因确认

使用 capinfos 命令查看文件格式:

1
capinfos -t 20200116.pcap

输出:

1
2
File name:           20200116.pcap
File type: Wireshark/... - pcapng

其中 pcapng 就是 pcap next generation 的意思,是 libpcap 的下一代格式。

解决方法

使用 editcap 命令将 pcapng 格式转换为 pcap 格式:

1
editcap -F pcap 20200116.pcap 20200116.pcap

其中 -F pcap 指定输出格式为 pcap,第一个 20200116.pcap 是输入文件,第二个 20200116.pcap 是输出文件。
再次使用 capinfos 命令查看文件格式:

1
capinfos -t 20200116.pcap

输出:

1
2
File name:           20200116.pcap
File type: Wireshark/... - pcap

可以看到文件格式已经转换为 pcap 格式了。

其他解决办法

任何能够将 pcapng 转换为 pcap 的工具都可以,但我没有尝试。仅作记录。

tshark

1
tshark -F pcap -r 20200116.pcap -w 20200116.pcap

其中 -F pcap 指定输出格式为 pcap-r 指定输入文件,-w 指定输出文件。

Wireshark 【最简单】

使用 wireshark 打开 pcapng 文件,然后另存为 pcap 格式。

tcpdump

1
tcpdump -r 20200116.pcap -w 20200116.pcap

其中 -r 指定输入文件,-w 指定输出文件。

参考资料


dpkt报错:invalid tcpdump header
https://pawswrite.xyz/posts/f309c2f5.html
作者
Rainbow
发布于
2024年1月16日
许可协议