pcap только подбирает новые соединения - PullRequest
0 голосов
/ 02 декабря 2010

Я написал очень простую C-программу для захвата пакетов с использованием pcap.Дело в том, что это только подхватывает небольшую часть моей сетевой активности.(Я думаю, что шаблон заключается в том, что он воспринимает только новые TCP-соединения.)

Например, он принимает пакеты, когда я выполняю GET-запрос с помощью браузера или с помощью wget, или когда язапустите мой IRC-клиент X-Chat и подключитесь.

Однако, когда я оставляю свой IRC-клиент включенным, он не принимает пакеты, соответствующие текстовым сообщениям.Точно так же он не принимает ARP-трансляции в моей домашней сети и не пропингует пакеты, когда я пингую веб-сайт.

Мне интересно, почему он принимает только это небольшое подмножество отправляемых пакетов/ приема.Вот мой кодЯ благодарен за любые отзывы.

Код: http://pastebin.com/QDHRy6jM

Ответы [ 2 ]

0 голосов
/ 13 января 2013

Что вероятно происходит из-за того, что вы работаете на платформе, где время ожидания ведет себя так же, как в BPF (* BSD, OS X), Solaris или Windows с WInPcap, где базовый пакет Механизм захвата, который использует pcap, не доставляет пакеты сразу, но буферизует пакет пакетов и доставляет их в pcap либо по мере заполнения буфера, либо по истечении времени ожидания, а -1 либо интерпретируется как «no timeout», либо « очень большой тайм-аут ".

В этом случае, если поступает достаточно пакетов для заполнения буфера, как это может быть в случае, если вы получаете HTTP и получаете достаточно большой ответ, или если сеанс IRC включает в себя много пакетов для соединения, пакеты будут отображаться, но если поступают только случайные пакеты, такие как пакеты ARP, в основном в тихой сети, пакеты будут оставаться в буфере до тех пор, пока не прибудет достаточно пакетов для заполнения буфера, что может занять неопределенное время, или истекает очень длительное время ожидания, которое может занять довольно много времени.

Уменьшение времени ожидания (tcpdump использует 1000, т. Е. 1 секунду, а Wireshark использует 100, т. Е. 1/10 секунды) означает, что пакеты будут отображаться в течение достаточно короткого периода времени, даже если пакетов недостаточно для заполнения буфер.

0 голосов
/ 02 декабря 2010

Исправлено.Когда я изменяю значение TIMEOUT с -1 на что-то другое, оно работает (то есть оно регистрирует всю сетевую активность).На самом деле не знаю, что там происходит (пока не думал об этом), так что, если кто-то, пожалуйста, привет.

...