我有一个 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 幻数相同,即:
- 它让代码识别该文件是一个 pcap-ng 文件
- 它让代码确定该部分的字节顺序。
(不,在查找 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
。