12 KiB
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 – сеть
пример
tcpdump net 192.168.0.0/24
захват всего трафика в котором в качестве источника или получателя стоят ip адреса из сети 192.168.0.0/24
tcpdump port 80
Будет захватываться весь трафик на 80-м порту.
Направление трафика по отношению к объекту мониторинга
src – отправитель
dst — получатель
например команда
src host 172.31.25.200
Захват трафика у которого отправитель ip адрес 172.31.25.200
Протокол
ether – базовая сетевая технология Ethernet, как правило указывает на то что в фильтре используется аппаратный MAC адрес
ip – протокол IPv4
ip6 – протокол IPv6
arp – протокол ARP
tcp – протокол TCP
udp – протокол UDP
Если протокол не указан, то будет захвачен трафик по всем протоколам
Например команда
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 примеры
Запись вывода в файл
$ sudo tcpdump -w sshtrace.tcpdump tcp port 22
Файл sshtrace.tcpdump будет по-умолчанию создан в домашнем каталоге текущего пользователя. Для вывода информации из файла myrouter.tcpdump следует использовать опцию -r:
$ tcpdump -r sshtrace.tcpdump
Снять весь трафик с интерфейса eth1
$ tcpdump –i eth1
Снять трафик с диапазона портов на интерфейсе eth1
$ tcpdump -i eth1 portrange 100-200
весь трафик, идущий к 172.16.0.1, который не является ICMP.
tcpdump dst 172.16.0.1 and not icmp
Ловим весь входящий трафик, исключая трафик генерируемый нашей SSH-сессией.
$ tcpdump -i eth0 -n -nn -ttt 'dst host 172.16.0.10 and not (src host 172.16.0.11 and dst port 22)'