TCPDUMP в примерах.

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

Начнём с основ.

Захватим HTTPS трафик:

tcpdump -nnSX port 443

Так мы увидим некий HTTPS трафик в шестнадцатеричном представлении, естественно он зашифрован. Таким образом можно ловить информацию с любого порта.

Ловим всё на конкретном интерфейсе

tcpdump -i eth0

Ловим трафик прилетающий на или от конкретного IP:

tcpdump host 10.10.10.10

Фильтруем трафик с указанием адреса источника или назначения:

tcpdump src 10.10.10.10
tcpdump dst 10.0.0.10

Ловим пакеты идущие из или в подсеть:

tcpdump net 10.20.30.0/24

Ловим пакеты в шестнадцатеричном формате:

Возьмём 1 пакет icmp в HEX

tcpdump -c 1 -X icmp

Трафик на порту:

tcpdump port 3389

Порт можно указать источником:
tcpdump src port 1025

Трафик отфильтрованный по протоколу:

tcpdump icmp

Только IP6 трафик:

tcpdump ip6

Ловим трафик на диапазоне портов:

tcpdump portrange 22-100

Ловим трафик основываясь на размере пакета:

Можно искать пакеты определенного размера, можно использовать математические операнды — больше, меньше и т.д.

tcpdump less 32
tcpdump greater 64
tcpdump <= 128

Запись\чтение вывода в файл:

Пишем в файл

tcpdump port 80 -w capture_file

Читаем из файла

tcpdump -r capture_file

Продвинутые опции:

  • -X : Показывать содержимое пакетов в HEX и ASCII
  • -XX : То же что и -X, но так же показывает ethernet заголовки.
  • -D : Показать список доступных интерфейсов.
  • -I : Линейное представление вывода.
  • -q : Быть менее информативным (меньше информации) в выводе.
  • -t : Выдаст штамп времени в человекопонятном виде.
  • -tttt : Максимально понятное представление времени.
  • -i eth0: Слушаем интерфейс eth0.
  • -vv : Подробный вывод (больше v — большая подробность).
  • -с : Взять x пакетов и остановится.
  • -s : Определить длину (размер) захвата в байтах. Можно использовать -s0 что бы захватывать всё.
  • -S : Вывести абсолютный номер очереди.
  • -e : Так же получать ethernet заголовки.
  • -q : Показывать меньше информации протокола.
  • -E : Расшифровать IPSEC трафик, предоставив ключ шифрования.

Комбинации:

Все описанные опции можно делать по отдельности, но tcpdump позволяет нам комбинировтаь опции. Есть три спсоба создания комбинаций.

  1. AND - and или &&
  2. OR - or или ||
  3. EXCEPT - not или !

Примеры выводов:

Используя эту комбинацию, что бы увидеть подробный вывод без разрешения имен хостов или номеров портов, с использованием абсолютных порядков номеров и отображением удобочитаемых временных меток:

tcpdump -ttnnvvS

Из определенного IP и направляющейся в конкретный порт:

tcpdump -nnvvS src 10.15.12.13 and dst port 3389

Из одной подсети в несколько подсетей:

Посмотрим весь трафик приходящий из 192.168.х.х и следующий в 10.х или 172.16.х.х сети, мы посмотрим HEX формат вывода без разрешения имён и одним уровнем детализации.

tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Посмотрим весь трафик на 192.168.0.2 без ICMP пакетов.

tcpdump dst 192.168.0.2 and src net and not icmp

Весь трафик от хоста исключая 22 порт.

tcpdump -vv src mars and not dst port 22

При построении сложных запросов может потребоваться сгруппировать варианты, используя одинарные кавычки. Одиночные кавычки используются, чтобы указать tcpdump игнорировать определенные специальные символы — в данном случае под скобками «()». Этот же метод можно использовать для группировки с использованием других выражений, таких как host, port, net и т. д.

tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

Изолировать TCP флаги.

Изолировать TCP RST флаги:

tcpdump 'tcp[13] & 4!=0'
tcpdump 'tcp[tcpflags] == tcp-rst'

Изолировать TCP SYN флаги:

tcpdump 'tcp[13] & 2!=0'
tcpdump 'tcp[tcpflags] == tcp-syn'

Изолируйте пакеты, для которых установлены флаги SYN и ACK:

tcpdump 'tcp[13]=18'

Изолировать TCP URG флаги:

tcpdump 'tcp[13] & 32!=0'
tcpdump 'tcp[tcpflags] == tcp-urg'

Изолировать TCP ACK флаги:

tcpdump 'tcp[13] & 16!=0'
tcpdump 'tcp[tcpflags] == tcp-ack'

Изолировать TCP PSH флаги:

tcpdump 'tcp[13] & 8!=0'
tcpdump 'tcp[tcpflags] == tcp-push'

Изолировать TCP FIN флаги:

tcpdump 'tcp[13] & 1!=0'
tcpdump 'tcp[tcpflags] == tcp-fin'

Рецепты на каждый день.

SYN and RST Set

tcpdump 'tcp[13] = 6'

HTTP User Agents

tcpdump -vvAls0 | grep 'User-Agent:'

Cleartext GET Requests

tcpdump -vvAls0 | grep 'GET'

HTTP Host Headers

tcpdump -vvAls0 | grep 'Host:'

HTTP Cookies

tcpdump -vvAls0 | grep 'Set-Cookie|Host:|Cookie:'

SSH соединения

tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'

Найти DNS трафик

tcpdump -vvAs0 port 53

Найти FTP трафик

tcpdump -vvAs0 port ftp or ftp-data

Найти NTP трафик

tcpdump -vvAs0 port 123

Ищем пароли передаваемые в не зашифрованном виде:

tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '

В заголовке IP есть бит, который никогда не устанавливается легитимными приложениями, и мы называем его «Evil BIT». Вот забавный фильтр, чтобы найти пакеты, в которых он был переключен.

EVIL BIT

tcpdump 'ip[6] & 128 != 0'

Данная статья есть вольный перевод материала взятого тута и не претендует на первоисточник или оригинальность содержимого.

Wiki ссылка.

Оставьте комментарий