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