Захват пакетов без графического интерфейса в терминале Linux и Windows

На этой неделе автор XDA привел аргументы в пользу пропуска Wireshark на Windows 11 и начала работы с pktmon, встроенным монитором пакетов. Это соответствует более крупной реальности, с которой сталкиваются большинство операторов: компьютер, который нам нужно отслеживать, редко совпадает с тем, на котором мы сидим. Это может быть контейнер Docker, неуправляемый VPS, Raspberry Pi в шкафу или маршрутизатор OPNsense с открытым только SSH. В этом суть проблемы захвата без графического интерфейса, и графический интерфейс Wireshark — не решение. Нам нужен CLI, который работает через SSH, записывает вращающийся pcap без присмотра и читает BPF фильтры так же, как это делает механизм захвата Wireshark. Мы протестировали семь инструментов, которые делают именно это, на хостах Windows и Linux, и ранжировали их по эффективности.

На что обратить внимание при выборе инструмента захвата без графического интерфейса

Удаленный захват имеет другие ограничения, чем захват на рабочем столе. Шесть вещей имеют значение:

Вот контрольный список. Теперь инструменты.

Быстрое сравнение

ИнструментЛучше всего подходит дляПлатформыБесплатный планНачальная цена/месяцОценка
TSharkПолные диссекторы Wireshark в командной строкеWindows, macOS, LinuxДаБесплатно5/5
tcpdumpВездесущие захваты без графического интерфейса на Linux и BSDLinux, macOS, BSDДаБесплатно5/5
pktmonЗахваты Windows без установки чего-либоWindows 10, 11, Server 2019+ДаБесплатно4/5
tcpflowВосстановление потоков TCP в файлыLinux, macOSДаБесплатно4/5
ngrepСопоставление шаблонов в стиле grep по проводуLinux, macOS, WindowsДаБесплатно4/5
ZeekПревращение пакетов в доступные для поиска журналыLinux, macOS, BSDДаБесплатно4.5/5
TermsharkПользовательский интерфейс Wireshark внутри сеанса SSHLinux, macOS, Windows, BSDДаБесплатно4/5

Инструменты

1. TShark, для полных диссекторов Wireshark в командной строке

TShark поставляется с Wireshark и запускает тот же механизм диссектора, минус графический интерфейс. Каждый протокол, который декодирует Wireshark, TShark декодирует на stdout, и каждый фильтр отображения, известный из Wireshark, работает дословно (-Y "http.request.method == POST"). Укажите интерфейс с -i eth0, добавьте -w capture.pcap для записи, добавьте -b duration:600 -b files:24 для вращения каждый час в течение полного дня, и у нас есть безнадзорный захват и анализ в одном двоичном файле.

Где это не так хорошо: на Windows требуется полная установка Wireshark для подбора Npcap; на урезанных образах Linux это подтягивает библиотеки диссектора, которые не маленькие. Живое расшифрование TLS по-прежнему требует файла keylog, как и графический интерфейс.

Цена: Бесплатно, с открытым исходным кодом, GPLv2.

Платформы: Windows, macOS, большинство дистрибутивов Linux, BSD.

Загрузка: Фонд Wireshark

Итоговая строка: по умолчанию, когда нам нужен мозг Wireshark без его окна.

2. tcpdump, для захватов без графического интерфейса на Linux и BSD

tcpdump — это инструмент, который уже есть на каждом хосте Unix или он находится в одном пакете. tcpdump -i eth0 -w /var/log/capture.pcap -G 3600 -C 200 'tcp port 443' записывает в вращающийся pcap, который мы можем скачать позже и открыть в Wireshark, TShark или любом из приведенных ниже инструментов. Синтаксис его BPF фильтра полностью совпадает с фильтрами захвата Wireshark, а двоичный файл весит менее 2 МБ на большинстве дистрибутивов.

Где это не так хорошо: нет фильтров отображения, декодирование протокола только встроенный режим -vvv. На macOS Big Sur и позже некоторые интерфейсы заблокированы без дополнительных разрешений.

