Определение простыми словами
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-потоки.