Примеры tcpdump в Linux

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

В этой статье мы не рассмотрим теорию сетей, а поговорим о конкретных командах, которые вы можете использовать в повседневной работе. Вы узнаете, как фильтровать пакеты по IP-адресам, портам и типам протоколов, чтобы быстро найти нужную информацию в море сетевых данных.

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

Tcpdump — полезная утилита Linux для прослушивания и анализа сетевого трафика, которую часто используют администраторы и разработчики, чтобы понять, что происходит в сети, например, почему сервис не работает, кто нагружает канал или есть ли подозрительные подключения. Простые команды могут быть использованы для фильтрации трафика по протоколам, портам, интерфейсам или протоколам Интернета, а также для сохранения для анализа или просмотра в режиме реального времени. Это похоже на то, чтобы участвовать в разговоре двух компьютеров и понять, о чем они говорят.

Установка

Большинство разработчиков операционных систем на базе Linux включают утилиту tcpdump в список предустановленных, но если она отсутствует в вашем дистрибутиве, ее можно скачать и установить с помощью «Терминала». Если ваша операционная система основана на Debian, такая как Ubuntu, Linux Mint, Kali Linux и другие, вам необходимо выполнить эту команду:

sudo apt install tcpdump

При включении вы должны ввести пароль. Обратите внимание, что при наборе он не отображается. Чтобы подтвердить установку, необходимо ввести символ «Д» и нажать Enter.

Если ваша система Red Hat, Fedora или CentOS, файл установки будет выглядеть следующим образом:

sudo yam install tcpdump

После установки утилиту можно использовать сразу же, как описано ниже.

Прочтите также: Руководство по установке PHP на сервере Ubuntu

Синтаксис

Tcpdump имеет свой синтаксис, как и любая дрyгая команда. Зная его, вы можете настроить все необходимые параметры для выполнения команды. Вот структура синтаксиса:

Tcpdump-интерфейсные фильтры -i

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

Опции

Несмотря на то, что эту опцию не нужно указывать, необходимо перечислить доступные; в таблице показаны только наиболее популярные, но их достаточно, чтобы выполнить большинство задач.

Опция Определение
-A Позволяет отсортировать пакеты с форматом ASCII
-l Добавляет функцию прокрутки
-i После ввода нужно указать сетевой интерфейс, который будет отслеживаться. Чтобы начать отслеживать все интерфейсы, впишите после опции слово «any»
-c Завершает процесс отслеживания после проверки указанного количества пакетов
-w Генерирует текстовый файл с отчетом проверки
-e Показывает уровень интернет-соединения пакета данных
-L Выводит только те протоколы, которые поддерживает указанный сетевой интерфейс
-C Создает другой файл во время записи пакета, если его размер больше заданного
-r Открывает файл для чтения, который был создан с помощью опции -w
-j Для записи пакетов будет использоваться формат TimeStamp
-J Позволяет просмотреть все доступные форматы TimeStamp
-G Служит для создания файла с логами. Опция требует также указания временного значения, по истечении которого будет создаваться новый лог
-v, -vv, -vvv В зависимости от количества символов в опции, вывод команды будет становиться подробнее (увеличение прямо пропорционально количеству символов)
-f В выводе показывает имя домена адресов IP
-F Позволяет считывать информацию не из сетевого интерфейса, а из указанного файла
-D Демонстрирует все сетевые интерфейсы, которые можно использовать
-n Деактивирует отображение доменных имен
-Z Задает пользователя, под учетной записью которого будут созданы все файлы
-K Пропуск анализа контрольных сумм
-q Демонстрация краткой информации
-H Позволяет обнаружить заголовки 802.11s
-I Используется при захвате пакетов в режиме монитора

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

Фильтры

Как указано в начале статьи, вы можете включить фильтры в синтаксис tcpdump. Сейчас мы рассмотрим наиболее распространенные из них:

Фильтр Определение
host Служит для указания имени хоста
net Указывает IP подсети и сети
ip Служит для указания адреса протокола
src Выводит пакеты, которые были отправлены с указанного адреса
dst Выводит пакеты, которые были получены указанным адресом
arp, udp, tcp Фильтрация по одному из протоколов
port Отображает информацию, относящуюся к определенному порту
and, or Служит для объединения нескольких фильтров в команде
less, greater Вывод пакетов меньше или больше указанного размера

