156 lines
12 KiB
Markdown
156 lines
12 KiB
Markdown
### 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)'
|
||
```
|