Олег Букатчук

Утилита tcpdump

Авг
29

tcpdump (от TCP и англ. dump — свалка, сбрасывать) — утилита UNIX, позволяющая перехватывать и анализировать сетевой трафик, проходящий через хост, на котором она запущена.

Основные назначения tcpdump

  • Отладка сетевых приложений.
  • Отладка сети и сетевой конфигурации в целом.

Установка tcpdump

Чтобы, установить tcpdump на Debian/Ubuntu нужно выполнить команду.

$ sudo apt-get install tcpdump

Описание tcp-заголовков

Значение Флаг Описание
SYN S Флаг, который используется при запросе на соединение.
ACK . Используется при подтверждении пришедшего пакета.
FIN F Флаг устанавливается при нормальном закрытии соединения.
URGENT U Этот флаг нужен при передаче экстренных данных — например, при посылке Ctrl+C в telnet-соединении.
PUSH P Как правило, данный флаг устанавливается при передаче пользовательских данных.
RESET R Немедленный разрыв соединения.
Заполнитель none В случае, если в пакете отсутствует какой-либо флаг используется данный заполнитель.

Ключи утилиты tcpdump

Ключ Описание
-a Преобразовывает сетевые и широковещательные адреса в доменные имена.
-e Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров.
-F file Использовать фильтр, находящийся в файле. Если вы используете этот параметр, фильтр из командной строки будет игнорироваться.
-i Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию — eth0, для выбора всех интерфейсов — any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo.
-l Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:

tcpdump -l | tee out.log
-N Не добавляет доменное расширение к именам узлов. Например, tcpdump отобразит ‘net’ вместо ‘net.library.org’
-n Отображает IP-адрес вместо имени хоста.
-nn Отображает номер порта вместо используемого им протокола.
-p Не переводит интерфейс в режим приема всех пакетов (promiscuous mode).
-q Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных.
-r Этот параметр позволяет tcpdump прочесть трафик из файла, если он был предварительно сохранен параметром -w.
-S Позволяет не обрабатывать абсолютные порядковые номера (initial sequence number — ISN) в относительные.
-s 1024 Количество байтов пакета, которые будет обрабатывать tcpdump. При установке большого числа отображаемых байтов информация может не уместиться на экране и её будет трудно изучать. В зависимости от того, какие цели вы преследуете, и следует выбирать значение этого параметра. По умолчанию tcpdump захватывает первые 68 байт (для SunOS минимум 96 байт), однако если вы хотите увидеть содержимое всего пакета, используйте значение в 1514 байт (максимально допустимый размер кадра в сети Ethernet).
-t Не отображает метку времени в каждой строке.
-T type Интерпретация пакетов заданного типа. Поддерживаются типы aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb.
-tt Отображает неформатированную метку времени в каждой строке.
-tttt Показывает время вместе с датой.
-v Вывод подробной информации (TTL; ID; общая длина заголовка, а также его параметры; производит проверку контрольных сумм IP и ICMP-заголовков)
-vv Вывод ещё более полной информации, в основном касается NFS и SMB.
-vvv Вывод максимально подробной информации.
-w file Сохраняет данные tcpdump в двоичном формате. Преимущества использования данного способа по сравнению с обычным перенаправлением в файл является высокая скорость записи и возможность чтения подобных данных другими программами, например snort, но этот файл нельзя прочитать человеку. Возможен вывод двоичных данных на консоль, для этого необходимо использовать -w —
-x Делает распечатку пакета в шестнадцатеричной системе, полезно для более детального анализа пакета. Количество отображаемых данных зависит от параметра -s
-xx Тоже, что и предыдущий параметр -x, но включает в себя заголовок канального уровня
-X Выводит пакет в ASCII- и hex-формате. Полезно в случае анализа инцидента связанного со взломом, так как позволяет просмотреть какая текстовая информация передавалась во время соединения.
-XX Тоже, что и предыдущий параметр -X, но включает заголовок канального уровня.
-с count tcpdump завершит работу после получения указанного числа пакетов.
-U Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится.

Примеры использования tcpdump

Если нужно узнать какими пакетами обменивается 2 сервера (например server_1 и server_2), то для этого служит команда.

$ sudo tcpdump host server_1 and server_2

Если нужно отслеживать только исходящие пакеты из хоста, то выполните.

$ sudo tcpdump src host server

Если нужно отслеживать только входящие пакеты из хоста, то выполните.

$ sudo tcpdump dst host server

Просмотреть список интерфейсов, по которым tcpdumt можете слушать.

$ sudo tcpdump -D

Слушать интерфейс eth0.

$ sudo tcpdump -i eth0

Слушать на любом доступном интерфейсе (Требуется ядро Linux версии 2.2 или выше).

$ sudo tcpdump -i any

Вывод всего на экран (все, что выполняется программой).

$ sudo tcpdump -v

Вывод много чего на экран (все что выполняется программой).

$ sudo tcpdump -vv

Вывод очень много всего на экран (все что выполняется программой).

