【问题标题】:What's the difference between a PCAP file with a magic number of "0x4d3cb2a1" and "0xd4c3b2a1"?幻数为“0x4d3cb2a1”和“0xd4c3b2a1”的 PCAP 文件有什么区别?
【发布时间】:2013-07-30 06:33:36
【问题描述】:

我有两个 PCAP 文件,AB

Ad4 c3 b2 a1 的标头中有一个“幻数”,B4d 3c b2 a1 的标头中有一个“幻数”。根据wireshark文档(http://wiki.wireshark.org/Development/LibpcapFileFormat),只有0xd4c3b2a10xa1b2c3d4是有效的幻数,这让我认为B不是有效的幻数。

在 linux 上运行 file 支持这一点,file A 的输出为:

tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)

file B 简单地给出:

data

看起来无论写什么B 都是以“交换”(小端)格式写的,但是用半字节写错了forst twp字节。鉴于我希望大端系统以相反的方式写入整个 int32 而不是单个字节,因此给出了 1a 2b 3c 4d 的幻数。

B 是有效文件吗?如果是这样,为什么?不同的系统能否以任意顺序在一个字节中同时写入 32 位整数和单个半字节?

【问题讨论】:

    标签: endianness pcap


    【解决方案1】:

    幻数为“0x4d3cb2a1”和“0xd4c3b2a1”的PCAP文件有什么区别?

    幻数为 0xa1b23c4d 或 0x4d3cb2a1 的 pcap 文件是一个 pcap 文件,其中数据包时间戳以秒和 纳秒为单位。

    幻数为 0xa1b2c3d4 或 0xd4c3b2a1 的 pcap 文件是“常规”pcap 文件,其中数据包时间戳以秒和 微秒 为单位。

    你从哪里得到文件 B?以“纳秒分辨率”格式写入文件的唯一标准 libpcap 版本是 libpcap Git 树的主干上的版本,并且只有在使用 libpcap 的程序正在读取另一种“纳秒分辨率”格式或明确请求时才会发生这种情况来自网络适配器的纳秒分辨率时间戳(目前仅在 Linux 上受支持,并且可能需要足够新的内核)。这也是唯一可以读取它们的版本。默认情况下,Wireshark 不会生成它们,尽管最新版本的 Wireshark 可以读取它们。

    【讨论】:

    • 查看wireshark,我确实可以看到B 的帧时间戳显示为9dp,但A 的帧时间戳实际上只有6dp(最后三个始终为0)。 B 是由专门的网卡生成的,看起来它支持 ns 分辨率。 :)
    • 您要么需要专门的 NIC,要么需要具有支持纳秒分辨率的捕获机制的操作系统才能获得纳秒分辨率的时间戳。您需要一个程序和/或库,可以从 NIC/OS 获取这些高分辨率时间戳,并且可以编写纳秒级分辨率的时间戳;知道是哪个程序写的吗?
    • 做了更多的挖掘工作。很可能是其中之一napatech.com/products/network_adapters.html - 认为驱动程序支持以 1ns 分辨率写入 PCAP。
    猜你喜欢
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2020-08-19
    • 2011-05-22
    • 2010-10-26
    • 2011-01-26
    相关资源
    最近更新 更多