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

tcpdump: захват и анализ сетевого трафика в Linux

8 min read Сеть Обновлено 15 Dec 2025
tcpdump в Linux: захват и анализ трафика
tcpdump в Linux: захват и анализ трафика

Скриншот процесса tcpdump при захвате сетевого трафика в Linux

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

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

Что такое tcpdump (одно предложение)

tcpdump — консольный инструмент для захвата сетевых пакетов с поддержкой выражений BPF (Berkeley Packet Filter) и сохранением в формат pcap для дальнейшего анализа.

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

На большинстве популярных дистрибутивов tcpdump уже установлен. Если система выдаёт “tcpdump: command not found”, установите пакет из официального репозитория.

Debian/Ubuntu:

sudo apt-get update
sudo apt-get install tcpdump

Arch Linux:

sudo pacman -Syu
sudo pacman -S tcpdump

Fedora / CentOS / RHEL (dnf):

sudo dnf install tcpdump

Примечание: при установке может потребоваться библиотека libcap. Если установщик предлагает её установить — подтвердите. Без привилегий или соответствующих capability tcpdump не сможет захватывать пакеты.

Важное: для запуска tcpdump требуются привилегии root или capability CAP_NET_RAW/CAP_NET_ADMIN. Лучше выдавать только необходимые права через setcap, а не запускать всё как root.

Быстрый старт: базовый захват

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

sudo tcpdump

Остановите захват сочетанием Ctrl+C. Для ограничения числа пакетов используйте -c:

sudo tcpdump -c 5

Флаги, которые стоит знать сразу:

  • -c <число> — захватить указанное число пакетов и выйти
  • -i <интерфейс> — слушать конкретный интерфейс
  • -w <файл.pcap> — записать захват в файл
  • -r <файл.pcap> — прочитать pcap-файл
  • -v, -vv, -vvv — уровень подробности вывода
  • -s — длина фрагмента пакета для записи (по умолчанию 262144 на современных версиях)

Список доступных сетевых интерфейсов, выведенных tcpdump

Просмотр доступных интерфейсов

Список интерфейсов, которые может слушать tcpdump:

sudo tcpdump -D

Альтернативно:

sudo tcpdump --list-interfaces

Выберите интерфейс явно:

sudo tcpdump -i eth0
# или
sudo tcpdump --interface eth0

Если не указывать -i, tcpdump слушает первый доступный интерфейс или все доступные в зависимости от платформы.

Фильтры tcpdump: как не утонуть в пакетах

tcpdump использует выражения BPF — это компактный язык фильтрации. Выражение обычно состоит из ключевого слова (host, port, src, dst, net, proto) и значения, а логические операторы and, or, not и скобки позволяют комбинировать условия.

Общие формы:

  • host 192.168.1.10 — пакеты от или к хосту
  • src host 192.168.1.10 — пакеты исходящие от хоста
  • dst host 192.168.1.10 — пакеты, направленные на хост
  • port 80 — любые пакеты с портом 80 (src или dst)
  • src port 12345 или dst port 443
  • net 10.0.0.0/8 — сеть по маске
  • tcp, udp, icmp — по протоколу
  • portrange 8000-8100 — диапазон портов

Примеры:

Захват ICMP (ping):

sudo tcpdump -c 5 icmp

Пакеты, связанные с конкретным хостом:

sudo tcpdump -c 10 host 192.168.2.1

Трафик на порт 80 (HTTP):

sudo tcpdump -c 20 'port 80'

Комбинация условий (хост и порт):

sudo tcpdump -c 50 'host 192.168.2.1 and port 443'

Используйте кавычки в оболочке, чтобы гарантировать корректную интерпретацию выражения.

Графическое представление применения фильтров tcpdump

Более сложные выражения BPF

  • Исключить адрес: not host 10.0.0.5
  • Источник — сеть: src net 192.168.0.0/24
  • Только TCP-пакеты с портом назначения 22:
sudo tcpdump 'tcp and dst port 22'
  • HTTP трафик от конкретного клиента к конкретному серверу:
sudo tcpdump 'tcp and src host 10.0.0.23 and dst host 93.184.216.34 and dst port 80'

Советы:

  • Группируйте условия в скобки при комбинировании and/or
  • Сначала протестируйте выражение с -c 5
  • Используйте короткие и специфичные фильтры, чтобы снизить объём записей

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

По умолчанию tcpdump показывает заголовки пакетов. Для детального анализа можно вывести полезную нагрузку в hex и ASCII.

Hex dump (-x):

sudo tcpdump -c 5 -x

ASCII (-A):

sudo tcpdump -A -c 10

Hex + link-level (-X):

