Утилита 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 • Протокол • Пакет • Кадр