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

Содержание

Введение

tcpdump — это утилита в Linux, которая позволяет перехватывать и анализировать сетевой трафик.

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

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

Установка

Для установки tcpdump используются следующие команды в зависимости от дистрибутива Linux:

  • на основе Debian:

    apt install tcpdump
    
  • на основе RPM:

    yum install tcpdump
    

Формат вывода

После запуска tcpdump утилита начнет перехватывать сетевой трафик и выводить информацию о пакетах на экран. Каждая строка в выводе соответствует одному пакету. Рассмотрим одну строку в качестве примера:

20:58:26.765637 IP 10.0.0.50.80 > 10.0.0.1.53181: Flags [F.], seq 1, ack 2, win 453, options [nop,nop,TS val 3822939 ecr 249100129], length 0

Каждая строка включает:

  • метку времени Unix: 20:58:26.765637;
  • протокол: IP;
  • имя и порт отправителя: 10.0.0.50.80;
  • имя и порт получателя: 10.0.0.1.53181;
  • TCP-флаги: Flags [F.];
  • порядковый номер: seq 1;
  • номер подтверждения: ack 2;
  • размер окна в байтах: win 453;
  • TCP-опции: options [nop,nop,TS val 3822939 ecr 249100129];
  • длину полезной нагрузки: length 0.

TCP-флаги имеют следующий формат:

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

Опции

Полезные опции tcpdump:

  • -v, -vv, -vvv — выводить больше информации, в т. ч. содержимое пакетов;
  • -x — выводить содержимое пакетов в формате HEX;
  • -X — выводить содержимое пакетов в форматах HEX и ASCII;
  • -tttt — выводить временную метку в формате YYYY-MM-DD hh:mm:ss;
  • -c N — перехватить N пакетов, после чего прекратить перехват пакетов;
  • -D — вывести список доступных сетевых интерфейсов;
  • -i eth0 — перехватывать пакеты, проходящие через интерфейс eth0;
  • -q — выводить меньше информации;
  • -n — отключить преобразование IP-адресов в имена;
  • -e — выводить данные канального уровня (MAC-адрес, протокол, длина пакета);
  • -r — считать пакеты с файла;
  • -w — записать пакеты в файл.

Со всеми опциями tcpdump можно ознакомиться в официальном руководстве.

Фильтры

Фильтр портов

Просмотр пакетов, поступающих на порт 80:

tcpdump dst port 80

Также можно использовать псевдонимы, например, http или https:

tcpdump dst port http

Просмотр пакетов, поступающих на порты 80-433:

tcpdump dst portrange 80-443

Фильтр хостов

Просмотр пакетов, поступающих с хоста 10.0.0.1:

tcpdump src host 10.0.0.1

Фильтр подсетей

Просмотр пакетов, поступающих из подсети 10.0.0.0/24:

tcpdump net 10.0.0.0/24

Фильтр протоколов

Просмотр ICMP-пакетов:

tcpdump icmp

Просмотр IPv6-пакетов:

tcpdump ip6

Просмотр UDP-пакетов:

tcpdump udp
Замечание

Если вы хотите просмотреть пакеты протокола прикладного уровня, то вам следует использовать фильтрацию по портам.

Фильтр по HTTP полям

Просмотр пакетов с заголовком User-Agent:

tcpdump -vv port http | grep 'User-Agent:'

Просмотр пакетов с GET-запросами:

tcpdump -vv port http | grep 'GET /'

Комбинирование фильтров

Фильтры можно комбинировать с помощью операторов and/&&, or/|| и not/!. Расставлять приоритет операций можно с помощью скобочек ( и ). Рассмотрим примеры:

  • выводить HTTP и HTTPS пакеты от 10.0.0.1:

    tcpdump 'src 10.0.0.1 and (dst port 80 or 443)'
    
  • не выводить SSH пакеты:

    tcpdump port not ssh
    

Источники