ngrep: grep по сетевым пакетам в реальном времени
Ngrep — утилита, которая ищет паттерны в сетевых пакетах так же, как grep ищет строки в файлах. Когда нужно понять, что конкретно передаётся по сети между двумя сервисами, а tcpdump выдаёт слишком много шума, ngrep позволяет отфильтровать только нужное содержимое.
Установка
Ngrep есть в стандартных репозиториях большинства дистрибутивов.
Для работы требует root-привилегий илиcapabilities CAP_NET_RAW и CAP_NET_ADMIN.
Базовый синтаксис
Минимальный запуск — поймать все пакеты на порту:
Разберём по частям:
-i— case-insensitive поиск'password'— регулярное выражение для поиска в payloadport 80— BPF-фильтр: только трафик на 80-й порт
Вывод похож на tcpdump с расшифровкой payload:
Основные флаги
| Флаг | Описание |
|---|---|
-i | Игнорировать регистр при поиске |
-W byline | Переносить строки, убирать escape-последовательности |
-q | Quiet: показывать только совпадения, без метаинформации |
-t | Добавить timestamp к каждому пакету |
-d eth0 | Слушать на конкретном интерфейсе |
-n 1 | Остановиться после первого совпадения |
-c N | Ограничить вывод N символами на строку |
-x | Показать hexdump вместо ASCII |
Практический пример с timestamp:
Фильтрация по порту и протоколу
Ngrep принимает стандартные BPF-фильтры tcpdump. Основные варианты:
BPF-фильтры ngrep парсит так же, как tcpdump. Синтаксис port, host, and, or работает идентично.
HTTP-запросы в Docker-контейнерах
Частая задача — отследить HTTP-трафик между контейнерами. Есть два подхода.
Первый: запустить ngrep внутри контейнера
Подходит, если контейнер на базе Alpine или Debian и есть доступ:
Второй: слушать на docker0
Если контейнеры общаются через bridge-сеть хоста:
Проверить IP контейнера:
Ограничения и альтернативы
Ngrep работает только с plaintext-трафиком. Он не умеет расшифровывать TLS/HTTPS — увидите только бинарный мусор вместо содержимого.
Другие ограничения:
- Не понимает HTTP/2 и HTTP/3 — эти протоколы бинарные
- Нет встроенного парсинга JSON или XML, только текстовый поиск
- Производительность ниже, чем у tcpdump, при высокой нагрузке
Альтернативы для разных случаев:
| Задача | Инструмент |
|---|---|
| Быстрый дамп pcap | tcpdump -i eth0 -A port 80 |
| Детальный анализ с парсингом | tshark -Y http -i eth0 |
| Мониторинг HTTPS (нужен ключ) | Wireshark с расшифровкой |
| Трассировка gRPC | grpcurl или wireshark с Protobuf |
Для большинства отладочных задач связка ngrep плюс tcpdump закрывает потребности. Если нужно разобрать конкретный протокол — tshark с фильтрами даст больше контроля, но потребует изучения синтаксиса Wireshark.