Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Использование tcpdump для анализа и перехвата сетевого трафика

Александр Бархатов
Александр Бархатов
Технический писатель
25 января 2024 г.
867
8 минут чтения
Средний рейтинг статьи: 5

Иногда для устранения неполадок в сети может потребоваться дамп сетевого трафика. Для такой цели существует специальный инструмент под названием tcpdump.

tcpdump — это программа-сниффер (анализатор сетевого трафика), которая позволяет перехватывать и анализировать проходящий через утилиту сетевой трафик. Утилита имеет богатый набор опций и различных фильтров, благодаря чему ее можно применять для различных целей. tcpdump — это полностью консольная утилита без графического интерфейса, а значит, ее можно запускать на серверах, где отсутствует поддержка графического интерфейса (GUI). Первая версия программы была выпущена в далеком 1988 году. С тех пор программа активно поддерживается — новые версии стабильно выходят каждый год.

В данной статье мы разберем различные сценарии использования tcpdump.

Предварительные требования

Для установки tcpdump необходимо следующее:

  • Сервер или виртуальная машина с предустановленной ОС Linux. Использовать можно любой дистрибутив.

Установка tcpdump

Установка будет производиться на ОС Ubuntu 22.04.3 LTS. Пакет tcpdump уже присутствует в официальном репозитории ОС. Для начала необходимо обновить индекс пакетов:

sudo apt update

Image22

Далее устанавливаем утилиту:

sudo apt -y install tcpdump

Image6

Убедимся, что установка произведена корректно. Для этого выведем версию tcpdump:

tcpdump --version

Image9

Если в выводе команды отобразилась версия tcpdump, то установка выполнена корректно.

Дальнейший запуск и использование утилиты необходимо производить от имени root-пользователя или пользователя с правами sudo.

Запуск tcpdump без параметров

Если запустить tcpdump без параметров, то утилита начнет захватывать весь трафик со всех доступных интерфейсов в системе, выводя данные на экран (Stdout):

tcpdump

Image15

Чтобы остановить работу программы, необходимо нажать сочетание клавиш Ctrl + C. 

После каждого завершения работы утилита выводит следующую информацию:

  • packets captured — отображает количество захваченных пакетов (пакеты, которые были получены и обработаны tcpdump);
  • packets received by filter — отображает количество пакетов, которые были захвачены при использование фильтров;
  • packets dropped by kernel — отображает количество пакетов, которые были отброшены ядром ОС.

Image17

Также по умолчанию tcpdump не сохраняет результаты своей работы. Запись в файл будет рассмотрена далее в статье.

Формат вывода tcpdump

На примере протокола TCP разберем вывод захваченного пакета. По умолчанию tcpdump отображает следующие данные при захвате:

09:33:57.063196 IP nexus-test.com.ssh > 192.168.111.1.50653: Flags [P.], seq 27376:27440, ack 321, win 521, length 64

Расшифровка параметров приведена в таблице ниже.

Параметр

Описание

09:33:57.063196

Метка времени. Используется формат часы:минуты:секунды.фракция 

Под фракцией подразумеваются доли секунды с полуночи. 

В данном примере пакет был захвачен в 9 часов:33 минуты: 57 секунд.

IP

Используемый протокол.

nexus-test.com.ssh

Доменное имя (или IP-адрес) и порт исходного хоста (источника). Доменное имя (IP-адрес) и порт назначения разделены символом точки.

В данном примере вместо числового обозначения порта 22 используется имя протокола — ssh. Для того чтобы данные адресов и протоколов отображались в в виде чисел, tcpdump необходимо запускать с параметром -n.

192.168.111.1.50653

Доменное имя (или IP-адрес) и порт хоста назначения. Доменное имя (IP-адрес) и порт назначения разделены символом точки.

Flags [P.]

ACK-флаг(и). Предназначены для указания на состояние соединения. Могут содержать одно или более значений.

В данном примере задействован флаг P.

P — сокращение от PUSH. Предназначен для  обработки пакетов вместо их буферизации.

seq 27376:27440

Порядковый номер данных в пакете.

Используется относительное число для упрощения отслеживания. Последовательность 27376:27440 означает, что данный пакет содержит байты с 27376 по 27440. 

ack 321

Используется для подтверждения пришедшего пакета.

win 521

Размер окна в байтах.

Отображает количество байтов буферного пространства, доступного хосту для приема данных.

length 64

Длина пакета в байтах.

Отображает длину данных полезной нагрузки. Длина — это разница между последним и первым байтами порядкового номера.

Практическое использование tcpdump

Перейдем к более гибкому использованию tcpdump. Рассмотрим на практике различные примеры использования утилиты.

Вывод списка сетевых интерфейсов

Для вывода всех сетевых интерфейсов в системе, на которых tcpdump может перехватывать трафик, используется команда:

tcpdump -D

Image2

Захват трафика с определенного сетевого интерфейса

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

tcpdump -i ens33

Image5

Отключение преобразования IP-адресов в имена хостов

Еще одной особенностью tcpdump является то, что по умолчанию утилита преобразует IP-адреса в имена хостов, а также использует название сервисов вместо номеров портов. Чтобы tcpdump не преобразовывал IP-адреса в имена хостов необходимо при запуске добавить ключ -n:

