Гид по технологиям

Tcpdump: руководство по захвату и анализу сетевых пакетов в Linux

8 min read Сеть Обновлено 31 Dec 2025
Tcpdump в Linux — руководство по захвату пакетов
Tcpdump в Linux — руководство по захвату пакетов

Иллюстрация: захват сетевых пакетов с помощью tcpdump

О чём статья

Эта статья помогает понять, как установить и использовать tcpdump в Linux: как выбрать интерфейс, фильтровать пакеты по IP/портам/протоколам, просматривать полезную нагрузку в ASCII/hex, сохранять захваты в .pcap для последующего анализа и применять практики безопасности при захвате трафика.

Важно: для большинства операций tcpdump требует прав суперпользователя (root) или соответствующих capabilities.

Что такое tcpdump

Tcpdump — это утилита командной строки для захвата сетевого трафика и вывода информации о пакетах. Она читает пакеты с сетевого интерфейса (или из файла) и позволяет фильтровать их с помощью выражений BPF (Berkeley Packet Filter). Простое определение: инструмент для «прослушивания» и записи сетевых пакетов в реальном времени.

Коротко о терминах:

  • Пакет — единица сетевой передачи данных.
  • BPF — синтаксис фильтрации, используемый tcpdump и libpcap.
  • .pcap — формат файла для сохранения захваченных пакетов.

Установка tcpdump на Linux

Во многих дистрибутивах tcpdump предустановлен. Проверьте наличие команды:

which tcpdump

Если команда возвращает путь (например /usr/sbin/tcpdump или /usr/bin/tcpdump), то утилита установлена. Если нет — установите через пакетный менеджер.

Примеры установки:

# Debian / Ubuntu
sudo apt-get update && sudo apt-get install tcpdump -y

# CentOS / RHEL (yum)
sudo yum install tcpdump -y

# Fedora (dnf)
sudo dnf install tcpdump -y

# Arch Linux
sudo pacman -Syu tcpdump

Примечание: tcpdump зависит от libpcap и часто требует libcap или capability для работы без полного права root (setcap). Чтобы запускать tcpdump без sudo, можно дать бинарнику право на захват пакетов:

sudo setcap cap_net_raw,cap_net_admin=eip $(which tcpdump)

Важно: назначение capability влияет на безопасность хоста — применять осторожно.

Базовые примеры: как захватывать пакеты

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

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

tcpdump -D
# или
tcpdump --list-interfaces

Вывод — пронумерованный список интерфейсов (например eth0, enp3s0, wlp2s0, lo и т. д.).

Список сетевых интерфейсов, доступных для захвата

Чтобы захватывать на любом активном интерфейсе используйте интерфейс any:

sudo tcpdump -i any

Пример вывода tcpdump в терминале

Ограничение числа пакетов

По умолчанию tcpdump печатает пакеты до прерывания. Ограничьте число пакетов через -c:

sudo tcpdump -i any -c 10

Примеры фильтров

Фильтруйте по протоколу, порту, хосту, направлению или по сложным выражениям:

# Только TCP-пакеты
sudo tcpdump -i any -c 5 tcp

# Пакеты с/на порт 80
sudo tcpdump -i any -c 5 port 80

# Пакеты от конкретного IP
sudo tcpdump -i any -c 5 host 192.0.2.10

# Только исходящие пакеты от хоста
sudo tcpdump -i any -c 5 src 192.0.2.10

# Сочетание выражений
sudo tcpdump -i any -c 10 src 192.0.2.10 and port 80

# Группировка сложных выражений
sudo tcpdump -i any -c 10 '(src 192.0.2.10 or src 198.51.100.20) and (port 45 or port 80)'

Синтаксис использует логические операторы and, or, not и круглые скобки для группировки.

Формат вывода tcpdump — как читать строку

Каждая строка вывода (начиная с третьей) обычно соответствует одному пакету. Пример строки:

17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33

Состав полей (упрощённый порядок):

  • Метка времени (timestamp) — когда пакет был отправлен/получен.
  • Имя интерфейса — через какой интерфейс прошёл пакет.
  • Направление — In/Out (зависит от версии/системы).
  • Протокол — IP или IP6.
  • Адреса отправителя и получателя с номерами портов или именами хостов.
  • TCP/UDP-флаги (например S для SYN, F для FIN, P для PUSH, R для RST, . для ACK).
  • Номер последовательности (seq) и подтверждения (ack).
  • Размер окна (win).
  • Опции TCP (MSS, TS и т. п.).
  • Длина пакета (length).

Таблица флагов TCP (для быстрого справочника):

ФлагСимволОписание
SYNSУстановка соединения
FINFЗавершение соединения
PUSHPДанные отправляются немедленно
RSTRСброс соединения
ACK.Подтверждение

Комбинации флагов показываются вместе, например [F.] — FIN с ACK.

