我有几个用vmnet-sniffer和tcpdump创建的pcap文件。这些文件来自发送进出虚拟机的数据包。我正在用scapy读取pcap文件并试图找到数据包之间的到达间隔时间,但我无法获得高于微秒的任何分辨率。无论如何,scapy能提供更好/更准确的信息吗?
我的代码:
a = rdpcap("test.pcap")
for A in a:
print A.header
答案 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将丢弃更高的分辨率,并提供秒和纳秒时间戳,即使在读取纳秒分辨率时间戳文件时也是如此。如果它使用自己的代码来读取它们,则该代码必须知道纳秒分辨率的时间戳。