notes/tcpdump.md

169 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# tcpdump
- [tcpdump](#tcpdump)
- [Подробнее](#подробнее)
- [Сохранить пакеты полностью в дамп для определённого узла](#сохранить-пакеты-полностью-в-дамп-для-определённого-узла)
озможные сетевые интерфейсы для захвата_
`sudo tcpdump -D`
_указать конкретный интерфейс_
`sudo tcpdump -i eth0`
_больше информации в выводе_
`sudo tcpdump -v -i eth0`
host - _имя хоста;_
ip - _ip адрес;_
proto - _протокол;_
net - _адрес сети или подсети;_
port - _адрес порта;_
src - _параметр, касающийся отправителя;_
dst - _параметр, касающейся получателя;_
`sudo tcpdump -i eth0 src host 192.168.1.2 and not port 22`
`sudo tcpdump -v -n -A -e not port 22 and not port 123 and not stp`
`sudo tcpdump -v -n -A -e -i eth0 src host 192.168.5.1 and tcp`
v - _более подробный вывод_
n - е подменять значения на названия, например - указывать ff:ff:ff:ff:ff:ff вместо Broadcast_
A - _выводить всё в ASCII_
e - _выводить данные L2_
## Подробнее
**Ключи**
_Наиболее часто используемые ключи при запуске tcpdump приведены таблице_
ключ описание
-a реобразовывает сетевые и широковещательные адреса в доменные имена._
-e _Отображает данные канального уровня (MAC-адрес, протокол, длина пакета). Помимо IP-адресов будут отображаться MAC-адреса компьютеров._
-F айл. Использовать фильтр, находящийся в файле. Если вы используете этот параметр, фильтр из командной строки будет игнорироваться._
-i _Указывает на то, какой сетевой интерфейс будет использоваться для захвата пакетов. По умолчанию — eth0, для выбора всех интерфейсов — any. Если отсутствует локальная сеть, то можно воспользоваться интерфейсом обратной связи lo._
-l _Использовать стандартный потоковый вывод tcpdump (stdout), например для записи в файл:
`shell# tcpdump -l | tee out.log //отобразит работу tcpdump и сохранит результат в файле out.log`_
-N _Не добавляет доменное расширение к именам узлов. Например tcpdump отобразит `net` вместо `net.library.org`_
-n _Отображает IP-адрес вместо имени хоста._
-nn _Отображает номер порта вместо используемого им протокола._
-p _Не переводит интерфейс в режим приема всех пакетов (promiscuous mode)._
-q _Выводит минимум информации. Обычно это имя протокола, откуда и куда шел пакет, порты и количество переданных данных._
-r _Этот параметр позволяет tcpdump прочесть трафик из файла, если он был предварительно сохранен параметром -w._
-S озволяет не обрабатывать абсолютные порядковые номера (initial sequence number — ISN) в относительные._
-s _число. Количество байтов пакета, которые будет обрабатывать tcpdump. При установке большого числа отображаемых байтов информация может не уместиться на экране и её будет трудно изучать. В зависимости от того, какие цели вы преследуете, и следует выбирать значение этого параметра. По умолчанию tcpdump захватывает первые 68 байт (для SunOS минимум 96 байт), однако если вы хотите увидеть содержимое всего пакета, используйте значение в 1514 байт (максимально допустимый размер кадра в сети Ethernet)._
-t _Не отображает метку времени в каждой строке._
-T _тип. Интерпретация пакетов заданного типа. Поддерживаются типы aodv, cnfp, rpc, rtp, rtcp, snmp, tftp, vat, wb._
-tt _Отображает неформатированную метку времени в каждой строке._
-tttt оказывает время вместе с датой._
-v _Вывод подробной информации (TTL; ID; общая длина заголовка, а также его параметры; производит проверку контрольных сумм IP и ICMP-заголовков)_
-vv _Вывод ещё более полной информации, в основном касается NFS и SMB._
-vvv _Вывод максимально подробной информации._
-w айл. Сохраняет данные tcpdump в двоичном формате. Преимущества использования данного способа по сравнению с обычным перенаправлением в файл является высокая скорость записи и возможность чтения подобных данных другими программами, например snort, но этот файл нельзя прочитать человеку. Возможен вывод двоичных данных на консоль, для этого необходимо использовать -w —_
-x елает распечатку пакета в шестнадцатеричной системе, полезно для более детального анализа пакета. Количество отображаемых данных зависит от параметра -s_
-xx _То же, что и предыдущий параметр -x, но включает в себя заголовок канального уровня_
-X _Выводит пакет в ASCII- и hex-формате. Полезно в случае анализа инцидента связанного со взломом, так как позволяет просмотреть какая текстовая информация передавалась во время соединения._
-XX _То же, что и предыдущий параметр -X, но включает заголовок канального уровня._
-с _число. tcpdump завершит работу после получения указанного числа пакетов._
-U _Собранные пакеты будут сразу складываться в файл, а иначе копиться в памяти до тех пор, пока она не закончится_
**Фильтры tcpdump**
Фильтры разделяются на следующие классификации
Тип
host — _адрес узла сети_
port _порт на котором нужно ловить пакеты_
portrange _диапазон портов_
net _сеть_
_пример_
```bash
tcpdump net 192.168.0.0/24
```
ахват всего трафика в котором в качестве источника или получателя стоят ip адреса из сети 192.168.0.0/24_
```bash
tcpdump port 80
```
удет захватываться весь трафик на 80-м порту._
Направление трафика по отношению к объекту мониторинга
src _отправитель_
dst — _получатель_
апример команда_
```bash
src host 172.31.25.200
```
_Захват трафика у которого отправитель ip адрес 172.31.25.200_
Протокол
ether _базовая сетевая технология Ethernet, как правило указывает на то что в фильтре используется аппаратный MAC адрес_
ip _протокол IPv4_
ip6 _протокол IPv6_
arp _протокол ARP_
tcp _протокол TCP_
udp _протокол UDP_
_Если протокол не указан, то будет захвачен трафик по всем протоколам_
_Например команда_
```bash
udp port 5060
```
ахват трафика по протоколу udp порт 5060_
Составные фильтры
_Для того что бы более гибко фильтровать трафик можно использовать логические операции_
«И» _and (&&)_
«ИЛИ» _or (||)_
«НЕ» _not (!) инверсия значения_
При этом приоритет этих операций следующий:
наивысшим приоритетом обладает операция инверсии
потом логическое «И»
наименьшим приоритетом обладает операция «ИЛИ».
Приоритет операций можно менять с помощью круглых скобок.
`(net 172.16.0.0/24 or host 172.31.0.5) and tcp port 80`
ахват трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5, как любому хосту по отдельности так и вместе_
`(net 172.16.0.0/24 || host 172.31.0.5) && not tcp port 80`
ахват любого трафика кроме трафика протокола TCP и использующего порт 80 принадлежащего сети 172.16.0.0/24 или хосту 172.31.0.5 как любому хосту по отдельности так и вместе_
**Фильтры tcpdump со смещением, пример**
Отфильтровать все UDP внутри GRE по смещению
Отсчет ведется в байтах начиная от внешнего заголовка IP пакета, отсчет идет с 0, т.е. `ip[0]` это поле версии протокола, обычно это `0x45`
```
sniff(offline="erspan.pcap", filter="ip[71] == 0x11")
```
71 - смещение
0x11 - 17 в hex, т.е. UDP
Смещение не обязательно считать от IP заголовка, можно и от других
**tcpdump linux примеры**
Запись вывода в файл
```bash
$ sudo tcpdump -w sshtrace.tcpdump tcp port 22
```
айл sshtrace.tcpdump будет по-умолчанию создан в домашнем каталоге текущего пользователя. Для вывода информации из файла myrouter.tcpdump следует использовать опцию -r:_
```bash
$ tcpdump -r sshtrace.tcpdump
```
Снять весь трафик с интерфейса eth1
```bash
$ tcpdump i eth1
```
Снять трафик с диапазона портов на интерфейсе eth1
```bash
$ tcpdump -i eth1 portrange 100-200
```
весь трафик, идущий к 172.16.0.1, который не является ICMP.
```bash
tcpdump dst 172.16.0.1 and not icmp
```
Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
```bash
$ tcpdump -i eth0 -n -nn -ttt 'dst host 172.16.0.10 and not (src host 172.16.0.11 and dst port 22)'
```
***
## Сохранить пакеты полностью в дамп для определённого узла
```shell
tcpdump -i any host 193.232.121.109 -nnXSs 0 -w test.pcap
```