Более высокая точность отметок времени с scapy


У меня есть пара файлов pcap, которые я создал с помощью vmnet-sniffer и tcpdump. Файлы создаются из пакетов, отправляемых в виртуальную машину и из нее. Я читаю файлы pcap с помощью scapy и пытаюсь найти время прибытия между пакетами, но не могу получить разрешения выше микросекунд. Есть ли в любом случае для scapy, чтобы дать лучшую / более точную информацию?

Мой код:

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

2 ответа:

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

Есть ли в любом случае для scapy, чтобы дать лучшую / более точную информацию?

Только в том случае, если файлы pcap, которые Вы читаете , имеют более точные временные метки.

Для файла захвата, созданного с помощью tcpdump, он должен был быть захвачен с помощью tcpdump 4.6 или более поздней версии, связан с libpcap 1.5 или более поздней версии и захвачен с помощью --time-stamp-precision nano в качестве опции для tcpdump. В противном случае временные метки в файле будут иметь только микросекундную точность.

Вам придется посмотреть на первые 4 байта файла захвата из vmnet-sniffer, чтобы увидеть, имеют ли его временные метки наносекундную точность (тот же тест будет работать на захвате из tcpdump). Если первые 4 байта - A1 B2 C3 D4 или D4 C3 B2 A1, временные метки в файле не имеют наносекундной точности; если они A1 B2 3C 4D или 4D 3C B2 A1, они имеют.

Если scapy использует libpcap для чтения файлов pcap (существуют Python-оболочки для libpcap), то для запроса libpcap ему также придется использовать специальные API поставьте метки времени с наносекундным разрешением (для обратной совместимости libpcap по умолчанию откажется от более высокого разрешения и поставит метки времени с секундным и наносекундным разрешением даже при чтении файлов с метками времени с наносекундным разрешением). Если он использует свой собственный код для их чтения, то этот код должен знать о временных метках с наносекундным разрешением.