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

    Команда Simple-Server
    03.06.2026
    8 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

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

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

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

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

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

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

    sudo apt -y install tcpdump

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

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

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

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

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

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

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

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

    Также по умолчанию 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Длина пакета в байтах. Отображает длину данных полезной нагрузки. Длина — это разница между последним и первым байтами порядкового номера.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    tcpdump -n portrange 80-443

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    tcpdump -nn src 192.168.36.132

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

    tcpdump -nn dst 192.168.36.132

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

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

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

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

    tcpdump -nn src 192.168.36.132 and port 22

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

    tcpdump -nn port 22 or port 80

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

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

    tcpdump -nn src 192.168.36.132 -w results.pcap

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

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


    Нужен сервер для практики? Закажите VPS на Simple-Server — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация? Посмотрите все доступные тарифы

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны