Утилита tcpdump
03.05.2020
Теги: CLI • Linux • Команда • СетевойИнтерфейс
Утилита tcpdump есть практически в любом дистрибутиве Linux. Она позволяет перехватывать все пакеты трафика и сохранять их в файл для дальнейшего анализа. Если утилита вызвана для прослушивания некоторого интерфейса, она переводит его в «неразборчивый режим». В этом режиме интерфейс ловит вообще все пакеты, которые до него добрались, а не только пакеты, адресованные непосредственно ему.
Синтаксис
# tcpdump [опции] [фильтры]
Опции
-i— Какой сетевой интерфейс использовать для захвата пакетов. Если интерфейс не указан, будет использован первый попавшийся. Можно использоватьanyдля выбора всех интерфейсов.-D— Показать список сетевых интерфейсов, доступных для прослушивания.-n— Отключить преобразование ip-адресов в доменные имена. Если указано-nn, то запрещается преобразование номеров портов в название протокола.-p— Не переводить интерфейс в режим приема всех пакетов (promiscuous mode). То есть захватывать только трафик, предназначенный данному узлу. По-умолчанию — захват всех пакетов, которые добрались до узла, в том числе широковещательных.-q— Переход в бесшумный режим, т.е. показывать минимальное количество информации о пакете.-v, -vv, -vvv— Показывать больше (еще больше, еще больше) информации о пакетах.-t— Не показывать метку времени в каждой строке.-e— Отображать данные канального уровня (MAC-адрес, протокол, длина пакета) помимо IP-адресов.-c— Получить только указанное количество пакетов, а затем остановить.-w— Имя файла, в который нужно записывать собранную информацию.-r— Имя файла, из которого нужно прочитать собранную информацию.
Фильтры позволяют указать:
- хост, сеть и порт (
host,net,portиportrange) - откуда и/или куда идут пакеты (
srcиdst) - протокол (
ip,arp,rarp,tcp,udp,icmpи другие)
Кроме того, условия фильтрации можно комбинировать с использованием ключевых слов or, and и not.
Популярные фильтры
dst хост— Проверяет, совпадает ли адрес получателя IP-пакета с указанным значением. Значение можно задавать как IP-адрес, подсеть в формате10.0.0.1/24, так и имя хоста.src хост— Проверяет, совпадает ли адрес отправителя IP пакета с указанным значением. Значение можно задавать как IP-адрес, подсеть в формате10.0.0.1/24, так и имя хоста.host хост— Проверяет, совпадает ли адрес отправителя или получателя с заданным значением. Значение можно задавать как IP-адрес, подсеть в формате10.0.0.1/24, так и имя хоста.net сеть— Проверяет, находится ли адрес отправителя или получателя в заданной сети. Возможно указание сети в формате10.0.0.1/24, либо указание имени сети, заданной в файле/etc/networks.ip|arp|tcp|udp|icmp [host|src|dst хост]— Проверяет, принадлежит ли пакет одному из указанных протоколов и при указании адреса хоста проверяет, совпадает ли адрес отправителя/получателя с заданным. Возможно задавать как IP, подсеть в формате10.0.0.1/24, так и имя хоста.[tcp | udp] dst port порт— Проверяет, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения заданному. Можно указать номер порта, либо имя, заданное в файле/etc/services.[tcp | udp] src port порт— Проверяет, принадлежит ли пакет протоколу TCP/UDP и равен ли порт источника заданному. Можно указать номер порта, либо имя, заданное в файле/etc/services.[tcp | udp] port порт— Проверяет, принадлежит ли пакет протоколу TCP/UDP и равен ли порт назначения или источника заданному. Можно указать номер порта, либо имя, заданное в файле/etc/services.ip broadcast— Проверяет, является ли IP пакет широковещательным.ether [src | dst | host] MAC-адрес— Проверяет, принадлежит ли Ethernet-кадр источнику, назначению, источнику или назначению, имеющему заданный MAC-адрес.ether broadcast— Проверяет, является ли Ethernet-кадр широковещательным.
Примеры использования
Трафик хоста 123.123.123.123, будь то источник пакетов или их место назначения
# tcpdump -i eth0 host 123.123.123.123
Показать трафик на основе адреса источника или места назначения
# tcpdump -i eth0 src 111.111.111.111 # tcpdump -i eth0 dst 222.222.222.222
Показать трафик, идущий в определенную сеть или из определенной сети
# tcpdump -i eth0 net 192.168.100.0/24
Показать трафик, связанный с определенным портом
# tcpdump -i eth0 port 3389
Найти трафик с помощью указания протокола
# tcpdump -i eth0 icmp
Найти трафик с помощью указания протокола и хоста источника или места назначения
# tcpdump -i eth0 ip host 123.123.123.123
Найти трафик с помощью указания протокола, хоста источника и хоста места назначения
# tcpdump tcp and src host 10.10.0.1 and dst host 192.168.100.54 # tcpdump tcp and src 10.10.0.1 and dst 192.168.100.54
Трафик, связанный с определенным протоколом и портом места назначения
# tcpdump -i eth0 tcp dst port 3389
Найти весь трафик с хоста 123.123.123.123 на порт 3389
# tcpdump -i eth0 src 123.123.123.123 and dst port 3389
Показать кадры Ethernet, идущие с определённого MAC-адреса
# tcpdump -i eth0 ether src c0:b6:f9:da:af:3e
Показать кадры Ethernet, идущие на определённый MAC-адрес
# tcpdump -i eth0 ether dst c0:b6:f9:da:af:3e
Показать кадры Ethernet, идущие с/на определённый MAC-адрес
# tcpdump -i eth0 ether host c0:b6:f9:da:af:3e
Трафик, идущий с хоста 123.123.123.123 в сеть 192.168.100.0/24 или в сеть 192.168.200.0/24
# tcpdump src host 123.123.123.123 and \(dst net 192.168.100.0/24 or 192.168.200.0/24\)
Дополнительно
Поиск: CLI • Linux • Команда • Сетевой интерфейс • Фильтр • tcpdump • Протокол • Пакет • Кадр