如何获得pcap文件的字节对齐?

时间:2015-11-24 14:10:11

标签: pcap

我试图阅读由不同工具创建的PCAP文件。

一个工具没有字节对齐,另一个工具总是与下一个双字对齐。 如何确定使用哪种对齐方式?

如上所述:https://wiki.wireshark.org/Development/LibpcapFileFormat

  

每个捕获的数据包都以(可能的任何字节对齐)[...]

开头

我不想使用libpcap,因为我的文件有时会被破坏,然后我需要使用底层文件的位和字节。

1 个答案:

答案 0 :(得分:2)

The official man page for the pcap file format指定文件以24字节文件头开头,然后立即(没有填充)由一系列包记录开始。

每个数据包以一个16字节的标头开头,然后是数据包数据;在数据包数据之后有 NO 填充 - 包含数据的字节数与"捕获的数据包数据的长度"所指定的完全一样多。标题中的字段。

所以,是的,任何字节对齐都是可能的。

如果某个工具在数据包之间放置填充,该工具有一个错误。 pcap文件中没有规定记录是否存在任何此类填充,因为

因此,对带有填充的格式错误的pcap文件进行任何修复都需要启发式方法来猜测是否存在填充。您可能希望查看pcapfix工具,看它是否可以修复第二个工具生成的任何错误文件。 (并且请告诉谁使用该工具 NOT 来填充数据包记录,以保证下一条记录在双字边界上!)

如果该工具写出带有捕获的长度字段而不是的记录,包括填充的长度 - 例如,如果是63字节的数据包,所有这些都是捕获,捕获的长度为63和一个额外的填充字节 - 然后你可以编写自己的修复程序。它会:

  • 读取文件标题并将其写出来;
  • 读取每个数据包,计算捕获长度的向上舍入到双字大小的值,写出数据包标头和捕获数据的非舍入字节数,然后跳过下一个( {舍入捕获的长度} - {标题中捕获的长度})字节(填充)到达下一个数据包的开头;

然后执行此操作直到数据包耗尽。