Цена: Бесплатно, с открытым исходным кодом, 3-предложение BSD.

Платформы: Linux, macOS, FreeBSD, OpenBSD, NetBSD.

Загрузка: Группа Tcpdump

Итоговая строка: рефлекторный ответ на любом компьютере Unix, работающем без графического интерфейса.

3. pktmon, для захватов Windows без установки чего-либо

pktmon — это Packet Monitor, поставляемый Microsoft с Windows 10, Windows 11 и Windows Server 2019 и позже. pktmon start --capture --pkt-type all --file-size 200 записывает в файл ETL, который мы преобразуем с помощью pktmon pcapng (или на более старых версиях pktmon etl2txt) и открываем в Wireshark или TShark в другом месте. Для Server Core-бокса или усиленного ноутбука, где установка снифера требует замену заявки, pktmon выполняет захват с помощью инструментов, уже находящихся на диске.

Где это не так хорошо: CLI является многословным, его синтаксис фильтра использует идентификаторы компонентов, а не BPF, и шаг ETL-to-pcap — это дополнительный ход, который привязывает нас к машине Windows для преобразования.

Цена: Бесплатно, поставляется с Windows.

Платформы: Windows 10, Windows 11, Windows Server 2019+.

Загрузка: Microsoft Learn

Итоговая строка: ответ, когда хост — это Windows и изменение инвентаризации программного обеспечения невозможно.

4. tcpflow, для восстановления потоков TCP в файлы

tcpflow захватывает активный трафик (или читает pcap) и записывает каждый восстановленный поток TCP в собственный файл, один для каждого направления. Это часто то, что нам действительно нужно, когда вопрос звучит как “что отправил этот клиент этому серверу” и просмотр пакетов в Wireshark — неправильная высота. Он поставляется в Debian, Ubuntu, Fedora и Homebrew, а его язык фильтрации — это чистый BPF.

Где это не так хорошо: UDP — гражданин второго класса; TLS и другие зашифрованные потоки выгружают шифртекст так же, как tcpdump. Восстановленные файлы также быстро растут при длительных захватах.

Цена: Бесплатно, с открытым исходным кодом, GPLv3.

Платформы: Linux, macOS.

Загрузка: Simson Garfinkel на GitHub

Итоговая строка: выбор, когда результат — “тело HTTP”, а не “трассировка пакетов”.

5. ngrep, для сопоставления шаблонов в стиле grep по проводу

ngrep приносит привычный POSIX-стиль шаблон в активный трафик и в файлы pcap. ngrep -q -W byline -d eth0 'GET|POST' 'tcp port 80' выводит только пакеты, полезная нагрузка которых совпадает с регулярным выражением, со сторону BPF фильтра, сужающей интерфейс. Для быстрых вопросов вроде “отправляет ли клиент неправильный заголовок Host” или “содержит ли ответ эту строку ошибки”, ngrep лучше, чем гимнастика фильтра отображения.

Где это не так хорошо: оно не понимает TLS или HTTP/2 фрейминг, поэтому все шифрованное возвращается как шум. Его цикл выпуска замедлился, и хотя большинство дистрибутивов все еще упаковывают его, некоторые больше нет.

Цена: Бесплатно, с открытым исходным кодом, пересмотренный BSD.

Платформы: Linux, macOS, Windows через WSL.

Загрузка: ngrep на GitHub

Итоговая строка: тот, к которому нужно обратиться, когда наш первый инстинкт — это grep.

6. Zeek, для превращения пакетов в доступные для поиска журналы

Zeek, ранее Bro, находится между неподготовленным захватом и полной IDS. Вместо pcap он записывает структурированные журналы для каждого протокола (conn.log, dns.log, http.log, ssl.log, x509.log и дюжины других), которые мы можем grep, отправить в Splunk или Loki, или передать в SIEM. На домашней лаборатории или маршрутизаторе с портом зеркала Zeek дает нам недели поведенческих данных в объеме, который pcap не может коснуться.

Где это не так хорошо: это не пятиминутная установка; ожидайте этап компиляции или пакет дистрибутива плюс легкий пасс конфигурации. Кривая обучения реальна, и стоимость проявляется на второй день, а не на нулевой день.

Цена: Бесплатно, с открытым исходным кодом, пересмотренный BSD.

Платформы: Linux, macOS, FreeBSD.

Загрузка: Проект Zeek

Итоговая строка: выбор, когда мы хотим ответить на вопросы неделей позже, а не смотреть на пакеты сегодня.

7. Termshark, для пользовательского интерфейса Wireshark внутри сеанса SSH

Termshark — это терминальный интерфейс для TShark. Откройте pcap или присоедините к активному интерфейсу, и мы получим знакомый список пакетов, дерево протоколов и гекс-панель, все отрендеренные в уже открытом терминале. Это работает через SSH, через tmux, через серийную консоль в безголовую виртуальную машину, везде, где TTY — все, что у нас есть.

Где это не так хорошо: при 80 столбцах макет становится тесным, и активные захваты на очень высокоскоростных ссылках пакет-в-секунду могут отставать в UI. Это средство просмотра, а не замена собранной скриптом.

Цена: Бесплатно, с открытым исходным кодом, MIT.

Платформы: Linux, macOS, Windows, FreeBSD.

Загрузка: Termshark

Итоговая строка: самое близкое, что мы получаем к Wireshark на компьютере, который никогда не будет иметь дисплей.

Как выбрать

FAQ

Какой лучший инструмент захвата пакетов без графического интерфейса для сервера Windows?

pktmon на Windows Server 2019 и позже. Он поставляется с операционной системой, захватывает на уровне ETW, вращается самостоятельно и выводит pcapng непосредственно на текущих версиях. Когда нам нужны диссекторы Wireshark, мы преобразуем файл и открываем его в TShark на рабочей станции.

Можем ли мы запустить TShark или tcpdump без root?

Да на Linux, с setcap cap_net_raw,cap_net_admin+eip на двоичном файле. Это дает привилегии захвата определенному исполняемому файлу без предоставления вызывающему полного root. На BSD добавьте пользователя в группу, которой принадлежат устройства bpf. На Windows TShark нужен администратор для общения с Npcap.

Как мы вращаем захваты, чтобы длительный сеанс не заполнял диск?

tcpdump использует -G <seconds> для вращения на основе времени и -C <MB> для вращения на основе размера, в сочетании с -W <count> для ограничения количества хранимых файлов. TShark предоставляет то же самое через -b duration: и -b filesize:. pktmon ограничивает с помощью --file-size и его режима циклического логирования. Zeek вращает свои журналы по фиксированному расписанию самостоятельно.

Такой ли же язык фильтра отображения Wireshark, что и синтаксис tcpdump?

Нет. tcpdump и фильтр захвата TShark (-f) используют синтаксис BPF (tcp port 443 and host 10.0.0.1). Фильтр отображения Wireshark и TShark (-Y) — это другой язык (tcp.port == 443 && ip.addr == 10.0.0.1). Оба стоят обучения; фильтр на стороне захвата работает на скорости ядра, фильтр на стороне отображения работает над уже захваченными пакетами.

Может ли pktmon полностью заменить Wireshark?

Нет. pktmon — это инструмент захвата, а не анализатор. Он записывает в ETL, преобразует в pcapng в более новых версиях и останавливается. Чтобы декодировать TLS рукопожатия, потоки HTTP/2 или QUIC, мы все еще открываем результирующий pcap в Wireshark или TShark. Эти два дополняют друг друга, а не являются заменой.

Безопасно ли запускать эти инструменты на боевой машине?

Да при разумной осторожности. Захват пакетов пассивен и не изменяет трафик, но стоимость CPU на оживленном канале не нулевая, и файлы pcap быстро растут. Ограничьте диск с помощью политики ротации, сузьте BPF фильтр для ограничения CPU и предпочитайте порт зеркала или кран встроенному захвату, где профиль риска имеет значение.