Tcpdump
Общее
Выводит заголовки пакетов походящих через сетевой интерфейс, которые совпадают с указанным выражением
Может сохранять резы в файл (-w) или читать из файла (-r), можно задать нужное кол-во (-c)
В конце работы пишет статистику полученных («received by filter») и отброшенных ядром (по разным причинам, «dropped by kernel»)
Некоторые ключи
-C file_size - При записи в файл, определяет мах размер, при достижении файл ротируется, указывается в миллионах байт (1,000,000)
-F file - Файл для ввода фильтрующего выражения, выражение в командной строке игнорируется
-i interface - Интерфейс для сбора, по умолчанию первый в списке, кроме loop
-n (-nn) - Выкл резолв IP
DNS (порт и протокол)
-p - Не переводить интерфейс в смешанный режим («promiscuous»)
-t (-tt, -ttt, -tttt) - Не выводить stamp в каждой строке (выводить не форматированный, выводить разницу в микросекундах, выводить stamp вместе с датой по умолчанию)
-v (-vv, -vvv) - Более подробный вывод
-w (-r) - Писать в файл (читать из файла)
-x (-X) - Писать каждый пакет (без заголовков уровня соединения) в шестнадцаричном виде (помиио шестнадцаричного выводить их
ASCII-значения)
-D - Интерфейсы, доступные для захвата
-X (-A) - Содержимое пакета, шестнадцаричная (
ASCII) форма
Фильтрующие выражения
Без него выводятся все пакеты идущие через интерфейс, выражение состоит из одного или более примитивов
Примитивы и классификаторы
Примитив состоит из ID (имя или номер) следующего за одним или более классификаторами
Три вида классификаторов:
type - К какому виду относить ID. Возможные значения: host, net, port. Если не указан то подразумевается host. (Прим: 'host foo', 'net 128.3', 'port 20')
dir - Направление передачи, 'к' и/или 'от' ID. Возм значения: src, dst, src or dst and src and dst. (Прим: 'src foo', 'dst net 128.3', 'src or dst port 22'). По умолчению 'src or dst'
proto - Ограничивает совпадение конкретным протоколом. Возм значения: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp, udp. (Прим: 'ether src foo', 'arp net 128.3', 'tcp port 21'). По умолчанию все перечисленные типы протоколов
Еще есть несколько спец примитивов - ключевых слов gateway, broadcast, less, greater и арифметич выражения
Примитивы могут объединяться операторами and, or и not. Прим:
host foo and not port ftp and not port ftp-data
Некоторые примитивы (не все):
dst (src) host <host> - назначение/источник пакета
host <host> - источник или назначение
net <net> mask <netmask> - истина если IP адрес входит в сеть с указанной сетевой маской
net <net/len> - истина если IP входит в сеть с указанной сетевой маской, с заданным кол-вом бит
dst (src) port <port> - порт в назначении/источнике (tcp src port port)
port - так же, или назначение или источник (tcp (udp) port port)
portrange - диапазон портов (tcpdump portrange 6000-6500)
less length - истина если пакет имеет длинну меньше или равную указанной (эквивалент len ⇐ lenth)
greater length - больше или равно
ip proto <protocol> - фильтрация по протоколу, из числа: icmp,icmp6,igmp,igrp,pim,ah,esp,vrrp,udp,tcp. Идентификаторы tcp,udp и icmp - ключевые слова, надо экранировать слешем (\)
Примеры
# Ловим весь входящий трафик из локальной сети на сервер
tcpdump -i eth0 -n -nn -ttt dst host 192.168.2.254
# Ловим весь входящий трафик исключая генерируемый нашей ssh сессией
tcpdump -i eth0 -n -nn -ttt 'dst host 192.168.2.254 and not (src host 192.168.2.100 and dst port 22)'
# Информация об DNS-общении между сервером и каким-нибудь узлом сети
tcpdump -i eth0 -n -nn -ttt 'host 192.168.2.13 and port 53'
# Отлавливаем исключительно icmp пакеты
tcpdump -i eth0 -n -nn -ttt 'ip proto \icmp'
# Конкретные протоколы
tcpdump -i eth0 icmp
tcpdump -i eth0 udp
tcpdump -i eth0 tcp and port 443
Формат пакета
В общем виде информация о пакете выглядит следующим образом:
[Timestamp] [Protocol] [Src IP].[Src Port] > [Dst IP].[Dst Port]: [Flags], [Seq], [Ack], [Win Size], [Options], [Data Length]
Timestamp -
Protocol - протокол сетевого уровня
Src(Dst) IP. Src(Dst) Port - IP адрес и порт источника (назначения)
Flags - TCP флаги
[.] - ACK (Acknowledgment) (подтверждение)
[S] - SYN (Start Connection)
[P] - PSH (Push Data)
[F] - FIN (Finish Connection)
[R] - RST (Reset Connection)
[S.] - SYN-ACK (SynAck Packet)
Seq - порядковый номер данных, содержащихся в пакете. Для первого захваченного пакета это абсолютное число, последующие используют относительное число. Прим: 196:568 означает что пакет содержит байты с 196 по 568 этого потока
Ack - номер подтверждения, например Ack 1 у отправляющей стороны, для принимающей стороны будет следующий ожидаемый байт (568 из примера выше)
Win size - размер окна, кол-во байт, доступных в приемном буфере
Options - далее такие параметры TCP как например MSS (Maximum Segment Size, максимальный размер сегмента) или масштаб окна, nop - заполнение, например для того чтобы добить заголовок до 4 байт, TS val - временная метка TCP, ecr - означает эхо-ответ
Data Length - длинна в байтах полезной нагрузки. Разница между первым и последним байтами порядкового номера
Wireshark
Анализ сетевого трафика.
Обычно пакеты, не предназначенные ПК, фильтруются сетевой картой и не доходят до уровня приложений, для перехвата всех доступных пакетов, необходимо сетевую карту перевести в «неразборчивый режим».
Linux провод:
# ifconfig eth0 promisc - после чего, в выводе команды netstat -i, на против адаптера будет флаг BMPRU, буква P и означает активацию режима.
Linux wifi:
# ifconfig wlan0 down && iwconfig wlan0 mode monitor && ifconfig wlan0 up
tshark - консоль
apt install tshark - установка.
Для использования программы не привилегированными пользователями, нужно добавить его в группу wireshark.
Запуск tshark без аргументов, запустит полный сбор всего что есть, с выводом результатов на экран.
-D - список доступных интерфейсов
-i - нужный интерфейс (можно номер)
-a - условие для остановки захвата
-b - кольцевое сохранение, к имени файла (-w) добавляется метка, аргументы как и у -a
-d - протокол декодирования
-f - выражение фильтра захвата
-Y - фильтры отображения (ip.addr==1.1.1.1)
-n (-N) - отключить разрешение dns (разрешить только определенным)
-q - не выводить счетчик захваченных пакетов
-w - файл для сохранения
-r - просмотр указанного файла
Фильтры захвата
Используется аргумент -f, затем выражение в кавычках, после можно дисплейный фильтр применять.
[src|dst] host - хост
[src|dst] net - подсеть
[src|dst] port - порт
Просмотр
При просмотре runtime, аргументом -Y можно фильтровать вывод данных:
# tshark -Y "ip.addr==192.168.0.1 and tcp.port==80 and http.request"
# tshark -Y "tcp.anallysis.retransmission"
# tshark -Y "not arp or icmp"
Статистика
Для просмотра статистики указывается аргумент -z
Отчет по протоколам SMB, DNS, IP
# tshark -z smb,srt -z dns,tree -z http,tree -z hosts
Список IP соединений
# tshark -r cap.pcap -z conv,ip
Указывает что из файла нужно извлечь инфо о порте-источнике всех пакетов
# tshark -z "proto,colinfo,tcp.srcport,tcp.srcport" -r cap.pcap
Извлечет из файла инфо обо всех пакетах изображений и выведет поля content_type и content_length
# tshark -R "http.response and http.content_type contains image" -z "proto,colinfo,http.content_length,http.content_length" -z "proto,colinfo,http.content_type,http.content_type" \ -r cap.pcap
Примеры
# tshark -f "! port 22" -Y "! arp || icmp"