С чего начать Первые шаги трек · 15 ступеней
Linux Labs

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

4 мин tcpdump

Захватывает пакеты для диагностики «доходит ли трафик»; без -n резолвит каждый IP в DNS и заметно тормозит.

Шпаргалка

6 команд Версия для печати
  • 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

Обзор

tcpdump захватывает сетевые пакеты — последнее средство, когда непонятно, «доходит ли вообще трафик». Нужен root.

bash
sudo tcpdump -i any -n            # весь трафик, без резолва имён (-n)
sudo tcpdump -i eth0 -nn port 80  # на eth0, порт 80, без резолва имён/портов

-n не резолвить IP, -nn ещё и порты; без них tcpdump тормозит на DNS.

Ключи

10

-n не резолвит IP в имена, -nn дополнительно не резолвит номера портов в названия сервисов — без них tcpdump заметно тормозит на DNS-запросах при каждом новом адресе. По умолчанию пакет обрезается до части заголовков; -s 0 захватывает его целиком, что нужно для просмотра полного payload.

Ключ Что делает Пример
-i IFACE Интерфейс для захвата; any захватывает на всех сразу. sudo tcpdump -i any port 80
-n Не резолвить IP-адреса в имена. sudo tcpdump -ni any
-nn Не резолвить ни адреса, ни номера портов в названия сервисов. sudo tcpdump -nni any port 80
-c N Остановиться после захвата N пакетов. sudo tcpdump -ni any -c 20
-w FILE Писать сырой дамп в файл .pcap вместо вывода на экран (для Wireshark). sudo tcpdump -ni any port 80 -w cap.pcap
-r FILE Читать пакеты из файла .pcap вместо живого захвата. sudo tcpdump -r cap.pcap 'host 10.0.0.5'
-A Показать содержимое пакета как ASCII — удобно для незашифрованного HTTP. sudo tcpdump -ni any -A port 80
-s N Длина захвата пакета в байтах; 0 — захватывать пакет целиком. sudo tcpdump -ni any -s 0 -w cap.pcap
-X Показать содержимое пакета в hex и ASCII одновременно. sudo tcpdump -ni any -X port 80
-e Показать заголовок канального уровня (MAC-адреса). sudo tcpdump -ni any -e

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

Фильтры

Синтаксис BPF: host, net, port, portrange, src/dst, tcp/udp/icmp, объединяй and/or/not:

bash
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 — иначе видишь в основном собственные пакеты.

Неполадки

5

«Доходит ли запрос до сервера?»

На сервере 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.

См. также

  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
  • ip — Управление интерфейсами, адресами и маршрутами (iproute2) — замена ifconfig/route.
  • curl — Запросы HTTP/HTTPS из CLI — отладка API и веб-сервисов, заголовки, методы.
Загрузка…