ngrep – Сетевой анализатор пакетов для Linux

by itisgood

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

 

You may also like

Leave a Comment