SEARCH

Введите поисковый запрос в поле выше ^, или воспользуйтесь поиском по форуму.

#1 2024-03-01 10:22

cOR
Администратор
Зарегистрирован: 2023-08-29
Сообщений: 85
Сайт

Шпаргалка по tcpdump

Очень часто для поиска проблем в работе сети используются анализаторы сетевого трафика. tcpdump является одним из представителей данного класса программ, она позволяет прослушать (отобразить/сохранить) и проанализировать работу сети на уровне передаваемых сетевых пакетов, фреймов и др. единиц передачи сетевого трафика. В зависимости от конфигурации сети, tcpdump может прослушивать не только пакеты, предназначенные данному MAC-адресу, но и широковещательные пакеты. Прослушивание перехват сетевых пакетов основан на "беспорядочном" (promiscuous) режиме работы сетевого адаптера.

В зависимости от используемого сетевого оборудования для соединения компьютеров в сети Ethernet существуют следующие возможности прослушивания трафика:

    В сети на основе концентраторов весь трафик с концентратора хаба доступен любому сетевому хосту.
    В сетях на основе коммутаторов (свичей) сетевому хосту доступен только ее трафик, а также весь широковещательный трафик данного сегмента.
    Некоторые управляемые коммутаторы имеют функцию копирования трафика данного порта на порт мониторинга ("зеркалирование",мониторинг порта).
    При использовании специальных средств (ответвителей), включаемых в разрыв сетевого подключения и передающих трафик подключения на отдельный порт возможно прослушивание соответствующего порта.
    "Трюк" с концентратором — порт коммутатора, трафик которого необходимо прослушать, включают через концентратор, подключив к концентратору также узел-монитор (при этом в большинстве случаев уменьшается производительность сетевого подключения).

Итак, утилита tcpdump входит в большинство дистрибутивов Unix и позволяет перехватывать и отображать/сохранять в файл сетевой трафик. Утилита использует библиотеку libpcap. Для Windows тоже существует порт. Для работы утилиты ее необходимо установить. Например, в Debian она устанавливается с помощью команды:

apt-get install tcpdump

Для работы утилиты необходимы права суперпользователя (т.к. изменяются настройки сетевого интерфейса - переводится в "безпорядочный" режим). В общем случае формат команды tcpdump имеет следующий вид:

tcpdump <опции> <фильтр>
Опции утилиты tcpdump

-i интерфейс, Задает интерфейс, с которого необходимо анализировать трафик (без указания интерфейса - анализ "первого попавшегося").
-n Отключает преобразование IP в доменные имена. Если указано -nn, то запрещается преобразование номеров портов в название протокола.
-e Включает вывод данных канального уровня (например, MAC-адреса).
-v Вывод дополнительной информации (TTL, опции IP).
-s размер, Указание размера захватываемых пакетов. (по-умолчанию - пакеты больше 68 байт)
-w имя_файла, Задать имя файла, в который сохранять собранную информацию.
-r имя_файла, Чтение дампа из заданного файла.
-p Захватывать только трафик, предназначенный данному узлу. (по-умолчанию - захват всех пакетов, например в том числе широковещательных).
-q Переводит tcpdump в "бесшумный режим", в котором пакет анализируется на транспортном уровне (протоколы TCP, UDP, ICMP), а не на сетевом (протокол IP).
-t Отключает вывод меток времени.

Фильтрующие выражения tcpdump

В команде tcpdump возможно задать фильтрующее правило. Фильтрующее выражение состоит из параметра отбора пакетов и значения задаваемого параметра. Например, команда

tcpdump -i eth0 host 10.0.0.1

имеет опцию -i eth0, задающую прослушиваемый интерфейс eth0 и фильтрующее выражение, заставляющее tcpdump отображать все пакеты, у которых в поле отправителя и в поле получателя стоит адрес 10.0.0.1. При этом, host - это параметр отбора, а 10.0.0.1 - это значение параметра.
Фильтрующие выражения можно комбинировать между собой с помощью дополнительных операторов and, or и not. C помощью этих операторов можно строить довольно сложные логические конструкции, группируя параметры в скобки. Например, команда:

tcpdump -i eth0 dst 10.0.0.5 and port 53

ограничит отображение только пакетами отправленные на хост 10.0.0.5 по протоколу DNS (порт 53).

Наиболее часто используемые фильтрующие параметры команды tcpdump

dst хост
              Проверяет, совпадает ли адрес получателя IP-пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

src хост
              Проверяет, совпадает ли адрес отправителя IP пакета с указанным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

host хост
              Проверяет, совпадает ли адрес отправителя или получателя с заданным значением. Возможно задавать как IP, подсеть в формате 10.0.0.1/24, так и имя хоста.

net имя_сети
              Проверяется, находится ли адрес отправителя/получателя в заданной сети. Возможно указание сети в формате CIDR (например 10.0.0.1/22), либо указание имени сети, заданной в файле /etc/networks.

ip | arp | rarp | tcp | udp | icmp [хост]
              Проверяет, принадлежит ли пакет одному из указанных протоколов и при указании адреса хоста проверяет, совпадает ли адрес отправителя\получателя с заданным. Возможно задавать как 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_адрес
              Проверяется, принадлежит ли сетевой пакет источнику, назначению, источнику или назначению имеющему заданный MAC_адрес.

