tcpdump: потерянные пакеты

Бег, либо в беспорядочном режиме, либо нет:

tcpdump -i "$INTERFACE" -vvv -n -XX -S -s0 -e 

Я получил кучу строк и этот вывод, когда я его остановил:

 601 packets captured 938 packets received by filter 230 packets dropped by kernel 

Почему разница? Где пропало 107 пакетов? И вообще возможно ли получить / захватить 100% пакетов в локальной сети – это только я за маршрутизатором?

Когда tcpdump «падает» пакеты, это потому, что у него недостаточно места для буфера, чтобы не отставать от пакетов, поступающих из сети.

Разница между захваченными и полученными пакетами может быть связана с реализацией ОС или tcpdump, или, чаще всего, из-за прерывания процесса с помощью ^ C.

Установка размера буфера для каждого пакета с помощью «s0» имеет значение для установки его как 64 КБ на man tcpdump ; как правило, я устанавливаю его как 1500, если вы используете -X, чтобы увидеть весь пакет, и если только использовать tcpdump для просмотра заголовков, даже меньше, чем это необходимо – 160 байт, размер которых составляет заголовки IPv4.

Обычно работа с экраном также медленнее, если вам нужна скорость, я бы направил вывод в файл, если вам не нужно смотреть его в реальном реальном времени.

От человека "tcpdump":

«Обратите внимание, что при больших снимках увеличивается время, затрачиваемое на обработку пакетов, и, фактически, уменьшается количество буферизации пакетов. Это может привести к потере пакетов. Необходимо ограничить привязку до наименьшего числа, которое будет захватывать информацию протокола вас интересует ».

Как было сказано в другом месте , и здесь tcpdump (по умолчанию с 4.0, libpcap с 1.0) имеет параметр -B NNNN для установки размера буфера (измерения в NNNN * 1024 байта). Это полезная альтернатива, если вы не хотите, чтобы snaplen был ниже.

Пример:

 tcpdump -I "${INTERFACE}" -B 4096 -nn -w capture.pcap 

Вы также можете рассмотреть возможность использования фильтра захвата pcap, если вы ищете пакеты определенного типа или известные атрибуты, и вам не интересно захватывать все.

Ответ Rui включает в себя еще один полезный момент: если вам не нужно видеть захват пакетов в реальном времени, вам лучше сделать вывод в файл, а не на терминал.