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 позволяет нам комбинировтаь опции. Есть три спсоба создания комбинаций.
AND - and или &&
OR - or или ||
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'
Данная статья есть вольный перевод материала взятого тута и не претендует на первоисточник или оригинальность содержимого.