Про tcpdump

Tcpdump — утилита для анализа и перехвата сетевого трафика. Используется для диагностики сетевых проблем. Можно увидеть какими пакетами обмениваются устройства, какие порты используются,

Официальный сайт проекта: https://www.tcpdump.org/

Как выглядит вывод команды?

Один перехваченный пакет — одна строка в выводе.

12:54:21.590381 IP 10.20.3.215 > 10.100.1.50: ICMP echo request, id 27945, seq 1, length 64

В строках может содержаться информация:

  • Метка времени
  • Протокол
  • IP адрес или имя источника
  • Исходящий порт
  • IP адрес или имя назначения
  • Порт назначения
  • Флаги
  • Порядковый номер пакета
  • Номер подтверждения
  • Размер окна в байтах
  • Длина полезной нагрузки

Завершение работы утилиты — Ctrl+C

Вверх

Флаги TCP

Может быть более одного значения в одном пакете.

  • S – SYN
  • F – FIN
  • . – ACK
  • P – PUSH
  • R – RST

tcpdump ‘tcp[tcpflags] == tcp-rst’

Запуск утилиты:

Запускаем с правами root

Вверх

Опции запуска

tcpdump -D – вывод всех доступных для захвата трафика сетевых интерфейсов

tcpdump –list-interfaces – оно же.

Для фильтрации вывода используется язык BPF.

Например

sudo tcpdump port 53.

Здесь port 53 – это BPF фильтр.

Другие BPF – фильтры:

  • port
  • portrange
  • net
  • mask
  • host
  • src
  • dst
  • tcp
  • udp
  • icmp
  • greater
  • ip6
  • less
  • <=

для комбинирования фильтров можно использовать логические операторы

  • and
  • or
  • not

Например

tcpdump -A greater 1000 and \(src host amazon.com or src host tcpdump.com\)

Скобки здесь нужны чтобы размер пакета учитывался для обоих источников. «\» — потому что это shell-команда.  

tcpdump -A greater 1000 and \(src host amazon.com or tcpdump.com\) – тоже работает. Исключили повторяющиеся идентификаторы.

tcpdump `greater 1000 and (src host amazon.com or tcpdump.com)` — тоже работает

Для просмотра файла дампа в Wireshark нужно сохранить вывод в файл с расширением .pcap и открыть его в wireshark.

Как передать вывод tcpdump в wireshark:

ssh <remote.ip> tcpdump -pni any -w — -s0 -U port dest_port | wireshark -k -i – для трансляции вывода из tcpdump в wireshark.

Запись в файл: sudo tcpdump host host_ip -w filename -c 10000 (записывает только 10000 пакетов)

-i – для фильтра по интерфейсу. Рекомендуется указывать интерфейс или писать -i any, т.к. по дефолту интерфейс может быть неподходящий.

-w – для записи в файл

-c – количество пакетов

-A – полный вывод содержимого пакетов в формате ASCII (-X – для вывода в HEX-формате). -x – вывод в hex-режиме первых 82 байт пакета. Для вывода ethernet-заголовка используется -xx (добавит 14 байт).

(можно использовать ngrep)

-n – запрет трансляции ip адресов в имена (по умолчанию транслируется).

В случае большого количества улавливаемых пакетов, постоянные DNS-запросы замедляют и даже могут приостановить работу tcpdump, также эту опцию нужно использовать при отсутствии связи с DNS-сервером или при его некорректной работе.

-e – информация L2 . Например MAC-адреса

-P  — показывает только пакеты, которые приходят или отправляются с данного IP.

Флаги -v, -vv и -vvv влияют на подробность вывода.

-t – исключить timestamp

-tt – timestamp – количество секунд, отсчитываемое от 1.01.1970

-ttt – разница между этой строкой и предыдущей.

-tttt – удобный вывод времени

-r – прочитать записанный дамп

-s – размер захватываемого пакета. По дефолту, когда дамп сохраняется в файл, сохраняется только 68 байт данных каждого пакета. -s 0 – говорит сохранять пакет целиком.

Примеры

tcpdump src net 10.208.148.0 mask 255.255.255.0

tcpdump src net 10.208.148.0/24

tcpdump -ni eth1 greater 1000 – захватывает пакеты размером более 1000 байт

См. также https://packetlife.net/media/library/12/tcpdump.pdf

Список литературы

Вверх