ngrep - Verkkopakettianalysaattori Linuxille


Ngrep (verkko grep) on yksinkertainen mutta tehokas verkkopakettianalysaattori. Se on verkkokerrokseen sovellettu grep-tyyppinen työkalu - se vastaa verkkoliitännän kautta kulkevaa liikennettä. Sen avulla voit määrittää laajennetun säännöllisen tai heksadesimaalilausekkeen vastaamaan pakettien hyötykuormia (lähetetyn datan todellinen tieto tai viesti, mutta ei automaattisesti luotuja metatietoja).

Tämä työkalu toimii erityyppisten protokollien kanssa, mukaan lukien IPv4/6, TCP, UDP, ICMPv4/6, IGMP sekä Raw useilla rajapinnoilla. Se toimii samalla tavalla kuin tcpdump-pakettien nuuskaustyökalu.

Paketti ngrep on saatavana asennettavaksi Linux-jakelujen oletusjärjestelmärekistereistä käyttämällä paketinhallintatyökalua kuvan osoittamalla tavalla.

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

Ngrepin asentamisen jälkeen voit aloittaa Linux-verkon liikenteen analysoinnin seuraavien esimerkkien avulla.

1. Seuraava komento auttaa sinua vastaamaan kaikkia ping-pyyntöjä oletusarvoisessa käyttöliittymässä. Sinun on avattava toinen päätelaite ja yritettävä pingata toista etälaitetta. -q -lippu käskee ngrepin toimimaan hiljaa, jotta se ei tuota muuta tietoa kuin pakettien otsikot ja niiden hyötykuormat.

$ 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  

Voit lopettaa sen painamalla Ctrl + C .

2. Suorita seuraava komento ja yritä käyttää sitä selaimella, jotta vain tietylle kohdesivustolle, esimerkiksi ”google.com”, menevä liikenne voidaan kohdistaa.

$ 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. Jos surffaat verkossa, suorita seuraava komento seurataksesi, mitä tiedostoja selaimesi pyytää :.

$ 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. Jos haluat nähdä kaiken lähteen tai kohdeportin 25 (SMTP) ylittävän toiminnan, suorita seuraava komento.

$ sudo ngrep port 25

5. Seuraa seuraavaa komentoa seurataksesi verkkopohjaista syslog-liikennettä sanan\"virhe" esiintymisen varalta.

 
$ sudo ngrep -d any 'error' port 514

Tärkeää on, että tämä työkalu voi muuntaa\"/ etc/services" -palvelussa (Unixin kaltaisissa järjestelmissä, kuten Linux) tallennetut palveluporttien nimet porttinumeroiksi. Tämä komento vastaa yllä olevaa komentoa.

$ sudo ngrep -d any 'error' port syslog

6. Voit myös suorittaa ngrep: n HTTP-palvelimella (portti 80), se vastaa kaikkia pyyntöjä kohde-isännälle kuvan osoittamalla tavalla.

$ 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....
##

Kuten yllä olevasta lähdöstä näet, kaikki HTTP-otsikkolähetykset näytetään niiden yksityiskohdissa. Sen jäsentäminen on kuitenkin vaikeaa, joten katsotaanpa, mitä tapahtuu, kun käytät -W byline-tilaa.

$ 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. Tulosta aikaleima muodossa VVVV/KK/PP PP: MM: SS.UUUUUU joka kerta, kun paketti sovitetaan yhteen, käyttämällä -t-lippua.

$ 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. Välttääksesi valvottavan käyttöliittymän asettamisen röyhkeään tilaan (missä se sieppaa ja lukee kaikki saapuvat verkkopaketit kokonaisuudessaan), lisää -p -lippu.

$ sudo ngrep -p -W byline port 80

9. Toinen tärkeä vaihtoehto on -N , joka on hyödyllinen, jos tarkkailet raakoja tai tuntemattomia protokollia. Se käskee ngrep: tä näyttämään aliprotokollanumeron yhdessä merkin tunnuksen kanssa.

$ sudo ngrep -N -W byline

Lisätietoja on ngrep-man -sivulla.

$ man ngrep

ngrep Github -tietovarasto: https://github.com/jpr5/ngrep

Siinä kaikki! Ngrep (verkko grep) on verkkopakettianalysaattori, joka ymmärtää BPF-suodatinlogiikan samalla tavalla tcpdump. Haluamme tietää ajatuksesi ngrepistä kommenttiosassa.