Перейти к основному содержимому

Использование tcpdump

·853 слов·5 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps, Expert CyberSecurity, Network/Infrastructure Engineer

Использование 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 1460TCP Maximum Segment Size, максимальный размер сегмента TCP (без учета заголовков) nopNo Operation, заполнитель для выравнивания sackOKразрешение использования Selective Acknowledgment (SACK) wscale 7TCP 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

Related

Тестирование скорости сети с помощью iperf
·225 слов·2 минут
Копирование файлов через SCP по SSH
·44 слов·1 минута
Как пользоваться cURL
·348 слов·2 минут