sudo tcpdump -X -c 5

Флаг -s определяет, сколько байт каждого пакета сохранять/показывать; для полного пакета используйте -s 0:

sudo tcpdump -s 0 -A -c 5

Вывод содержимого пакета в hex и ASCII с флагами -x и -A

Сохранение захвата в файл и ротация файлов

Запись в pcap-файл:

sudo tcpdump -i eth0 -w capture.pcap

Чтение pcap-файла:

sudo tcpdump -r capture.pcap

Ротация по размеру (-C) и ограничение числа файлов (-W):

# ротация: каждый файл до 100 МБ, максимум 10 файлов
sudo tcpdump -i eth0 -w capture-%Y%m%d%H%M%S.pcap -C 100 -W 10

Примечание: формат строки в имени файла поддерживает shell-розширения; для гарантии используйте скрипт-обёртку, который добавит timestamp.

Совместимость: Файлы .pcap можно открыть в Wireshark, tshark, и других анализаторах.

Совместная работа с Wireshark

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

Пример: собрать трафик по проблемному IP и открыть в Wireshark:

sudo tcpdump -i eth0 'host 192.168.2.10' -w /tmp/problem.pcap
# затем на рабочей станции
wireshark /tmp/problem.pcap

Или передать через stdout в tshark для быстрой фильтрации и подсчётов:

sudo tcpdump -i eth0 -w - 'port 443' | tshark -r - -Y 'tls.handshake'

Уровни подробности и таймштампы

  • -v, -vv, -vvv — увеличивают подробность вывода (информация о TCP options, HTTP, рекордные подробности)
  • -ttt, -tttt — форматы временных отметок, полезно для визуализации задержек
  • -n — не разрешать имена хостов (IP-адреса ускоряют вывод)
  • -nn — не разрешать имён и не переводить номера портов в сервисы

Пример с таймштампами и без DNS:

sudo tcpdump -i eth0 -nn -tttt 'tcp and port 5683' -c 100

Частые ошибки и способы их обхода

  • “tcpdump: command not found” — установите пакет tcpdump
  • “permission denied” — нужен root или capability; выдайте setcap или запускать через sudo

Установка capability вместо запуска от root:

sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
# затем запуск без sudo
tcpdump -D
  • Неполные пакеты (snaplen слишком мал): используйте -s 0
  • Большие файлы pcap — применяйте ротацию и сжатие (gzip) или фильтруйте до записи

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

Important: захват трафика может содержать конфиденциальные данные (пароли, токены, персональные данные). Перед записью/передачей pcap-файлов:

  • Оцените необходимость: не захватывайте больше, чем нужно
  • Используйте фильтры, чтобы ограничить объём и чувствительные поля
  • Храните pcap в защищённом месте и удаляйте по окончании расследования
  • При передаче используйте шифрование (scp/sftp) или безопасные репозитории
  • Удалите или анонимизируйте данные до публикации (обрезка payload, замена IP)

Юридическая заметка: захват трафика в чужих сетях без разрешения может нарушать политику компании или закон.

Режимы использования по ролям (чек-листы)

Администратор сети:

  • Проверить доступность интерфейсов: sudo tcpdump -D
  • Уточнить IP/порт проблемного сервиса
  • Запустить ограниченный захват: sudo tcpdump -i eth0 ‘host X and port Y’ -w /tmp/issue.pcap -c 100
  • Проанализировать в Wireshark, собрать метрики

Разработчик приложения:

  • Повторить шаги воспроизведения ошибки
  • Собирать трафик только между клиентом и тестовым сервером
  • Использовать -A для чтения текста и отладки HTTP/JSON

Инцидентный ответ/безопасность:

  • Захватать трафик на подозреваемой машине в защищённую область
  • Использовать ротацию и немедленную загрузку на защищённый сервер
  • Не публиковать pcap без маскировки

Шаблон простого SOP при расследовании сетевой проблемы

  1. Зафиксировать время и контекст (время UTC, hostname, процесс-воспроизведение).
  2. Снять краткий захват для проверки гипотезы:
sudo tcpdump -i eth0 -nn -c 200 'host 192.168.2.10 and port 443' -w /tmp/quick-check.pcap
  1. Если подтверждено — собрать расширенный захват с ротацией:
