ngrep - Verkkopaketti-analysaattori Linuxille


Ngrep (verkko grep) on yksinkertainen mutta tehokas verkkopakettianalysaattori. Se on grep-tyyppinen työkalu, jota sovelletaan verkkokerrokseen – se vastaa verkkoliitännän kautta kulkevaa liikennettä. Sen avulla voit määrittää laajennetun säännöllisen tai heksadesimaalilausekkeen, joka vastaa pakettien datahyötykuormia (todellisia tietoja tai sanomia lähetetyissä tiedoissa, 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 liitännöillä. Se toimii samalla tavalla kuin tcpdump-pakettien haistelutyökalu.

Paketti ngrep on saatavana asennettavaksi oletusjärjestelmän arkistoista yleisissä Linux-jakeluissa käyttämällä paketinhallintatyökalua kuvan mukaisesti.

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

Kun olet asentanut ngrep, voit alkaa analysoida Linux-verkkosi liikennettä seuraavien esimerkkien avulla.

1. Seuraava komento auttaa sinua yhdistämään kaikki ping-pyynnöt oletuskäyttöliittymässä. Sinun on avattava toinen pääte ja yritettävä pingata toista etäkonetta. Lippu -q käskee ngrep:tä toimimaan hiljaa ja olemaan tulostamatta muita tietoja 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. Jos haluat yhdistää vain tiettyyn kohdesivustoon, esimerkiksi google.com, suuntautuvan liikenteen, suorita seuraava komento ja yritä sitten käyttää sitä selaimella.

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 toiminnan, joka ylittää lähteen tai kohdeportin 25 (SMTP), suorita seuraava komento.

sudo ngrep port 25

5. Jos haluat valvoa verkkopohjaista syslog-liikennettä sanan "virhe" esiintymisen varalta, käytä seuraavaa komentoa.

 
sudo ngrep -d any 'error' port 514

Tärkeää on, että tämä työkalu voi muuntaa tiedostoon "/etc/services" tallennetut palveluporttien nimet (Unix-tyyppisissä järjestelmissä, kuten Linuxissa) porttinumeroiksi. Tämä komento vastaa yllä olevaa komentoa.

sudo ngrep -d any 'error' port syslog

6. Voit myös käyttää ngrep-komentoa HTTP-palvelinta (portti 80) vastaan. Se kohdistaa kaikki pyynnöt kohdepalvelimeen kuvan mukaisesti.

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-otsikoiden lähetykset näytetään verisissä yksityiskohdissaan. 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. Jos haluat tulostaa aikaleiman muodossa VVVV/KK/PP HH:MM:SS.UUUUUU joka kerta, kun paketti täsmää, käytä -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. Lisää -p-lippu, jotta vältytään laittamasta valvottavaa rajapintaa promiscuous-tilaan (jossa se sieppaa ja lukee jokaisen saapuvan verkkopaketin kokonaisuudessaan).

sudo ngrep -p -W byline port 80

9. Toinen tärkeä vaihtoehto on -N, joka on hyödyllinen, jos tarkkailet raaka- tai tuntemattomia protokollia. Se käskee ngrep näyttämään aliprotokollan numeron yhdessä yksimerkkisen tunnisteen kanssa.

sudo ngrep -N -W byline

Lisätietoja on ngrep -manuaalisivulla.

man ngrep

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

Siinä kaikki! Ngrep (verkko grep) on verkkopakettianalysaattori, joka ymmärtää BPF-suodattimen logiikan samalla tavalla kuin tcpdump. Haluaisimme tietää mielipiteesi ngrepistä kommenttiosiossa.