В связи с тем, что каждый из этих фильтров можно использовать вместе, вы можете видеть только ту информацию, которую вы хотите видеть при выдаче команды. Чтобы узнать больше об использовании этих фильтров, смотрите примеры.

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

Сейчас мы рассмотрим наиболее распространенные варианты синтаксиса команды tcpdump. Невозможно перечислить все их, потому что существует бесконечное количество различий.

Просмотр списка интерфейсов

Рекомендуется, чтобы каждый пользователь сначала проверил список всех его сетевых интерфейсов, которые можно отследить. Мы знаем, что для этого необходимо использовать опцию -D, поэтому в терминале выполните команду:

sudo tcpdump -D

Пример:

Как вы можете видеть, команда tcpdump может видеть восемь интерфейсов. Примеры будут приводиться с использованием ppp0, но вы можете использовать любое другое.

Обычный захват трафика

Если вам нужно отследить один сетевой интерфейс, используйте опцию -i. Не забудьте указать наименование интерфейса после ее ввода. Вот пример выполнения такой команды:

sudo tcpdump -i ppp0

Вы должны вписать «sudo» перед командой, чтобы получить права суперпользователя.

Пример:

Примечание: после нажатия Enter в «Терминале» перехваченные пакеты будут отображаться непрерывно. Нажав комбинацию клавиш Ctrl+C, вы можете остановить их движение.

Если вы удалите команду без дополнительных опций и фильтров, вы увидите отслеживание пакетов в следующем формате:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482: Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594

Где цвет выделяет:

Синим Время получения пакета
Оранжевым Версия протокола
Зеленым Адрес отправителя
Фиолетовым Адрес получателя
Серым Дополнительная информация о tcp
Красным Размер пакета (отображается в байтах)

Этот синтаксис может быть выведен в окне «Терминал» без дополнительных возможностей.

Захват трафика с опцией -v

Опция -v, как видно из таблицы, позволяет увеличить количество информации. Разберем это на примере, просмотрев тот же интерфейс:

sudo tcpdump -v -i ppp0

Пример:

Посмотрите, что в выводе появилась следующая строка:

