Ngrep (network grep) – простой, но мощный сетевой анализатор пакетов.
Это инструмент типа grep, применяемый к сетевому уровню – он соответствует трафику, проходящему через сетевой интерфейс.
Он позволяет указать расширенное регулярное или шестнадцатеричное выражение для сопоставления с полезными данными (фактическая информация или сообщение в переданных данных, но не с автогенерированными метаданными) пакетов.
Пакет ngrep доступен для установки из системных репозиториев по умолчанию в основных дистрибутивах Linux с использованием инструмента управления пакетами, как показано на рисунке.
$ sudo apt install ngrep $ sudo yum install ngrep $ sudo dnf install ngrep
После установки ngrep вы можете начать анализ трафика в своей сети Linux, используя следующие команды.
1. Следующая команда поможет вам сопоставить все запросы ping в рабочем интерфейсе по умолчанию.
Вам нужно открыть другой терминал и попытаться выполнить пинг другой удаленной машины.
Флаг -q сообщает ngrep работать в тихом режиме, чтобы не выводить никакой информации, отличной от заголовков пакетов и их полезных нагрузок.
$ sudo ngrep -q '.' 'icmp' interface: enp0s3 (192.168.0.0/255.255.255.0) filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6))) match: . I 192.168.0.104 -> 192.168.0.103 8:0 ]...~oG[....j....................... !"#$%&'()*+,-./01234567 I 192.168.0.103 -> 192.168.0.104 0:0 ]...~oG[....j....................... !"#$%&'()*+,-./01234567 I 192.168.0.104 -> 192.168.0.103 8:0 ]....oG[............................ !"#$%&'()*+,-./01234567 I 192.168.0.103 -> 192.168.0.104 0:0 ]....oG[............................ !"#$%&'()*+,-./01234567
Вы можете нажать Ctrl + C, чтобы завершить его выполнение
2. Чтобы сопоставить только трафик, идущий на конкретный целевой сайт, например «google.com», выполните следующую команду, затем попробуйте получить к нему доступ из браузера.
$ sudo ngrep -q '.' 'host google.com' interface: enp0s3 (192.168.0.0/255.255.255.0) filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6))) match: . T 172.217.160.174:443 -> 192.168.0.103:54008 [AP] ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>......p..@..EV.. T 172.217.160.174:443 -> 192.168.0.103:54008 [AP] .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;.$@Yv.Q6
3. Если вы серфите сайты в Интернете, запустите следующую команду, чтобы контролировать, какие файлы запрашивает ваш браузер :.
$ sudo ngrep -q '.' 'host google.com' interface: enp0s3 (192.168.0.0/255.255.255.0) filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6))) match: . T 172.217.160.174:443 -> 192.168.0.103:54008 [AP] ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>......p..@..EV.. T 172.217.160.174:443 -> 192.168.0.103:54008 [AP] .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;.$@Yv.Q6
4. Чтобы увидеть все пересечения источника или порт назначения 25 (SMTP), выполните следующую команду.
$ sudo ngrep port 25
5. Чтобы отслеживать любой сетевой трафик из syslog на появление слова «error», используйте следующую команду.
$ sudo ngrep -d any 'error' port 514
Важно отметить, что этот инструмент может преобразовывать имена портов службы, хранящиеся в «/etc/services» (в Unix-подобных системах, таких как Linux), в номера портов.
Эта команда эквивалентна приведенной выше команде.
6. Вы также можете запустить ngrep на HTTP-сервер (порт 80), он будет соответствовать всем запросам хоста назначения, как показано ниже
$ sudo ngrep port 80 interface: eth0 (64.90.164.72/255.255.255.252) filter: ip and ( port 80 ) #### T 67.169.59.38:42167 -> 64.90.164.74:80 [AP] GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i 686) Opera 7.21 [en]..Host: www.darkridge.com..Accept: text/html, applicat ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, * ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection: Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers.... ##
Как видно из вышесказанного, вся передача HTTP-заголовков отображается в деталях.
Трудно разобрать, так что давайте посмотрим, что произойдет, когда вы примените режим -W byline.
$ sudo ngrep -W byline port 80 interface: eth0 (64.90.164.72/255.255.255.252) filter: ip and ( port 80 ) #### T 67.169.59.38:42177 -> 64.90.164.74:80 [AP] GET / HTTP/1.1. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ... Host: www.darkridge.com. Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ... Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1. Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0. Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e. Cookie2: $Version=1. Cache-Control: no-cache. Connection: Keep-Alive, TE. TE: deflate, gzip, chunked, identity, trailers.
7. Чтобы вывести временную метку в формате YYYY / MM / DD HH: MM: SS.UUUUUU каждый раз, когда пакет согласован, используйте флаг -t.
$ sudo ngrep -t -W byline port 80 interface: enp0s3 (192.168.0.0/255.255.255.0) filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6))) #### T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP] GET / HTTP/1.1. Host: google.com. User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text). Accept: */*. Accept-Language: en,*;q=0.1. Accept-Encoding: gzip, deflate, bzip2. Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8. Connection: keep-alive.
8. Чтобы не допустить, чтобы интерфейс контролировался в беспорядочном режиме (где он перехватывает и считывает каждый сетевой пакет, который поступает целиком), добавьте флаг -p.
$ sudo ngrep -p -W byline port 80
9. Другим важным вариантом является -N, который полезен, если вы наблюдаете необработанные или неизвестные протоколы.
Он сообщает ngrep отображать номер подпротокола вместе с односимвольным идентификатором.
$ sudo ngrep -N -W byline