Использование 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