Я на днях увидел упоминание утилиты ngrep. Название показалось очень знакомым, как-будто я её знаю и уже писал о ней. Поискал по каналу и сайту и ничего не нашёл. Потом вспомнил, что спутал её с sngrep, которую я постоянно использовал, когда плотно работал с VOIP серверами. Очень её рекомендую, если приходится анализировать SIP протокол. Хотя скорее всего вы про неё знаете, если с ним работаете. Это очень удобная и функциональная утилита, известная в узких кругах.
Возвращаясь к ngrep. Это старая программа, которая есть в базовых репозиториях дистрибутивов. В некоторых случаях она будет удобнее tcpdump. Сразу покажу на конкретном примере. В качестве параметра ngrep принимает regex по содержимому пакетов. То есть можно сделать вот так:
# ngrep -q 'HTTP'И посмотреть информацию о пакетах, где есть строка HTTP. Собственно, это будут все пакеты данного протокола. В примере выше ключ
-q означает отображать только сетевые пакеты. Непонятно зачем ngrep без этого ключа рисует полоску из псевдографики в консоли, когда ожидает пакеты. Ngrep умеет отображать содержимое пакетов с переходом на новую строку. Это особенно удобно для анализа HTTP или SMTP протокола. Как это выглядит, можно посмотреть на картинках снизу:
# ngrep -q 'HTTP' -W bylineПодобным образом можно тут же в консоли отфильтровать все запросы с определённым User-Agent:
# ngrep -q 'YaBrowser' -W bylineЧтобы не анализировать вообще весь трафик, его можно конкретизировать примерно таким же синтаксисом, как у tcpdump:
# ngrep -q 'YaBrowser' -W byline -d ens18 port 80Указали интерфейс и порт. Если слушаете трафик на шлюзе, то можно конкретизировать сервер назначения, куда идёт трафик:
# ngrep -q 'YaBrowser' -W byline 'host 10.20.1.36 and port 80 or 443'Host может принимать значения не только IP адреса, но и домена. Если смотрите на веб сервере запросы к конкретному домену, то указать адрес этого домена можно в фильтре для содержимого пакетов:
# ngrep -q 'example.com' -W byline 'port 80 or 443'Подобные выборки по содержимому актуальны для всех протоколов, где иногда приходится заглядывать в сетевой трафик для дебага. Это упомянутый HTTP, а так же SMTP, SIP. Это из того, что я сам делал.
Например, смотрим обмен с конкретным почтовым сервером, добавляя метки времени:
# ngrep -q '' -t -W byline 'port smtp and host 94.142.141.246'Можно конкретизировать, если нужно посмотреть только EHLO:
# ngrep -q -i 'EHLO' -t -W byline 'port smtp and host 94.142.141.246'Сохраните себе информацию о ngrep. Прямо здесь и сейчас вряд ли он нужен будет, но в будущем может пригодиться.
#network #terminal