tcpdump -n

3a51a06a 252e 4368 B887 B11a871e5d9f

Чтобы запретить преобразование номеров портов в название протокола, необходимо использовать опцию -nn.

tcpdump -nn

Захват определенного количества пакетов

По умолчанию tcpdump будет захватывать неограниченное количество пакетов. Чтобы захватить только необходимое количество пакетов, например 4, необходимо использовать ключ -c:

tcpdump -c 4

Image19

Добавление даты

По умолчанию tcpdump не отображает дату захвата пакета. Для отображения даты используется ключ -tttt. Дата будет отображена в формате год:месяц:число в самом начале строки:

tcpdump -tttt

1055939d 0924 4655 Bd08 3607a36e7af5

Фильтрация пакетов в tcpdump

tcpdump обладает богатым набором фильтров, позволяя захватывать только необходимые пакеты. Рассмотрим основные фильтры.

Фильтрация по портам

Для того чтобы захватить трафик который «слушается» на определенном порту, можно воспользоваться опцией port. Например, захватим трафик со всех интерфейсов, указав в качестве направления опцию dest — в данном случае tcpdump выведет трафик, который направляется к месту назначения (от нас):

tcpdump dst -n port 80

Image3

Также можно задать диапазон портов:

tcpdump -n portrange 80-443

Image23

Фильтрация по протоколам

tcpdump поддерживает фильтрацию по протоколам. В качестве протоколов можно использовать следующие значения: ether, fddi, tr, wlan, ppp, slip, link, ip, arp, rarp, tcp, udp, icp, ipv6.

Вывод некоторых протоколов предоставлен ниже:

tcpdump icmp

Image20

tcpdump tcp

486dfb79 Ea7c 4e90 B3d5 38f6775f39e7

tcpdump arp

Image21

tcpdump udp

D85a6b9d 32a8 4ea2 Ae5c Ebae57600e97

Фильтрация по размеру пакета

tcpdump позволяет захватывать пакеты определенного размера. Для этого используется две опции:

  • less — меньше задаваемого количества байт;
  • greater — больше задаваемого количества байт.

Рассмотрим на конкретных примерах.

Захватим трафик, пакеты которого в сумме «весят» не более 43 байт:

tcpdump less 43

Image14

Захватим трафик, пакеты которого в сумме «весят» более 43 байт:

 tcpdump greater 43

Image25

Стоит учитывать, что в размер пакета входит и размер заголовка: заголовок стандарта Ethernet без CRC занимает 14 байт, заголовок протокола IPv4 занимает 20 байт, заголовок протокола ICMP занимает 8 байт.

Фильтрация по MAC адресу

Для того чтобы использовать фильтрацию по MAC-адресу, необходимо использовать опции ether host. Для перехвата любого трафика, отправляемого на заданный MAC-адрес или с него, необходимо использовать команду ниже (где 00:0c:29:c7:00:3f — MAC-адрес):

tcpdump ether host 00:0c:29:c7:00:3f

Image26

Фильтрация по адресу отправителя или получателя

Фильтровать трафик можно, используя IP-адрес или доменное имя отправителя или получателя. 

Для того чтобы перехватывать трафик, который исходит от определенного хоста, используется параметр src:

tcpdump -nn src 192.168.36.132

Image18

Для того чтобы перехватывать трафик, который «приходит» от определенного хоста, используется параметр dst:

tcpdump -nn dst 192.168.36.132

Image11

Использование логических операторов в tcpdump

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

  • and или && — логическое «И». Объединяет нескольких условий — отображает результат, соответствующий всем условиям;
  • or или || — логическое «ИЛИ». Параллельно объединяет несколько условий — выводится результат, соответствующий хотя бы одному условию;
  • not или ! — логическое «НЕ». Предназначено для исключения указанного условия — выводится результат, не соответствующий заданному условию.

Рассмотрим использование логических операторов на конкретных примерах. Перехватим пакеты, которые отправляются с хоста 192.168.36.132, и захватим только те пакеты, которые прослушивают 22 порт: 

tcpdump -nn src 192.168.36.132 and port 22

Image12

Захватим пакеты со всех доступных интерфейсов, которые слушают порты 22 или 80:

tcpdump -nn port 22 or port 80

45ba8aec 5798 4002 B6a6 4933d37a3a9f

Захватим все пакеты, кроме пакетов с ICMP:

tcpdump -nn not icmp

C0e7ddc6 9c61 43f9 9bbf 7a1a6945001b

Запись в файл

Как уже было упомянуто ранее, по умолчанию tcpdump не сохраняет вывод своей работы в файл. Для того чтобы данные сохранялись в файл, необходимо использовать параметр -w, указав имя файла, а также задать расширение для файла в формате .pcap:

tcpdump -nn src 192.168.36.132 -w results.pcap

Image4

Во время записи в файл результаты не будут отображаться в терминале. Для того чтобы остановить захват пакетов, необходимо нажать сочетание клавиш CTRL + C.

Данные, записанные в файл, можно прочитать. Для этого необходимо использовать параметр -r и указать имя файла, куда были сохранены результаты tcpdump:

tcpdump -r results.pcap

973be19d 3392 4e9c 8496 77b622acf941

 Заключение

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону