_Наиболее часто используемые ключи при запуске 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)._
-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`
Смещение не обязательно считать от 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)'