2

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

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 系统上阅读它?

4

1 回答 1

5

我有一个 PCAP 文件

不,你没有。你有一个pcap-ng 文件

可以在 Mac 上使用 Apple 的 libpcap 解析

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 版本。(注意:不要Debian 和 Debian 衍生产品称为 libpcap 包“libpcap0.8”而混淆——它们还没有使用 libpcap 0.8。)

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

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

它们被分成“节”,每个节都以“节头块”(SHB)开头;SHB 的块类型是 0x0a0d0d0a,它与字节顺序无关(因此您不必知道读取 SHB 的字节顺序)并包含回车和换行(因此,如果文件是,对于例如,通过一个工具在 UN*X 系统和 Windows 系统之间进行传输,该工具认为它正在传输一个文本文件并且“有用地”尝试修复行尾,SHB 幻数将被损坏,并且很明显该文件是以这种方式被转移而损坏;把它想象成一个冲击指示器)。

0x78000000 是长度;紧随其后的是“字节顺序魔术”字段,即 0x1A2B3C4D(pcap 文件的 0xA1B2C3D4 幻数不同),其用途与 pcap 幻数相同,即:

  1. 它让代码识别该文件是一个 pcap-ng 文件
  2. 它让代码确定该部分的字节顺序。

(不,在查找 pcap 幻数之前您不需要知道长度;一旦找到了幻数,然后检查长度以确保它至少为 28,如果它小于或等于28,您拒绝该块无效。)

有人知道这是什么吗?

一个(小端序)pcap-ng 文件。

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

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

较新版本的 Wireshark 默认写入 pcap-ng 文件,包括在 mergecap 等工具中;您可以让他们编写带有标志参数的 pcap 文件-F pcap

于 2013-03-05T18:14:57.283 回答