如何获得 pcap 文件的字节对齐?
How to get byte alignment of a pcap file?
我正在尝试读取由不同工具创建的 PCAP 文件。
一种工具不进行字节对齐,另一种工具始终与下一个双字对齐。
我怎样才能确定正在使用哪种对齐方式?
如此处所述:https://wiki.wireshark.org/Development/LibpcapFileFormat
Each captured packet starts with (any byte alignment possible)[...]
我不想使用 libpcap,因为我的文件有时会损坏,然后我需要处理底层文件的位和字节。
The official man page for the pcap file format 指定文件以 24 字节文件 header 开头,紧接着(没有填充)是一系列数据包记录。
每个数据包以 16 字节 header 开头,然后是数据包数据;数据包数据后有 NO 填充 - 数据包数据的字节数与 "Length of captured packet data" 字段指定的字节数完全相同header.
所以,是的,任何字节对齐都是可能的。
如果某个工具在数据包之间放置填充,则该工具存在错误。 pcap文件中没有规定记录是否有任何这样的填充,因为不应该是这样的填充。
因此,任何对带有填充的格式错误的 pcap 文件的修复都需要试探法来猜测是否存在填充。您可能想查看 pcapfix 工具,看看它是否可以修复第二个工具生成的任何错误文件。 (请告诉写那个工具的人不要填充数据包记录以保证下一条记录在双字边界上!)
If 该工具使用捕获的长度字段写出记录 而不是 包括填充的长度 - 例如,如果一个 63字节数据包,所有这些都被捕获,捕获长度为 63 和一个额外的填充字节 - 然后你可以编写自己的修复程序。它将:
- 读取文件header并写出;
- 读取每个数据包,计算出抓取长度的rounded-up-to-a-doubleword-size值,写出数据包header和抓取数据的non-rounded-up字节数,跳过下一个( {rounded-up 捕获长度} - {header} 中捕获的长度)字节(填充)以到达下一个数据包的开头;
一直这样做直到数据包用完。
我正在尝试读取由不同工具创建的 PCAP 文件。
一种工具不进行字节对齐,另一种工具始终与下一个双字对齐。 我怎样才能确定正在使用哪种对齐方式?
如此处所述:https://wiki.wireshark.org/Development/LibpcapFileFormat
Each captured packet starts with (any byte alignment possible)[...]
我不想使用 libpcap,因为我的文件有时会损坏,然后我需要处理底层文件的位和字节。
The official man page for the pcap file format 指定文件以 24 字节文件 header 开头,紧接着(没有填充)是一系列数据包记录。
每个数据包以 16 字节 header 开头,然后是数据包数据;数据包数据后有 NO 填充 - 数据包数据的字节数与 "Length of captured packet data" 字段指定的字节数完全相同header.
所以,是的,任何字节对齐都是可能的。
如果某个工具在数据包之间放置填充,则该工具存在错误。 pcap文件中没有规定记录是否有任何这样的填充,因为不应该是这样的填充。
因此,任何对带有填充的格式错误的 pcap 文件的修复都需要试探法来猜测是否存在填充。您可能想查看 pcapfix 工具,看看它是否可以修复第二个工具生成的任何错误文件。 (请告诉写那个工具的人不要填充数据包记录以保证下一条记录在双字边界上!)
If 该工具使用捕获的长度字段写出记录 而不是 包括填充的长度 - 例如,如果一个 63字节数据包,所有这些都被捕获,捕获长度为 63 和一个额外的填充字节 - 然后你可以编写自己的修复程序。它将:
- 读取文件header并写出;
- 读取每个数据包,计算出抓取长度的rounded-up-to-a-doubleword-size值,写出数据包header和抓取数据的non-rounded-up字节数,跳过下一个( {rounded-up 捕获长度} - {header} 中捕获的长度)字节(填充)以到达下一个数据包的开头;
一直这样做直到数据包用完。