$ sudo tcpdump -vvv

Выводить не сильно много информации, когда идет захват пакетов (не как стандартный).

$ sudo tcpdump -q

Ограничить захват пакетов до 100.

$ sudo tcpdump -c 100

Записать все данные (перехваченные пакеты) в файл с именем file_name.

$ sudo tcpdump -w file_name

Записать все данные (перехваченные пакеты) в файл с именем file_name и вывести на экран в режиме реального времени.

$ sudo tcpdump -v -w file_name

Вывод пакетов с файла file_name.

$ sudo tcpdump -r file_name

Вывод пакетов с файла file_name используя максимально много информации.

$ sudo tcpdump -vvv -r file_name

Вывод IP и порты вместо доменов идет захват пакетов.

$ sudo tcpdump -n

Захват любых пакетов, где хост назначения — 192.168.1.1.

$ sudo tcpdump -n dst host 192.168.1.1

Захват любых пакетов c хоста 192.168.1.1.

$ sudo tcpdump -n src host 192.168.1.1

Захват любых пакетов c хоста 192.168.1.1.

$ sudo tcpdump -n host 192.168.1.1

Захват пакетов, где сеть 192.168.1.0/24.

$ sudo tcpdump -n dst net 192.168.1.0/24

Захват пакетов с сети 192.168.1.0/24.

$ sudo tcpdump -n src net 192.168.1.0/24

Захват пакетов с сети 192.168.1.0/24.

$ sudo tcpdump -n net 192.168.1.0/24

Захват пакетов с порта 23.

$ sudo tcpdump -n dst port 23

Захват пакетов с портов с 1 по 1023.

$ sudo tcpdump -n dst portrange 1-1023

Захватывать только TCP пакеты, где destination на портах c 1 по 1023.

$ sudo tcpdump -n tcp dst portrange 1-1023

Захватывать только UDP пакеты, где destination на портах с 1 по 1023.

$ sudo tcpdump -n udp dst portrange 1-1023

Захват пакетов с destination, где ip 192.168.1.1, порт 23.

$ sudo tcpdump -n "dst host 192.168.1.1 and dst port 23"

Захват пакетов с destination, где ip 192.168.1.1 и destination по портам 80 или 443.

$ sudo tcpdump -n "dst host 192.168.1.1 and (dst port 80 or dst port 443)"

Захват любых ICMP пакетов.

$ sudo tcpdump -v icmp

Захват любых ARP пакетов.

$ sudo tcpdump -v arp

Захват любых ICMP или ARP пакетов.

$ sudo tcpdump -v "icmp or arp"

Захват любых пакетов, которые broadcast или multicast.

$ sudo tcpdump -n "broadcast or multicast"

Захват больших пакетов (500 байт), а не стандартных 68б.

$ sudo tcpdump -s 500

Захват всех байт данных в пакете.

$ sudo tcpdump -s 0

Просмотр «тяжелых пакетов»

$ sudo tcpdump -nnvvXSs 1514

Захват пакетов ICMP с ping.

$ sudo tcpdump -nnvXSs 0 -c2 icmp

Вывод без многих вариантов:

$ sudo tcpdump -nS

Основные коммуникации (очень подробный режим), можно увидеть хороший объем трафика, с многословием.

$ sudo tcpdump -nnvvS

Глубокий взгляд на трафик, добавляет -X для полезной нагрузки.

$ sudo tcpdump -nnvvXS

Просмотр тяжелого пакета и увеличивает snaplength, захватывая весь пакет.

$ sudo tcpdump -nnvvXSs 1514

Вы можете также фильтровать на основе определенных частей пакета, а также объединить несколько условий в группы. Это полезно при поиске только SYNs или РСТ, например, для еще более расширенного изоляцией трафика.
Показать все URGENT (URG) пакеты.

$ sudo tcpdump 'tcp[13] & 32!=0'

Показать все ACKNOWLEDGE (ACK) пакеты.

$ sudo tcpdump 'tcp[13] & 16!=0'

Показать все PUSH (PSH) пакеты.

$ sudo tcpdump 'tcp[13] & 8!=0'

Показать все RESET (RST) пакеты.

$ sudo tcpdump 'tcp[13] & 4!=0'

Показать все SYNCHRONIZE (SYN) пакеты.

$ sudo tcpdump 'tcp[13] & 2!=0'

Показать все FINISH (FIN) пакеты.

$ sudo tcpdump 'tcp[13] & 1!=0'

Показать все SYNCHRONIZE/ACKNOWLEDGE (SYNACK) пакеты.

$ sudo tcpdump 'tcp[13]=18'

Захват TCP Flags используя tcpflags.

$ sudo tcpdump 'tcp[tcpflags] & & tcp-syn != 0'

Пакеты с RST и SYN флагами (проверка).

$ sudo tcpdump 'tcp[13] = 6'

Траффик с ‘Evil Bit'(проверка).

$ sudo tcpdump 'ip[6] & 128 != 0'