Содержание

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 без аргументов, запустит полный сбор всего что есть, с выводом результатов на экран.

Фильтры захвата

Используется аргумент -f, затем выражение в кавычках, после можно дисплейный фильтр применять.

Просмотр

При просмотре 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"