【问题标题】:Weird pcap header of byte sequence 0a 0d 0d 0a created on Mac?在 Mac 上创建的字节序列 0a 0d 0d 0a 的奇怪 pcap 标头?
【发布时间】:2013-02-19 18:00:48
【问题描述】:

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

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

【问题讨论】:

    标签: cross-platform pcap pcap-ng


    【解决方案1】:

    我有一个 PCAP 文件

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

    可以在 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 文件,并附加文本 cmets到一些传出数据包,指示发送它们的进程的进程 ID 和进程名称 - pcap-ng 允许将文本 cmets 附加到数据包。)

    但无法在 Linux 系统上解析

    您的 Linux 系统可能具有较旧的 libpcap 版本。 (注意:不要被 Debian 和调用 libpcap 包“libpcap0.8”的 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. 它让代码确定节的字节顺序。

    (不,在查找 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文件。

    【讨论】:

    • 你摇滚,@Guy Harris。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多