2010-12-01 2 views
0

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

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

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

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

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

ответ

0

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

0

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

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

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

Смежные вопросы