Битлента
Сетевые команды и утилиты5 мин чтения·

tcpdump: как перехватывать пакеты в своей сети и задавать фильтры

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

Кратко

Команда sudo tcpdump -i интерфейс -nn host адрес and port 443 показывает пакеты выбранного узла и порта, а ключ -w сохраняет захват в файл для Wireshark. Перехватывать можно только свой трафик или в сети с разрешения владельца.

Что делает tcpdump и что важно помнить

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

Предупреждение об этике и законе обязательно. Захватывайте трафик только на собственном устройстве, в своей домашней сети или в сети, где вам это явно разрешили. Перехват чужих данных без согласия недопустим и наказуем. Кроме того, в файлах захвата могут оказаться пароли и личные сведения от нешифрованных протоколов, поэтому храните их аккуратно и удаляйте после анализа.

Шифрованное содержимое, например страницы по HTTPS, вы не прочитаете: видны адреса, порты, размеры, время и служебные поля рукопожатия, но не сами данные. Для диагностики соединения этого обычно достаточно.

Запуск, интерфейс и базовые ключи

Права администратора нужны: sudo tcpdump. Сначала узнайте список интерфейсов командой tcpdump -D или ip addr в Linux и ifconfig в macOS. В Linux слово any означает все интерфейсы сразу; в macOS нужно указывать конкретный, чаще всего en0.

КлючЧто делает
-i интерфейсВыбор интерфейса, например eth0, en0, any
-nНе разрешать адреса в имена
-nnНе разрешать ни адреса, ни имена портов
-c NОстановиться после N пакетов
-w файлЗаписать захват в файл формата pcap
-r файлПрочитать ранее сохранённый файл
-v, -vvБольше подробностей
-AВывод содержимого в ASCII
-XВывод содержимого в шестнадцатеричном виде и ASCII
-eПоказать заголовки канального уровня, включая MAC
-qКраткий вывод

Практический минимум: sudo tcpdump -i eth0 -nn -c 20. Ключи -nn ускоряют вывод и делают его однозначным, потому что обратное разрешение имён отнимает время и создаёт собственные DNS-запросы, которые попадут в захват. Ограничение -c спасёт терминал от бесконечной ленты.

Чтобы окончить захват без -c, нажмите Ctrl и C. Утилита выведет число захваченных пакетов и число отброшенных ядром. Если отброшенных много, компьютер не успевает обрабатывать поток: сузьте фильтр.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Язык фильтров: примеры, которые пригодятся

Фильтр записывается в конце команды и использует синтаксис BPF. Условия можно связывать словами and, or, not и группировать скобками; скобки и одиночные символы лучше заключать в одинарные кавычки, чтобы оболочка не пыталась их разобрать.

  • host 192.168.1.20 — пакеты, где этот адрес либо отправитель, либо получатель.
  • src host 192.168.1.20 и dst host 192.168.1.20 — только исходящие или только входящие.
  • net 192.168.1.0/24 — весь диапазон подсети.
  • port 53 — трафик на порт 53 или с него; tcp port 443 ограничит протоколом TCP.
  • portrange 8000-8100 — диапазон портов.
  • udp, tcp, icmp, arp — фильтрация по протоколу.
  • not port 22 — исключить SSH; это очень полезно, когда вы подключены к серверу по SSH и не хотите видеть собственный сеанс в захвате.
  • 'tcp[tcpflags] & tcp-rst != 0' — только пакеты со сбросом соединения.
  • 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' — только начальные SYN-пакеты без подтверждения.

Пример комбинации: sudo tcpdump -i eth0 -nn 'host 192.168.1.20 and (tcp port 80 or tcp port 443)'. Пример вывода (пример): строка вида «время IP 192.168.1.20.51234 > 203.0.113.10.443: Flags [S], seq ..., length 0». Флаги: S — SYN, S с точкой — SYN и ACK, точка — ACK, P — PSH, F — FIN, R — сброс.

Пошаговые сценарии диагностики

Сценарий первый: проверить DNS. Выполните sudo tcpdump -i any -nn port 53, в другом окне запустите nslookup example.com. Вы увидите запрос и ответ; если ответ не приходит, виновата связь с DNS-сервером. Сценарий второй: убедиться, что пакеты от устройства вообще доходят до компьютера. Запустите захват по адресу устройства и включите на нём нужную функцию.

Сценарий третий: узнать, кто «шумит» в сети. Захват на интерфейсе без фильтра с ограничением -c 200 покажет, какие адреса чаще всего встречаются. Сценарий четвёртый: проверить ICMP: tcpdump icmp вместе с ping на другом устройстве покажет запросы и ответы.

  1. Определите интерфейс и адрес, которые проверяете.
  2. Запустите захват с узким фильтром и ключом -nn.
  3. Воспроизведите проблему в другом окне или на другом устройстве.
  4. Остановите захват и изучите последовательность: есть ли SYN, приходит ли SYN и ACK в ответ, есть ли сбросы R.
  5. Для сложных случаев сохраните файл ключом -w и откройте в Wireshark.

Один SYN без ответа указывает на фильтр или недоступность узла. Ответ, состоящий из сброса, означает закрытый порт. Многократные повторы одних и тех же сегментов говорят о потерях на пути.

Запись в файл и отличия систем

Сохранение: sudo tcpdump -i eth0 -nn -w capture.pcap 'host 192.168.1.20'. Файл в формате pcap открывается в Wireshark или читается обратно командой tcpdump -nn -r capture.pcap. На загруженном канале ограничивайте размер: ключ -C задаёт размер файла в миллионах байт, а -G время ротации в секундах, иначе диск быстро заполнится.

В macOS утилита есть в системе, интерфейс обычно en0, псевдоинтерфейса any нет. В Linux она ставится из пакета tcpdump. В Windows её нет: используйте Wireshark, консольную утилиту tshark или встроенное средство pktmon. Для домашнего пользователя удобнее графическая программа, а tcpdump хорош на серверах без графики, где вы подключены по SSH.

Помните о собственной нагрузке: без фильтра на быстром канале захват потребляет процессор и память. Фильтруйте на уровне захвата, а не после, и работайте короткими сессиями.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
tcpdumpперехват пакетовфильтрыдиагностика

Часто задаваемые вопросы

Читайте также