### 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)' ```