Назад | Перейти на главную страницу

tcpdump Как использовать его для захвата всех заголовков трафика

Я новичок в tcpdump. Никогда не пользовался, кроме очень тривиальных задач.

Недавно меня попросили выполнить следующую работу.

Что у меня: сервер с сетевым интерфейсом, подключенный к свитчу. Весь трафик на этом коммутаторе будет зеркалироваться на этот сервер. Что мне нужно: сохранить весь этот трафик в файл формата PCAP. Файл должен включать

  1. Интересует только исходящий или входящий трафик. Трафик, который проходит только внутри подсети, не нужен и по возможности не должен регистрироваться.
  2. Весь многоадресный и широковещательный трафик не интересует, и его следует по возможности игнорировать.
  3. Все, что мне нужно, это Ethernet -> IPv4 -> TCP, UDP и ICMP. Других это не интересует, и им следует по возможности пренебречь
  4. Мне не нужно тело сообщения. Заголовков (Ethernet, IP и TCP / UDP / ICMP) достаточно. Так что тело не следует регистрировать по возможности

Трафик будет ~ 100 МБ / с в дневное время, и для моей работы потеря пакетов недопустима (она должна быть непрерывный в течение 24 часов).
В любом случае, как сказано выше, мне не все нужно.

Вопрос:

  1. Как я могу работать?
  2. О чем нужно позаботиться, чтобы все данные собирались плавно, без потерь (почти).

Спасибо.

Лучше всего было бы использовать что-то вроде:

 tcpdump -ieth0 -s96 -w traffic.dump 'ip or icmp or tcp or udp'

«Сложной» частью будет выбор правильного значения для параметра «-s» (snaplen) (snaplen - максимальная длина пакета, который tcpdump захватит).

На страницах руководства tcpdump:

Snarf snaplen байтов данных из каждого пакета, а не 68 по умолчанию (с NIT минимум 96). 68 байт достаточно для IP, ICMP, TCP и UDP, но могут усекать информацию протокола от сервера имен и пакетов NFS (см. Ниже). Пакеты, усеченные из-за ограниченного моментального снимка, указываются в выходных данных с помощью «[| proto]», где proto - это имя уровня протокола, на котором произошло усечение. Обратите внимание, что создание снимков большего размера увеличивает время, необходимое для обработки пакетов, и, по сути, уменьшает объем буферизации пакетов. Это может привести к потере пакетов. Вы должны ограничить snaplen наименьшим числом, которое будет захватывать интересующую вас информацию о протоколе.

В этом примере я использую 96, чтобы быть «почти» уверенным, что я смогу захватить 100% значений заголовка ethernet + ip + (icmp || udp || tcp).

Если ваш трафик имеет параметры IP или TCP (то есть временные метки), и вы хотите также захватить эту информацию, вам придется поиграть с параметром snaplen (т.е. увеличить / уменьшить его).

Если длина заголовков вашего пакета меньше, чем у snaplen, вы также можете захватить часть полезной нагрузки.

Наконец, чтобы прочитать захваченный трафик, я бы использовал что-то вроде:

tcpdump -e -nn -vv -r traffic.dump   

Где важный Часть состоит в том, чтобы использовать опцию «-e», чтобы вы могли распечатать заголовки Ethernet.

это Страница дает вам представление о размере заголовков ethernet / tcp / udp при различных обстоятельствах и может помочь вам найти «правильное» значение для параметра snaplen.