在Mac上创建字节序列0a 0d 0d 0a的奇怪的pcap头?

时间:2013-03-05 10:58:35

标签: cross-platform pcap pcap-ng

我有一个在mergecap的Mac上创建的PCAP文件,可以在Mac上使用Apple的libpcap进行解析但无法在Linux系统上进行解析。组合文件有一个额外的16字节标头,在0a 0d 0d 0a 78 00 00 00介绍之前包含4d 3c 2b 1a,这在pcap文件中是常见的。这是一个十六进制转储:

0000000: 0a0d 0d0a 7800 0000 4d3c 2b1a 0100 0000  ....x...M<+.....
0000010: ffff ffff ffff ffff 0100 4700 4669 6c65  ..........G.File
0000020: 2063 7265 6174 6564 2062 7920 6d65 7267   created by merg
0000030: 696e 673a 200a 4669 6c65 313a 2037 2e70  ing: .File1: 7.p
0000040: 6361 7020 0a46 696c 6532 3a20 362e 7063  cap .File2: 6.pc
0000050: 6170 200a 4669 6c65 333a 2034 2e70 6361  ap .File3: 4.pca
0000060: 7020 0a00 0400 0800 6d65 7267 6563 6170  p ......mergecap

有人知道这是什么吗?或者我如何在使用libpcap的Linux系统上阅读它?

1 个答案:

答案 0 :(得分:3)

  

我有一个PCAP文件

不,你没有。你有一个pcap-ng file

  

可以使用Apple的libpcap

在Mac上解析

libpcap 1.1.0及更高版本也可以读取一些pcap-ng文件(pcap API只允许一个文件有一个链接层头类型,一个快照长度和一个字节顺序,所以只有pcap-ng文件在哪里所有部分都具有相同的字节顺序,并且所有接口都具有相同的链路层标头类型和支持的快照长度),OS X Snow Leopard及更高版本具有基于1.1.x的libpcap,因此他们可以读取这些文件。

(OS X Mountain Lion和后来调整了libpcap以允许它 pcap-ng文件; -P标志使tcpdump写出pcap-ng文件,带有文本附加到某些传出数据包的注释,指示发送它们的进程的进程ID和进程名称 - pcap-ng允许将文本注释附加到数据包。)

  

但无法在Linux系统上解析

您的Linux系统可能有较旧的libpcap版本。 (注意:对于调用libpcap软件包“libpcap0.8”的Debian和Debian衍生产品,会混淆 - 他们还没有使用libpcap 0.8。)

  

组合文件有一个额外的16字节标头,包含0a 0d 0d 0a 78 00 00 00

pcap-ng文件是一系列“块”,以4字节块类型和4字节长度开头,均以写入它们的主机的字节顺序开始。

它们被分为“部分”,每个部分以“Section Header Block”(SHB)开头; SHB的块类型是0x0a0d0d0a,它是字节顺序无关的(因此您不必知道读取SHB的字节顺序)并包含回车符和换行符(如果文件是,则为例如,在UN * X系统和Windows系统之间通过认为它正在传输文本文件并且“有帮助”尝试修复行结尾的工具进行传输,SHB幻数将被破坏,很明显该文件是通过以这种方式转移而腐败;将其视为等同于shock indicator)。

0x78000000是长度;接下来是“字节顺序魔术”字段,即0x1A2B3C4D(与pcap文件的0xA1B2C3D4幻数相同),其作用与pcap幻数相同,即:

  1. 它允许代码识别该文件是pcap-ng文件
  2. 它允许代码确定该部分的字节顺序。
  3. (不,你在查找pcap幻数之前不需要知道长度;一旦你找到了幻数,你就检查长度以确保它至少为28,如果它小于或等于28,您拒绝该块无效。)

      

    有人知道这是什么吗?

    (小端)pcap-ng文件。

      

    或者我如何在使用libpcap的Linux系统上阅读它?

    要么在具有较新版本libpcap的Linux系统上读取它(这可能意味着您正在使用的任何发行版的更新版本,或者可能只是意味着进行更新,如果这将使您获得1.1.0或更高版本libpcap),使用Wireshark或TShark(它们有自己的库来读取捕获文件,它支持原生的pcap和pcap-ng格式,以及许多其他格式),或从下载更新版本的libpcap tcpdump.org,构建它,安装它,然后构建使用该版本的libpcap而不是系统附带的文件读取pcap-ng文件所需的任何其他工具。

    默认情况下,较新版本的Wireshark会写入pcap-ng文件,包括mergecap等工具;你可以让他们写一个标志参数为-F pcap的pcap文件。

相关问题