scapy 的时间戳精度更高

Higher timestamp precision with scapy

我有几个使用 vmnet-sniffer 和 tcpdump 创建的 pcap 文件。这些文件来自进出虚拟机的数据包。我正在用 scapy 读取 pcap 文件并试图找到数据包之间的到达时间,但我无法获得高于微秒的分辨率。无论如何,scapy 是否可以提供 better/more 准确的信息?

我的代码:

a = rdpcap("test.pcap")
for A in a:
    print A.header
>>> a = rdpcap('/tmp/tmp.pcap')
>>> for A in a:
...     print('%.6f' % A.time)
... 
1429659651.461177
1429659651.461444
1429659651.461520
1429659651.461972
1429659651.462230
1429659651.465091
1429659651.465319
1429659651.465838
1429659651.466115
1429659651.466379

上例中小数点后 6 位是任意的。精度要高得多(至少在我的机器上生成的pcap文件):

>>> for A in a:
...     print('%.30f' % A.time)
... 
1429659651.461177110671997070312500000000
1429659651.461443901062011718750000000000
1429659651.461519956588745117187500000000
1429659651.461971998214721679687500000000
1429659651.462229967117309570312500000000
1429659651.465090990066528320312500000000
1429659651.465318918228149414062500000000
1429659651.465837955474853515625000000000
1429659651.466114997863769531250000000000
1429659651.466378927230834960937500000000

Is there anyway for scapy to give better/more precise information?

仅当您正在读取的 pcap 文件具有 更高精度的时间戳时。

对于使用 tcpdump 创建的捕获文件,它必须使用 tcpdump 4.6 或更高版本捕获,与 libpcap 1.5 或更高版本链接,并使用 --time-stamp-precision nano 作为 tcpdump 的选项捕获。否则,文件中的时间戳将只有微秒精度。

您必须查看来自 vmnet-sniffer 的捕获文件的前 4 个字节,以查看其时间戳是否具有纳秒精度(相同的测试将适用于来自 tcpdump 的捕获)。如果前 4 个字节是 A1 B2 C3 D4 或 D4 C3 B2 A1,则文件中的时间戳没有纳秒精度;如果他们是 A1 B2 3C 4D 或 4D 3C B2 A1,他们会。

如果 scapy 使用 libpcap 读取 pcap 文件(libpcap 有 Python 包装器),那么它还必须使用特殊的 API 来请求 libpcap supply纳秒分辨率时间戳(为了向后兼容,默认情况下,libpcap 将丢弃更高分辨率,并提供秒和纳秒时间戳,即使在读取纳秒分辨率时间戳文件时也是如此)。如果它使用自己的代码来读取它们,则该代码必须知道纳秒分辨率的时间戳。