tcpdump — это одна из самых старых и надежных утилит для анализа сетевого трафика в Unix-подобных системах. Она позволяет просматривать сетевые пакеты, проходящие через интерфейсы машины, в реальном времени или сохранять их для последующего анализа. Это инструмент, которым пользуются системные администраторы, специалисты по безопасности и сетевые инженеры уже десятилетиями. Его основное преимущество — простота, стабильность и возможность работать даже в минимальных системах без графического интерфейса.
Синтаксис:tcpdump [опции] [выражение фильтра]
— Опции управляют поведением утилиты: каким образом отображать данные, сколько пакетов захватывать и т.д.
— Фильтр задаёт, какие именно пакеты нужно перехватывать (по IP-адресу, порту, протоколу и т.п.)
Основные опции:
| Опции | Описание |
|---|---|
| -i <интерфейс> | указание сетевого интерфейса (например, eth0, wlan0) |
| -n | не разрешать IP-адреса в доменные имена (ускоряет работу) |
| -nn | не разрешать ни IP, ни номера портов (показывает «как есть») |
-v, -vv, -vvv | уровень подробности вывода |
| -c <кол-во> | захватить только указанное число пакетов |
| -w <файл> | Сохраняет захваченные пакеты в файл для последующего анализа (например, с Wireshark) |
| -r <файл> | Читать пакеты из файла (например, ранее сохранённого через -w) |
Фильтры
| Значение | Описание |
|---|---|
| port <номер> | Фильтр по порту |
| host <IP/домен> | Фильтр по IP-адресу или домену |
| src <IP> / dst <IP> | Фильтр по исходному или целевому IP |
tcp, udp, icmp | Фильтрация по протоколу |
| net <сеть> | Фильтрация по сети, например 192.168.0.0/24 |
and, or, not | Логические операторы для составных фильтров |
Вывод tcpdump
Пример строки:15:32:10.123456 IP 192.168.1.5.54321 > 10.0.0.5.22: Flags [S], seq 123456789, win 65535, length 0
Разбор по частям:
| 15:32:10.123456 | Время получения пакета (часы:минуты:секунды.микросекунды) |
| IP | Протокол уровня 3 — здесь IPv4 (бывает ещё ARP, ICMP, IP6) |
| 192.168.1.5.54321 | Источник: IP + порт |
| > | Направление — «откуда → куда» |
| 10.0.0.5.22 | Назначение: IP + порт (22 = SSH) |
| Flags [S] | TCP-флаги: тут SYN — начало соединения |
| seq 123456789 | Порядковый номер первого байта (TCP sequence number) |
| win 65535 | Размер TCP-окна (window size) — влияет на производительность |
| length 0 | Длина полезной нагрузки в байтах (0 — только заголовок) |
Основные TCP-флаги (Flags):
| Флаг | Обозначение | Описание |
|---|---|---|
| S | SYN | Запрос на установку соединения |
| S. | SYN-ACK | Ответ на SYN |
| . | ACK | Подтверждение |
| P | PUSH | Данные нужно немедленно передать (например, HTTP) |
| F | FIN | Завершение соединения |
| R | RST | Обрыв соединения (reset) |
Пример установки соединения:IP 192.168.1.5.54321 > 10.0.0.5.22: Flags [S], …
IP 10.0.0.5.22 > 192.168.1.5.54321: Flags [S.], …
IP 192.168.1.5.54321 > 10.0.0.5.22: Flags [.], …
Первая строка: клиент стучится (SYN)
Вторая: сервер отвечает (SYN-ACK)
Третья: клиент подтверждает (ACK)
Пример отказа (порт закрыт):IP 192.168.1.5.54321 > 10.0.0.5.22: Flags [S], …
Нет ответа — значит либо фильтр (фаерволл), либо сервер недоступен.