Просмотр содержимого пакета

Чтобы увидеть полезную нагрузку в ASCII или в hex:

# ASCII
sudo tcpdump -i any -c 1 -A

# Hex
sudo tcpdump -i any -c 1 -x

Флаг -A полезен при отладке текстовых протоколов (HTTP, SMTP), а -x — если нужно увидеть точную структуру байтов.

Сохранение захвата в файл и чтение .pcap

Записывайте захват в файл .pcap для анализа в Wireshark или для передачи коллегам:

sudo tcpdump -i any -c 100 -w capture.pcap

# читать pcap локально
tcpdump -r capture.pcap

# читать и фильтровать во время воспроизведения
tcpdump -r capture.pcap port 80

Файл .pcap — стандартный формат, совместимый с большинством анализаторов трафика.

Практические советы и лучшие практики

  • Всегда ограничивайте размер/время захвата при работе на продуктивных системах, чтобы не заполнить диск.
  • По возможности фильтруйте по IP/порту/протоколу до записи в файл — это экономит место.
  • Если нужно детально изучить поток TCP, используйте опции -vvv для более подробного вывода и -n чтобы отключить DNS-резолвинг:
sudo tcpdump -i eth0 -n -vvv tcp and port 443
  • Чтобы сохранить лишь заголовки и не тянуть полезную нагрузку, используйте -s с размером снэпшота (snapshot length). По умолчанию -s 65535 снимает весь пакет:
sudo tcpdump -i eth0 -s 96 -w headers_only.pcap
  • Для автоматических захватов используйте cron + ротацию логов или systemd timers, но контролируйте сложность фильтрации и размер файлов.

Когда tcpdump не подойдёт (контрпримеры)

  • HTTPS/шифрованные протоколы: tcpdump покажет только зашифрованные пакеты, а не расшифрованное содержимое. Для анализа HTTPS нужен доступ к ключам или прокси расшифровки.
  • Виртуальные сетевые среды/облачные провайдеры: на VPC иногда отсутствует доступ к «физическому» трафику между инстансами — tcpdump будет видеть только локальный трафик интерфейса виртуальной машины.
  • Высокоскоростные сети с сотнями тысяч пакетов в секунду: захват «в реальном времени» может пропускать пакеты; нужны специализированные аппаратные решения или зеркалирование портов (SPAN).

Альтернативные инструменты и когда их использовать

  • Wireshark — GUI для глубокого анализа и визуализации, удобен при локальном анализе или на рабочей станции.
  • tshark — консольная версия Wireshark, подходит для сценариев автоматизации и скриптов.
  • ngrep — полезен для простого поиска текстовых шаблонов в пакетах (ngrep “password”).
  • ss / netstat — показывают состояние сокетов и соединений, без захвата пакетов.
  • iptraf, iftop — инструмент для мониторинга трафика в режиме реального времени (по интерфейсу/портам).

Выбор зависит от цели: для простого захвата и фильтрации — tcpdump; для глубокого анализа — Wireshark/tshark; для поиска паттернов — ngrep.

Ментальные модели и эвристики при диагностике сети

  • Разделяйте проблему: уровень канала (L2), сеть (L3), транспорт (L4), приложение (L7). Tcpdump хорошо видит L2-L4, но не интерпретирует бизнес-логи.
  • «От простого к сложному»: сначала проверьте доступность (ping, ARP), затем состояние сокетов (ss), затем захват tcpdump для пошаговой диагностики.
  • «Сужайте фильтр» — захват большого объёма данных затрудняет анализ. Начинайте с минимального фильтра и расширяйте при необходимости.

Пошаговый SOP для типичного разбирательства (Playbook)

  1. Идентифицируйте проблему: медленная загрузка, недоступность сервиса, ошибки соединения.
  2. Соберите системные данные: uptime, dmesg, проверка дискового пространства, вывод ss/iptables.
  3. Решите, на каком хосте захватывать трафик (сервер, шлюз, роутер).
  4. Определите интерфейс: tcpdump -D.
  5. Запустите предварительный захват с фильтром и ограничением по времени или по числу пакетов:
sudo tcpdump -i eth0 -n -c 200 host 203.0.113.10 and port 443 -w /tmp/capture.pcap
  1. Просмотрите вывод в ASCII/hex если нужно моментально:
sudo tcpdump -r /tmp/capture.pcap -A | less
  1. Перенесите pcap в защищённую среду для анализа в Wireshark, если требуется визуализация.
  2. При передаче pcap коллегам обезопасьте персональные данные (анонимизация IP, удаление payload при необходимости).
  3. После анализа документируйте вывод и предпринятые действия.

Критерии приёмки

  • Захват покрывает время инцидента.
  • В pcap присутствуют пакеты с/на интересующие IP/порты.
  • Файлы не превышают допустимого размера и хранятся в защищённом месте.

