更高的时间戳精度与scapy

时间:2015-04-21 23:38:38

标签: python vmware scapy tcpdump

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

我的代码:

a = rdpcap("test.pcap")
for A in a:
    print A.header

2 个答案:

答案 0 :(得分:3)

>>> 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

答案 1 :(得分:0)

  

是否有scapy提供更好/更准确的信息?

仅当您正在阅读的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 提供纳秒分辨率的时间戳(为了向后兼容)默认情况下,libpcap将丢弃更高的分辨率,并提供秒和纳秒时间戳,即使在读取纳秒分辨率时间戳文件时也是如此。如果它使用自己的代码来读取它们,则该代码必须知道纳秒分辨率的时间戳。