sudo tcpdump -i eth0 -nn 'host 192.168.2.10' -w /var/log/tcpdump/incident-%s.pcap -C 200 -W 5
  1. Зашифровать и передать pcap-инженерам для анализа.
  2. По завершении удалить захваты с промежуточных хостов.

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

  • pcap содержит пакеты в период воспроизведения
  • в журнале зафиксирован соответствующий timestamp
  • используются минимально необходимые фильтры

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

  • Wireshark / tshark — GUI и CLI анализ .pcap с мощными декодерами
  • ngrep — удобен для «grep по сети», простые текстовые шаблоны
  • ss / netstat — проверка открытых сокетов на хосте (без захвата пакетов)
  • iperf — тест пропускной способности
  • iptraf — интерактивный мониторинг трафика

Когда tcpdump не подойдёт:

  • Нужен визуальный декодер с удобной расшифровкой протоколов — Wireshark
  • Нужна постоянная агрегация и метрики — использовать мониторинг (Prometheus/OpenTelemetry)

Отладочные примеры и полезные сниппеты

Показывать только первые 100 байт полезной нагрузки и записывать в файл:

sudo tcpdump -i eth0 -s 100 -w short-snap.pcap

Записать только HTTP-запросы и посмотреть в ASCII на лету (требуется фильтр, чтобы не сливаться):

sudo tcpdump -i eth0 -s 0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Подсчитать число пакетов от каждого IP (используя awk):

sudo tcpdump -n -l | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn

Ограничение по времени (захват N секунд) используя timeout:

sudo timeout 30 tcpdump -i eth0 -w /tmp/30s.pcap

Проверки и тесты приёмки (кратко)

  • Запустите захват и воспроизведите проблему — в pcap должны быть пакеты с ожидаемыми src/dst/port
  • Убедитесь, что snaplen достаточен (используйте -s 0 при неуверенности)
  • Проверьте, что файлы pcap корректно открываются в Wireshark

Руководство по безопасности и жёсткой настройке

  • Не давайте sudo всем пользователям; выдавайте setcap только тем утилитам, которые действительно требуют сетевого захвата
  • Логируйте запуски tcpdump и кто и когда выполнял запись
  • Ограничьте доступ к директориям с pcap-файлами

Совместимость и миграция

tcpdump зависит от libpcap. При переносе между системами проверяйте версию libpcap, так как старые версии могут неправильно декодировать новые протоколы. Обычно pcap-файлы совместимы между tcpdump и Wireshark, но поведение при специфичных link-layer типах может отличаться.

Примеры реальных сценариев (когда tcpdump помогает)

  • Диагностика проблем с TLS: увидеть TCP handshake и SNI (если не зашифровано)
  • Поиск дублирующих пакетов и retransmits с помощью -vvv
  • Проверка DNS: быстрые запросы/ответы и временные метрики

Частые ошибки при анализе и как их избегать

  • Считать, что всё видно по заголовкам — иногда полезная нагрузка шифруется
  • Захватывать на неправильном интерфейсе — всегда проверяйте -D
  • Переоценивать объём данных — используйте фильтры и ротацию

Пример фильтрации трафика по порту и IP с помощью tcpdump

FAQ

Q: Нужно ли всегда запускать tcpdump от root?

A: Нет. Можно дать бинарю tcpdump capability (cap_net_raw,cap_net_admin) через setcap, чтобы запускать его не от root.

Q: Что лучше для длительного мониторинга — tcpdump или специализированный пакетный коллектор?

A: Для длительного мониторинга лучше специализированные системы (flow collectors, IDS/IPS), tcpdump полезен для точечных расследований.

Q: Можно ли читать pcap прямо на сервере без скачивания?

A: Да, с помощью tshark или tcpdump -r; но безопаснее перенести зашифрованно на аналитический узел.

Запись и последующий анализ pcap-файла в Wireshark

Заключение

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

Ключевые шаги на практике:

  • Установите tcpdump и при необходимости выдайте capability через setcap
  • Определите интерфейс и сформулируйте точный BPF-фильтр
  • Сначала делайте короткие тестовые захваты (-c), затем собирайте большие pcap с ротацией
  • Анализируйте pcap в Wireshark/tshark и убирайте чувствительные данные перед распространением

Дополнительные ресурсы: man tcpdump, документация libpcap и статьи по BPF-выражениям.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

CSS vertical-align — полное руководство
CSS

CSS vertical-align — полное руководство

Слайдер в стиле Netflix — CSS и JS
Frontend

Слайдер в стиле Netflix — CSS и JS

Исправление System.Xml.ni.dll в Windows
Windows

Исправление System.Xml.ni.dll в Windows

AquaSnap — расширенное управление окнами в Windows
Windows

AquaSnap — расширенное управление окнами в Windows

Как проверить, взломаны ли ваши аккаунты
Кибербезопасность

Как проверить, взломаны ли ваши аккаунты

Как изменить пароль Google и Gmail
Безопасность

Как изменить пароль Google и Gmail