IP (tos 0x0, ttl 58, id 30675, offset 0, flags [DF], proto TCP (6), length 52

Где цвет выделяет:

Оранжевым Версия протокола
Синим Продолжительность жизни протокола
Зеленым Длина заголовка поля
Фиолетовым Версия пакета tcp
Красным Размер пакета (отображается в байтах)

Вы также можете прописать опцию -vv или -vvv в синтаксис команды, что позволит увеличить количество выводимой информации на экран.

Опция -w и -r

В таблице опций указано, что вы можете сохранить все выводимые данные в отдельном файле, чтобы их можно было просмотреть позже. Опция -w отвечает за это. Это очень просто использовать: просто укажите ее в команде и впишите название будущего файла с расширением.pcap. Рассмотрим все на примере:

sudo tcpdump -i ppp0 -w file.pcap

Пример:

Во время запиcки логов в файл не отображается текст на экране «Терминала».

Чтобы просмотреть записанный вывод, используйте опцию -r, а затем напишите название ранее записанного файла. Эта опция используется без дополнительных опций и фильтров:

sudo tcpdump -r file.pcap

Пример:

Когда вам нужно сохранить большие объемы текста для последующего разбора, обе эти опции идеально подойдут.

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

Мы знаем из таблицы фильтров, что dst может выводить на экран консоли только пакеты с адресом, указанным в синтаксисе команды. Таким образом, просматривать пакеты, полученные вашим компьютером, очень удобно. Для этого достаточно сообщить команде свой IP-адрес:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Пример:

В команде был разработан фильтр IP, помимо dst. Иными словами, мы попросили компьютер учитывать только IP-адрес пакетов при выборе.

Можно отфильтровать и отправить пакеты по IP. В качестве примера приведем наш IP. То есть в настоящее время мы следим за тем, какие пакеты отправляются с нашего компьютера на различные адреса. Для этого необходимо выполнить команду:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Пример:

Как видно, в синтаксисе команды мы изменили фильтр dst на src. Это позволило машине искать отправителя по IP.

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

Мы можем установить фильтр host по аналогии с IP-адресом команды, чтобы отсеять пакеты с конкретным хостом. То есть в синтаксисе должен быть указан хост, а не IP-адрес отправителя или получателя. Это выглядит так:

sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com

Пример:

На изображении показано, что в «Терминале» показываются только пакеты, отправленные с нашего IP на хост google.com. Очевидно, что любой другой хост может быть использован вместо хоста Google.

В синтаксисе dst можно заменить на src, чтобы увидеть пакеты, отправленные на ваш компьютер, как и в случае с IP-фильтрацией:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Если этого не произойдет, команда выдаст ошибку. Фильтр хозяйки следует устанавливать после dst или src. В противном случае dst и src находятся впереди IP-фильтра.

Применение фильтра and и or

Если вам нужно использовать сразу несколько фильтров в одной команде, вы должны использовать фильтр and или or (зависит от ситуации). Вы можете «заставить» фильтры работать вместе, указывая их в синтаксисе и разделяя их этими операторами. Например, это выглядит так:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254

Пример:

Мы хотим вывести на экран «Терминала» все пакеты, отправленные на адрес 95.47.144.254, а также пакеты, полученные на этом же адресе, как показано в синтаксисе команды. Кроме того, у вас есть возможность изменить некоторые переменные в этом выражении. Например, замените IP на HOST или используйте сами адреса.

Фильтр port и portrange

Когда нужно получить информацию о пакетах с определенным портом, FTP-порт идеально подходит. Таким образом, если вам нужно увидеть только запросы или ответы DNS, вы должны указать порт 53:

sudo tcpdump -vv -i ppp0 port 53

Пример:

Вы должны ввести порт 80 для просмотра пакетов HTTP:

sudo tcpdump -vv -i ppp0 port 80

Пример:

Помимо этого, есть возможность отслеживать диапазон портов сразу. Для этого используется фильтр портrange:

sudo tcpdump portrange 50-80

Как видно, при использовании фильтра Portrange не обязательно указывать дополнительные опции. Просто задайте диапазон.

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

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

sudo tcpdump -vvv -i ppp0 udp

Пример:

После выполнения команды в «Терминале» отображаются только пакеты с протоколом udp, как показано на изображении. Таким образом, вы можете фильтровать и по другим параметрам, таким как arp:

sudo tcpdump -vvv -i ppp0 arp

или tcp:

sudo tcpdump -vvv -i ppp0 tcp

Фильтр net

Оператор сети использует обозначение сети пакетов для помощи в отфильтровании пакетов. Для их использования так же просто, как и для других: в синтаксисе необходимо указать атрибут net, а затем вписать адрес сети. Вот один пример команды:

sudo tcpdump -i ppp0 net 192.168.1.1

Пример:

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

Мы также не рассмотрели два других интересных фильтра: меньший и больший. Мы знаем из таблицы с фильтрами, что они предназначены для вывода пакетов данных больше (меньше) или меньше (больше) размера, указанного после ввода атрибута.

Если мы сообщим, что хотим следить за пакетами не более 50 бит, то наша команда будет выглядеть следующим образом:

sudo tcpdump -i ppp0 less 50

Пример:

Тепер мы рассмотрим пакеты с размером более пятидесяти бит в «Терминале»:

sudo tcpdump -i ppp0 greater 50

Пример:

Как видно, они используются одинаково, и единственная разница — название фильтра.

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

Для начала вы можете использовать простые команды, такие как фильтрация по порту или IP-адресу, но по мере практики вы сможете создавать более сложные фильтры, чтобы точно ловить нужные пакеты. Экспериментирование на своей тестовой машине — лучший способ понять, как все работает.

Системный администратор или разработчик должен уметь использовать tcpdump. Оно дает вам возможность самостоятельно решать проблемы, будь то сбой в соединении, подозрительная активность или просто желание понять, как работает определенный сетевой сервис. Этот инструмент станет отличным помощником.

Поделиться с друзьями
Дмитрий Соколов

Разработчик ПО и энтузиаст «железа», который совмещает практический опыт программирования с глубоким интересом к устройству компьютеров.

Оцените автора
Добавить комментарий