Ролевые чек-листы

Системный администратор:

  • Убедиться в наличии свободного места на диске.
  • Запустить tcpdump с ограничением по времени/размеру.
  • Сохранять pcap в /var/tmp или в каталоге с ограниченным доступом.

Сетевой инженер:

  • Проверить зеркалирование портов (SPAN) на коммутаторе при необходимости.
  • Запустить захват на граничных интерфейсах и на интерфейсах серверов.
  • Сопоставить вывод tcpdump с данными маршрутизации и ACL.

Аналитик безопасности:

  • Исключить персональные данные из pcap перед передачей.
  • Искать аномалии в заголовках TCP/UDP и в нестандартных портовых соединениях.
  • Сопоставлять потоки с логами IDS/IPS.

Инструменты для автоматизации и примеры команд (шпаргалка)

Короткая подборка полезных команд:

# Список интерфейсов
tcpdump -D

# Захват 100 пакетов на интерфейсе eth0, без резолвинга имён
sudo tcpdump -i eth0 -n -c 100

# Захват трафика между двух хостов
sudo tcpdump -i any host 192.0.2.10 and host 198.51.100.20 -w comms.pcap

# Захват только заголовков (96 байт)
sudo tcpdump -i eth0 -s 96 -w headers.pcap

# Показать пакеты в ASCII (удобно для HTTP)
sudo tcpdump -i any -A 'tcp port 80'

# Развернутый вывод и выключенный DNS
sudo tcpdump -i eth0 -nn -vvv tcp

Безопасность и приватность

  • Захват трафика может содержать чувствительные данные (логины, персональные данные). Храните pcap в зашифрованном виде и давайте доступ только тем, кому это необходимо.
  • При юридических или GDPR-ограничениях проконсультируйтесь с командой безопасности/юристами перед передачей pcap третьим лицам.
  • Для защиты можно обрезать payload или записать только заголовки.

Технические ограничения и советы по производительности

  • Для длительных/объёмных захватов используйте ротацию файлов: запускайте tcpdump с опцией -W и -C или управляйте обходом через лог-менеджер.
  • На высоких скоростях сети аппаратное зеркалирование (SPAN) и специализированные capture-accelerators дают лучшие результаты.

Решение инцидента: краткий runbook

  1. Поймайте момент инцидента: запустите захват с -c или установите временную метку.
  2. Сохраните pcap и заархивируйте его с контрольной суммой.
  3. Проведите локальный первичный анализ (grep, tcpdump -r с фильтрами).
  4. При необходимости импортируйте в Wireshark для анализа потоков (Follow TCP Stream).
  5. Сформируйте отчёт с шагами и рекомендациями.

Простые тест-кейсы и критерии приёмки

  • Тест: Захватить 10 ICMP-пакетов между двумя хостами. Критерий: pcap содержит 10 ICMP пакетов с ожидаемыми адресами.
  • Тест: Фильтр по порту 80 вернёт только TCP-пакеты с port 80. Критерий: в выводе/pcap отсутствуют пакеты с другими портами.

Короткий глоссарий

  • tcpdump — утилита захвата трафика.
  • BPF — язык фильтрации пакетов.
  • pcap — формат файла захвата пакетов.
  • snaplen (-s) — длина снимка пакета.

Факто-бокс: что помнить

  • tcpdump работает на L2–L4 уровнях OSI.
  • Для чтения затребованных сетевых потоков часто нужен root.
  • .pcap совместим с Wireshark/tshark.
  • Используйте фильтры, чтобы сохранить ресурс и упростить анализ.

Диагностическое дерево для выбора стратегии захвата

flowchart TD
  A[Есть доступ к хосту?] -->|Да| B[Нужен локальный или удалённый захват?]
  A -->|Нет| Z[Запросить доступ / собирать логи на шлюзе]
  B -->|Локальный| C[Использовать tcpdump на хосте]
  B -->|Удалённый| D[Настроить удалённый capture или SPAN]
  C --> E{Требуется глубокий анализ?}
  E -->|Да| F[Сохранить .pcap и открыть в Wireshark]
  E -->|Нет| G[Просмотреть -A/-x в терминале]
  D --> H[Собрать pcap централизованно и анализировать]
  Z --> I[Использовать сетевые агенты/IDS]

Заключение

Tcpdump — быстрый и мощный инструмент для системных администраторов, сетевых инженеров и аналитиков безопасности. Он удобен при первичной диагностике сетевых проблем и при сборе данных для последующего анализа в специализированных инструментах. Используйте фильтрацию, ограничение объёма и практики безопасности при работе с pcap, чтобы минимизировать риски и упростить отладку.

Краткие рекомендации:

  • Всегда ограничивайте захват по объёму или времени.
  • Фильтруйте трафик до записи, если это возможно.
  • Защищайте pcap-файлы и обезличивайте данные перед передачей.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство