На этой неделе автор XDA привел аргументы в пользу пропуска Wireshark на Windows 11 и начала работы с pktmon, встроенным монитором пакетов. Это соответствует более крупной реальности, с которой сталкиваются большинство операторов: компьютер, который нам нужно отслеживать, редко совпадает с тем, на котором мы сидим. Это может быть контейнер Docker, неуправляемый VPS, Raspberry Pi в шкафу или маршрутизатор OPNsense с открытым только SSH. В этом суть проблемы захвата без графического интерфейса, и графический интерфейс Wireshark — не решение. Нам нужен CLI, который работает через SSH, записывает вращающийся pcap без присмотра и читает BPF фильтры так же, как это делает механизм захвата Wireshark. Мы протестировали семь инструментов, которые делают именно это, на хостах Windows и Linux, и ранжировали их по эффективности.
На что обратить внимание при выборе инструмента захвата без графического интерфейса
Удаленный захват имеет другие ограничения, чем захват на рабочем столе. Шесть вещей имеют значение:
- Поддержка BPF фильтров. Один и тот же синтаксис
tcp port 443 and host 10.0.0.1должен работать; фильтр, который не срабатывает при захвате, нельзя восстановить позже. - Небольшой двоичный файл, мало зависимостей. Образы Alpine и урезанные образы Debian не должны требовать X11 только для записи трафика.
- Вращение и запись в pcap. Ночные захваты заполняют диски; кольцевой буфер через
-C,-Gили эквивалентный флаг имеет большее значение, чем любая функция графического интерфейса. - Работа без прав root, где это возможно.
setcap cap_net_rawпозволяет нам отказаться от root на общих компьютерах. - Вывод, учитывающий протокол. Когда вопрос звучит как “является ли этот DNS запрос искаженным”, декодированная строка лучше, чем шестнадцатеричный дамп.
- Удобство для SSH. Безопасный вывод TTY, отсутствие зависаний ncurses, отсутствие предположений о терминале на 200 столбцов.
Вот контрольный список. Теперь инструменты.
Быстрое сравнение
| Инструмент | Лучше всего подходит для | Платформы | Бесплатный план | Начальная цена/месяц | Оценка |
|---|---|---|---|---|---|
| TShark | Полные диссекторы Wireshark в командной строке | Windows, macOS, Linux | Да | Бесплатно | 5/5 |
| tcpdump | Вездесущие захваты без графического интерфейса на Linux и BSD | Linux, 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 внутри сеанса SSH | Linux, 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 на компьютере, который никогда не будет иметь дисплей.
Как выбрать
- Если хост — это современный компьютер Windows, которому мы не владеем: pktmon. Ничего устанавливать, ничего объяснять безопасности.
- Если хост — это Linux или BSD и мы им владеем: tcpdump для захвата, TShark для анализа на нашей собственной рабочей станции.
- Если захват должен происходить внутри контейнера или образа Alpine: tcpdump или тонкий побочный продукт TShark. tcpflow, когда потоки TCP — это фактический результат.
- Если нам нужен вид в стиле Wireshark, но у нас только есть SSH: Termshark. Это самый быстрый способ получить знакомый интерфейс на чужом компьютере.
- Если вопрос звучит как “содержит ли какой-либо пакет строку X”: ngrep. Укажите шаблон, получите пакеты.
- Если нам важно поведение в течение недель, а не последние пять минут: Zeek. Это превращает сеть в запрашиваемый набор данных.
- Если мы проводим судебную экспертизу на pcap, захваченном кем-то другим: TShark в командной строке, tcpflow, когда артефакты имеют большее значение, чем порядок проводов.
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 и предпочитайте порт зеркала или кран встроенному захвату, где профиль риска имеет значение.