Использование tcpdump #
Утилита tcpdump — это мощная консольная утилита для перехвата и анализа сетевого трафика в режиме реального времени, доступная в Unix/Linux. Она позволяет системным администраторам отслеживать пакеты, диагностировать сетевые проблемы, фильтровать трафик по протоколам, хостам и портам, а также сохранять данные в pcap-файлы для последующего анализа в Wireshark
Вывод tcpdump #
22:12:48.803735 IP 192.168.100.100.10051 > 10.10.1.10.62105: Flags [S.], seq 4031420725, ack 3941937967, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
- 22:12:48.803735 - время: часы:минуты:секунды.микросекунды
- IP - протокол: IPv4
- 192.168.100.100.10051 - IP-адрес\порт отправителя
- > - направление относительно отправителя и получателя пакета, а
НЕстрелка направления трафика - 10.10.1.10.62105 - IP-адрес\порт получателя
- Flags [S.] - флаги TCP: S — SYN, . — ACK
- seq 4031420725 - номер последовательности (sequence number) пакета
- ack 3941937967 - номер подтверждения (acknowledgment number), т.е. следующий ожидаемый байт от отправителя первого SYN
- win 29200 - TCP window size — размер окна приёмника (сколько байт готов принять до подтверждения)
- options [mss 1460,nop,nop,sackOK,nop,wscale 7] - опции TCP:
mss 1460— TCP Maximum Segment Size, максимальный размер сегмента TCP (без учета заголовков)nop— No Operation, заполнитель для выравниванияsackOK— разрешение использования Selective Acknowledgment (SACK)wscale 7— TCP window scaling, умножение окна на 2^7 для увеличения пропускной способности - length 0 - размер полезной нагрузки в пакете TCP: 0 байт, это норм для SYN/ACK, пакеты без данных, только заголовки
✅ Итого: Это TCP SYN-ACK пакет от 192.168.100.100:10051 к 10.10.1.10:62105 в процессе установления соединения TCP. Он сообщает, что сервер получил SYN и готов к дальнейшему обмену (часть TCP-трёхстороннего рукопожатия).
⚠️ Важно: В tcpdump сначала указываются опции, а фильтр должен быть последним аргументом, и его нельзя смешивать с опциями. Например: tcpdump -nn -i any 'host 10.130.0.5 and icmp'
Установка tcpdump #
# Linux
apt install tcpdump
# Windows
https://www.microolap.ru/products/tcpdump-for-windows/
Опции tcpdump #
# По умолчанию, tcpdump слушает интерфейс, который идет в списке первым.
# Показать список сетевых интерфейсов
tcpdump -D
# Захват трафика с определенного интерфейса
tcpdump -i eth0
# Захват трафика со всех интерфейсов
# Показывает направление пакета In\Out и на каком интерфейсе он был зафиксирован
tcpdump -i any
# Отключение преобразования имен IP и имен портов
# tcpdump не будет делать DNS-запросы и смотреть в файл /etc/services
# Это ускоряет вывод и исключает лишний трафик.
tcpdump -nn
# Захват определенного количества пакетов
tcpdump -c 10
# Добавление даты в формате год:месяц:число
tcpdump -tttt
# Вывод больше информации о каждом пакете (verbose)
# -v — чтобы увидеть TTL (помогает понять, сколько хопов прошел пакет) и фрагментацию
# -vv — для отладки соединений (проверка контрольных сумм, детальный разбор TCP-опций)
# -vvv — для глубокого анализа протоколов прикладного уровня
tcpdump -v
# Максимальный размер захватываемого пакета
# По умолчанию tcpdump захватывает только первые 68 или 96 байт
# Чтобы захватить полный пакет, можно установить размер в 0
tcpdump -s 0
# Захватывать только исходящие пакеты из выбранного интерфейса
tcpdump -nn -i ipsec0 -Q out
# Захватывать только входящие пакеты на выбранный интерфейса
tcpdump -nn -i ipsec0 -Q in
Фильтры tcpdump (позволяют захватывать только необходимые пакеты) #
# Фильтрация по портам
tcpdump port 80
tcpdump src port 80
tcpdump dst port 80
# Фильтрация по диапазону портов
tcpdump portrange 22-443
tcpdump src portrange 22-443
tcpdump dst portrange 22-443
# Фильтрация по протоколам
tcpdump icmp
tcpdump arp
tcpdump tcp
tcpdump udp
tcpdump broadcast
tcpdump multicast
# Фильтрация по IP
tcpdump host 10.10.10.10
# Фильтрация по подсети
tcpdump net 10.10.10.0/24
# Фильтрация по адресу\подсети отправителя или получателя
tcpdump src host 10.10.10.10
tcpdump dst host 20.20.20.20
tcpdump src net 10.10.10.0/24
tcpdump dst net 20.20.20.0/24
# Фильтрация по MAC адресу
tcpdump ether host 00:0c:29:c7:00:3f
Комбинирование фильтров (операторы and, or, not) #
# Пакеты с интерфейса eth0 для определенного IP-адреса и для определенного порта
tcpdump -nn -v -i eth0 src host 10.10.10.10 and dst port 80
# Пакеты со всех доступных интерфейсов и только порты 80, 443
tcpdump -nn -v -i any port 80 or port 443
# Пакеты со всех доступных интерфейсов, кроме пакетов SSH (TCP\UDP\22)
tcpdump -nn -i any not port 22
# Пакеты со всех доступных интерфейсов, кроме пакетов SSH (TCP\UDP\22) и ICMP
tcpdump -nn -i any not port 22 and not icmp
# Только TCP пакеты с флагом SYN
tcpdump 'tcp[13] & 2!=0'
# Только TCP пакеты с флагом SYNACK
tcpdump 'tcp[13]=18'
# Только TCP пакеты с флагом ACK
tcpdump 'tcp[13] & 16!=0'
# Только запросы HTTP GET
tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
# Только запросы HTTP POST
tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354'
Сохранение дампа трафика в файл #
# Сохранить в файл results.pcap
tcpdump -w results.pcap
# Круговой лог (запись в несколько файлов по 50 МБ)
# Создаст 4 файла по 50 МБ и будет писать по кругу
# Идеально для длительного мониторинга в ожидании проблемы
tcpdump -W 4 -C 50 -w /tmp/results.pcap
# Прочитать файл results.pcap
tcpdump -r results.pcap
Просмотр содержимого пакета #
# Просмотр содержимого в формате ASCII
tcpdump -c 10 -nn -v -A port 80
# Просмотр содержимого в формате ASCII и HEX
tcpdump -c 10 -nn -v -X port 80
Топ команда для быстрой диагностики удаленного сервера #
tcpdump -nn -i any not port 22
tcpdump -nn -i any icmp