tcpdump — захват трафика в Linux, фильтры BPF, примеры | Глоссарий FREEHOSTING

tcpdump

TCP Dump
tcpdump — tcpdump — консольный анализатор сетевых пакетов для Linux и BSD. Захватывает трафик через libpcap, фильтрует по BPF-выражениям и пишет в pcap-файл для разбора в Wireshark.

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

tcpdump — утилита командной строки для захвата и анализа сетевых пакетов. Использует библиотеку libpcap, читает трафик с интерфейса до того, как его разберёт ядро. Принимает BPF-фильтры (Berkeley Packet Filter), которые компилируются в байт-код прямо в ядре — отбор пакетов идёт быстро и без лишнего копирования в userspace.

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

Сравнение с альтернативами

Инструмент Интерфейс Задача
tcpdump CLI Быстрый захват на сервере
Wireshark GUI Глубокий разбор протоколов
tshark CLI Wireshark в консоли, разбор pcap
ngrep CLI Поиск по содержимому пакетов

Кейсы использования

  • Понять, доходят ли вообще пакеты до сервера: tcpdump -i eth0 host 1.2.3.4 — видно ICMP, SYN, RST.
  • Отладка TLS-handshake: захватить трафик на 443 и разобрать в Wireshark, чтобы понять, на каком этапе обрывается соединение.
  • Поиск зависаний MySQL или Redis — видно RST со стороны бэкенда или запросы без ответа.
  • Снифф трафика между виртуалками внутри гипервизора для отладки VLAN и бриджей.
  • Негативный сценарий: захват всего трафика без фильтра на нагруженном сервере мгновенно забивает диск. Всегда указывайте фильтр и ограничение по объёму через -C или -G.

Технические детали

Боевые команды для типичных задач:

apt install tcpdump

# Все пакеты с/на 8.8.8.8 на интерфейсе eth0
tcpdump -i eth0 -n host 8.8.8.8

# TCP SYN на 443 (входящие соединения)
tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-syn != 0 and dst port 443'

# Запись в файл с ротацией каждые 100 МБ
tcpdump -i eth0 -w /var/log/dump.pcap -C 100 -W 5 
  port 80 or port 443

# Захват с лимитом на 1000 пакетов и тихим выводом
tcpdump -i any -c 1000 -nn -q port 53

# Чтение готового pcap
tcpdump -r /var/log/dump.pcap -nn -A | grep Host:

Готовый pcap-файл удобно скачать через scp и открыть в Wireshark. Для постоянной отладки в продакшене используйте iptables -j NFLOG + ulogd, чтобы не держать tcpdump запущенным.

Частые вопросы

Нужен ли root для запуска tcpdump?

Да, по умолчанию. Альтернатива — выдать бинарнику capability CAP_NET_RAW и CAP_NET_ADMIN через setcap, тогда обычный пользователь сможет запускать без sudo.

Как открыть pcap в Wireshark на Mac?

Скачать файл через scp, перетащить в окно Wireshark. Wireshark прочитает любой pcap, созданный tcpdump.

Чем tcpdump отличается от Wireshark?

tcpdump — CLI для захвата на удалённом сервере. Wireshark — GUI для глубокого анализа: видит сотни протоколов, рисует графики, восстанавливает HTTP-сессии и TCP-потоки.