Поиск по сайту:

ngrep — анализатор сетевых пакетов для Linux


Ngrep (network grep) — простой, но мощный анализатор сетевых пакетов. Это инструмент, похожий на grep, применяемый на сетевом уровне — он сопоставляет трафик, проходящий через сетевой интерфейс. Он позволяет указать расширенное регулярное или шестнадцатеричное выражение для сопоставления с полезными данными (фактической информацией или сообщением в передаваемых данных, но не автоматически сгенерированными метаданными) пакетов.

Этот инструмент работает с различными типами протоколов, включая IPv4/6, TCP, UDP, ICMPv4/6, IGMP, а также Raw на ряде интерфейсов. Он работает так же, как инструмент анализа пакетов tcpdump.

Пакет ngrep доступен для установки из системных репозиториев по умолчанию в основных дистрибутивах Linux с помощью инструмента управления пакетами, как показано.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

После установки ngrep вы можете начать анализировать трафик в сети Linux, используя следующие примеры.

1. Следующая команда поможет вам сопоставить все пинг-запросы в рабочем интерфейсе по умолчанию. Вам нужно открыть другой терминал и попытаться пропинговать другую удаленную машину. Флаг -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>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. Если вы просматриваете веб-страницы, выполните следующую команду, чтобы отслеживать, какие файлы запрашивает ваш браузер:.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 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,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. Чтобы увидеть всю активность, пересекающую порт источника или назначения 25 (SMTP), выполните следующую команду.

sudo ngrep port 25

5. Чтобы отслеживать любой сетевой трафик системного журнала на предмет появления слова «ошибка», используйте следующую команду.

 
sudo ngrep -d any 'error' port 514

Важно отметить, что этот инструмент может преобразовывать имена портов служб, хранящиеся в “/etc/services” (в Unix-подобных системах, таких как Linux), в номера портов. Эта команда эквивалентна приведенной выше команде.

sudo ngrep -d any 'error' port syslog

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.

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. Чтобы печатать метку времени в виде ГГГГ/ММ/ДД ЧЧ:ММ:СС.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

Дополнительную информацию см. на странице руководства ngrep.

man ngrep

Репозиторий ngrep на Github: https://github.com/jpr5/ngrep

Вот и все! Ngrep (network grep) — это анализатор сетевых пакетов, который понимает логику фильтра BPF так же, как tcpdump. Мы хотели бы узнать ваше мнение о ngrep в разделе комментариев.