ether broadcast
              Проверяется, является ли ARP-пакет широковещательным.

Примеры использования команды tcpdump

Анализ трафика на сетевом уровне (ARP, ICMP) с помощью tcpdump
Предположим, у нас имеется 2 хоста. Хост 1 с интерфейсом eth0 и следующими параметрами:

host1:~# ip addr show dev eth0
5: eth0:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast
    state UNKNOWN qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.1/24 brd 192.168.56.255 scope global eth0
    inet6 fe80::800:27ff:fe00:0/64 scope link
       valid_lft forever preferred_lft forever

А так же хост2 с интерфейсом eth1

host2:~# ip addr show dev eth1
3: eth1:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc
    pfifo_fast state UP qlen 1000
    link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.33/24 scope global eth1
    inet6 fe80::a00:27ff:fefd:e5aa/64 scope link
       valid_lft forever preferred_lft forever

Предположим, что до текущего момента сетевого обмена данными между хостами не происходило и если на хосте 2 запустить команду ip neigh show, то будет видно что в ARP-таблице нет записей. Проведем маленький эксперимент. Запустим на одном из виртуальных интерфейсов host1 утилиту tcpdump:

host1:~# tcpdump -ne -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

Далее запустим ping машины host2 с машины host1:

host1:~# ping -c 1 192.168.56.33
 PING 192.168.56.33 (192.168.56.33) 56(84) bytes of data.
 64 bytes from 192.168.56.33: icmp_req=1 ttl=64 time=1.06 ms
 --- 192.168.56.33 ping statistics ---
 1 packets transmitted, 1 received, 0% packet loss, time 0ms
 rtt min/avg/max/mdev = 1.067/1.067/1.067/0.000 ms

После этого в ARP-таблице системы host1 появилась запись об IP-адресе машины host2:

host1:~# ip neigh show dev eth0
192.168.56.33 lladdr 01:00:27:77:e5:00 HOST2

На виртуальной консоли tcpdump нам отобразил следующую информацию:

host1:~# tcpdump -ne -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:16:29.465780 0a:00:27:00:00:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806),
      length 42: Request who-has 192.168.56.33 tell 192.168.56.1, length 28
12:16:29.466786 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype ARP (0x0806),
      length 42: Reply 192.168.56.33 is-at 01:00:27:77:e5:00, length 28
12:16:29.466815 0a:00:27:00:00:00 > 01:00:27:77:e5:00, ethertype IPv4 (0x0800),
   length 98: 192.168.56.1 > 192.168.56.33: ICMP echo request, id 5284, seq 1, length 64
12:16:29.467934 01:00:27:77:e5:00 > 0a:00:27:00:00:00, ethertype IPv4 (0x0800),
   length 98: 192.168.56.33 > 192.168.56.1: ICMP echo reply, id 5284, seq 1, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel

Каждая запись о сетевом пакете в таком формате содержит время перехвата пакета, MAC-адреса отправителя и получателя, тип протокола, длину пакета и сведения о содержимом пакета. Первая запись описывает широковещательный ARP-запрос с MAC-адреса интерфейса eth0 системы host1 ("У кого адрес 192.168.56.33, это говорит 192.168.56.1"). Вторая запись— ответ с MAC-адреса машины host2 на MAC-адрес системы host1 ("192.168.56.33 имеет MAC-адрес 01:00:27:77:e5:00"). Третья и четвертая записи (ICMP-запрос и ICMP-ответ) являются результатом работы команды ping на системе host1. Далее работа tcpdump была прервана комбинацией клавиш Ctrl+C. Перед завершением работы tcpdump печатает статистику работы: количество перехваченных, полученных фильтром и отброшенных ядром пакетов

Таким образом, система host1 для того, чтобы отправить стандартный эхо-запрос машине host2, предварительно по протоколу ARP получила MAC-адреса машины host2 и внесла его с привязкой к IP-адресу в свою ARP-таблицу.

Другие примеры использования команды tcpdump

Вывод сетевой статистики с интерфейса ppp0 (-i ppp0) без преобразования IP в DNS (-n) тех фреймов, у которых MAC-адресом источника равен 11:20:b3:d8:d8:2c.

# tcpdump -n -i ppp0 ether src 11:20:b3:d8:d8:2c

Вывод широковещательного трафика с интерфейса vlan0.

# tcpdump -n -e -i vlan0 ether broadcast

Фильтруются сетевые пакеты, в заголовке которых в поле источник указан IP-адрес192.168.66.1.

# tcpdump -n -i eth0 host 192.168.66.1

Фильтруются пакеты, в которых данный IP-адрес указан как источник или как получатель пакета.

# tcpdump -n -i eth0 host 192.168.66.1

Фильтруются пакеты, в которых источником указаны узлы сети 10.0.0.0/8.

# tcpdump -n -i eth0 src net 10.0.0.0 mask 255.0.0.0

Вывод только ICMP-пакетов с интерфейса eth0.

# tcpdump -n -i eth0 icmp

Думай дважды, кодь однажды. (c) cOR

Offline

Copyright © 2023 TDM ltd.
Created by cOR.

TDM Logo