Я использую 10000
to_ms аргумент pcap_open_live()
и pcap_set_timeout()
в миллисекундах.
10000 миллисекунд - 10 секунд.
Попробуйте использовать 1000, что означает использование tcpdump - это уменьшит задержку до 1 секунды - или использует 100, что является значением, используемым Wireshark, что уменьшит задержку до 1/10 секунды.
Я прочитал на учебник по этой области: «по крайней мере, в некоторых платформах, это означает, что вы можете ждать, пока достаточное количество пакетов, не дойдет до просмотра всех пакетов, так что вы должны использовать ненулевую тайм-аут»
в учебнике речь идет the tcpdump.org "How to use libpcap" tutorial, и проход в вопросе был добавлен в этом CVS совершать:
revision 1.8
date: 2005/08/27 23:58:39; author: guy; state: Exp; lines: +34 -31
Use a non-zero timeout in pcap_open_live(), so you don't wait for a
bufferful of packets before any are processed.
Correctly explain the difference between pcap_loop() and
pcap_dispatch().
In sniffex.c, don't print the payload if there isn't any.
, так что я знаком с ним. :-)
Мне нужно было потратить некоторое время на просмотр кода ядра Linux (снова), чтобы узнать, какое влияние имеет значение тайм-аута 0 на более новые ядра. Однако при написании кода, который использует libpcap/WinPcap для записи в реальном времени, вы должны всегда действовать так, как будто вы пишете код для такой платформы; ваш код будет более переносимым для других платформ. и не сломаются, если изменится поведение нулевого таймаута.
Какое значение вы передаете в качестве аргумента * to_ms * для 'pcap_open_live()' или 'pcap_set_timeout()' в вашей программе? –
Спасибо за внимание. Я использую 10000. Кроме того, я использую Debian linux. Я прочитал учебник об этом поле: «по крайней мере на некоторых платформах это означает, что вы можете дождаться появления достаточного количества пакетов до просмотра каких-либо пакетов, поэтому вы должны использовать ненулевой тайм-аут». Но я не уверен, что понимаю , Является ли linux среди этих платформ? –