Вики / Сеть
tcpdump (захват трафика)
Снифферинг пакетов для диагностики — фильтры по хосту, порту, интерфейсу.
tcpdump захватывает сетевые пакеты — последнее средство, когда непонятно,
«доходит ли вообще трафик». Нужен root.
sudo tcpdump -i any -n # весь трафик, без резолва имён (-n)
sudo tcpdump -i eth0 -nn port 80 # на eth0, порт 80, без резолва имён/портов
-n не резолвить IP, -nn ещё и порты; без них tcpdump тормозит на DNS.
| Ключ | Значение |
|---|---|
-i IFACE |
интерфейс (any — все) |
-n / -nn |
не резолвить имена / имена и порты |
-c N |
остановиться после N пакетов |
-w FILE |
писать сырой дамп в .pcap (для Wireshark) |
-r FILE |
читать из .pcap |
-v / -vv |
подробнее (TTL, флаги, опции) |
-A / -X |
показать payload как ASCII / hex+ASCII |
-s 0 |
захватывать пакет целиком (по умолчанию обрезается) |
-e |
показать L2 (MAC-адреса) |
-Q in/out |
только входящий/исходящий |
Синтаксис BPF: host, net, port, portrange, src/dst, tcp/udp/icmp,
объединяй and/or/not:
sudo tcpdump -ni any host 10.0.0.5 # трафик к/от хоста
sudo tcpdump -ni any net 10.0.0.0/24 # к/от подсети
sudo tcpdump -ni any port 443 # по порту
sudo tcpdump -ni any portrange 8000-8100 # диапазон портов
sudo tcpdump -ni any src 10.0.0.5 and port 22 # комбинация
sudo tcpdump -ni any 'tcp and not port 22' # весь TCP, кроме своей ssh-сессии
sudo tcpdump -ni any icmp # пинги
sudo tcpdump -ni any 'tcp[tcpflags] & tcp-syn != 0' # только SYN (попытки коннекта)
sudo tcpdump -ni any -c 20 # 20 пакетов и стоп
sudo tcpdump -ni any -A port 80 # увидеть HTTP-текст (payload)
sudo tcpdump -ni any port 80 -w cap.pcap # писать в файл
sudo tcpdump -r cap.pcap 'host 10.0.0.5' # читать из файла с фильтром
Полезно при ssh-сессии исключать свой же трафик:
and not port 22— иначе видишь в основном собственные пакеты.
«Доходит ли запрос до сервера?»
На сервере sudo tcpdump -ni any port 80, сделай запрос с клиента. Видишь пакеты —
трафик доходит (проблема в приложении/локальном файрволе); тишина — не доходит
(маршрут/файрвол/не та сеть/не тот интерфейс).
Видно SYN, но нет SYN-ACK
Пакеты приходят, но сервер не отвечает: служба не слушает (ss -tlnp) или
локальный файрвол дропает (см. firewall).
Виден SYN-ACK, но соединение не встаёт
Асимметричный маршрут или файрвол на обратном пути/у клиента. Снимай дамп с обеих сторон одновременно.
Слишком много вывода
Сузь фильтром (host/port), ограничь -c N, исключи свою сессию (not port 22),
пиши в .pcap и разбирай в Wireshark.
Нет прав / нет интерфейса
tcpdump требует root (доступ к сырым сокетам). Список интерфейсов — sudo tcpdump -D
или ip -br a.
sudo tcpdump -ni any port 80 # порт 80, без резолва
sudo tcpdump -ni any host IP # по хосту
sudo tcpdump -ni any 'tcp and not port 22' # TCP без своей ssh
sudo tcpdump -ni any -c 20 # 20 пакетов и стоп
sudo tcpdump -ni any -A port 80 # payload (HTTP-текст)
sudo tcpdump -ni any port 80 -w cap.pcap # в файл → Wireshark
См. также
- ip (адреса и маршруты) — Сеть
- ss (сокеты и порты) — Сеть
- curl (HTTP из консоли) — Сеть