Как сообщить libpcap v1.6.2 для хранения значений наносекунд в struct pcap_pkthdr::ts.tv_usec
(вместо значений микросекунды) при захвате живых пакетов?Как включить точность наносекунд при захвате прямого трафика?
(Примечание. Этот вопрос похож на How to enable nanosecond resolution when capturing live packets in libpcap?, но этот вопрос достаточно расплывчат, что я решил задать новый вопрос)
Для автономных и «мертвых» захватов, следующие функции могут быть использованы сказать Libpcap, чтобы заполнить struct pcap_pkthdr
«s ts.tv_usec
элемента со значениями наносекундных:
pcap_open_dead_with_tstamp_precision()
pcap_open_offline_with_tstamp_precision()
pcap_fopen_offline_with_tstamp_precision()
К сожалению, не представляется, _with_tstamp_precision
варианты для pcap_open_live()
или pcap_create()
.
Я считаю, что захват живых пакетов с наносекундным разрешением должно быть возможным, так как changelog для v1.5.0 говорит (курсив мой):
Добавить поддержку для получения временных меток наносекундным разрешением при захвате и чтение файлов захвата
Я вижу pcap_set_tstamp_type()
функцию и pcap-tstamp
man page, в котором говорится:
PCAP_TSTAMP_HOST
-host
: Временная метка, предоставляемая хостом, на котором выполняется захват. Точность этой метки времени не определена; он может или не может быть синхронизирован с часами операционной системы хоста.PCAP_TSTAMP_HOST_LOWPREC
-host_lowprec
: Временная метка, предоставляемая хостом, на котором выполняется захват. Это низкоточная метка времени, синхронизированная с часами операционной системы хоста.PCAP_TSTAMP_HOST_HIPREC
-host_hiprec
: Временная метка, предоставляемая хостом, на котором выполняется захват. Это высокоточная отметка времени; он может или не может быть синхронизирован с часами операционной системы хоста. Это может быть дороже, чемPCAP_TSTAMP_HOST_LOWPREC
.PCAP_TSTAMP_ADAPTER
-adapter
: Временная метка, предоставляемая сетевым адаптером, на котором выполняется захват. Это высокоточная метка времени, синхронизированная с часами операционной системы хоста.PCAP_TSTAMP_ADAPTER_UNSYNCED
-adapter_unsynced
: Временная метка, предоставляемая сетевым адаптером, на котором выполняется захват. Это высокоточная отметка времени; он не синхронизируется с часами операционной системы хоста.
ли здесь в виду фразы «высокоточная Отметка времени», что значения наносекундных сохраняются в ts.tv_usec
поле заголовка в?Если это так, PCAP_TSTAMP_HOST
говорит «неуказанный», так как мне определить во время выполнения, имеет ли поле ts.tv_usec
микросекунды или наносекунды? И какой из них является значением по умолчанию, если pcap_set_tstamp_type()
никогда не называется?
Не могу ли я просто проверить возвращаемое значение 'pcap_set_tstamp_precision()', чтобы увидеть, не сработало ли оно вместо вызова 'pcap_get_tstamp_precision()'? –
Я обновил обе страницы man, чтобы упомянуть о функциях. Обновления появятся в некоторых будущих выпусках; когда это будет отображаться в вашем любимом дистрибутиве/* BSD/OS X/Solaris/etc. это другое дело. –
Удивительный, спасибо! –