ngrep - tīkla pakešu analizators operētājsistēmai Linux


Ngrep (tīkla grep) ir vienkāršs, bet jaudīgs tīkla pakešu analizators. Tas ir grepam līdzīgs rīks, kas piemērots tīkla slānim - tas atbilst trafikam, kas iet caur tīkla saskarni. Tas ļauj norādīt paplašinātu parasto vai heksadecimālo izteiksmi, lai tā atbilstu pakešu datu lietderīgajām slodzēm (faktiskajai informācijai vai ziņojumam pārsūtītajos datos, bet ne automātiski ģenerētiem metadatiem).

Šis rīks darbojas ar dažāda veida protokoliem, tostarp IPv4/6, TCP, UDP, ICMPv4/6, IGMP, kā arī ar Raw vairākās saskarnēs. Tas darbojas tāpat kā tcpdump pakešu šņaukšanas rīks.

Pakete ngrep ir pieejama instalēšanai no noklusējuma sistēmas krātuvēm galvenajos Linux izplatījumos, izmantojot pakešu pārvaldības rīku, kā parādīts.

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

Pēc ngrep instalēšanas jūs varat sākt analizēt trafiku savā Linux tīklā, izmantojot šādus piemērus.

1. Šī komanda palīdzēs jums saskaņot visus ping pieprasījumus noklusējuma darba saskarnē. Jums jāatver cits terminālis un jāmēģina pingēt citu attālo mašīnu. Karogs -q liek ngrep darboties mierīgi, lai neizraidītu citu informāciju, izņemot pakešu galvenes un to lietderīgās slodzes.

$ 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  

Lai to izbeigtu, varat nospiest Ctrl + C .

2. Lai saskaņotu tikai datplūsmu, kas ved uz noteiktu galamērķa vietni, piemēram, ‘google.com’, izpildiet šo komandu un pēc tam mēģiniet tai piekļūt no pārlūkprogrammas.

$ 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. Ja sērfojat tīmeklī, izpildiet šo komandu, lai uzraudzītu, kurus failus pieprasa jūsu pārlūkprogramma :.

$ 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. Lai skatītu visu darbību, kas šķērso avota vai mērķa portu 25 (SMTP), izpildiet šādu komandu.

$ sudo ngrep port 25

5. Lai uzraudzītu jebkuru tīkla syslog trafiku attiecībā uz vārda “kļūda” parādīšanos, izmantojiet šādu komandu.

 
$ sudo ngrep -d any 'error' port 514

Svarīgi ir tas, ka šis rīks var pārvērst “/ etc/services” (Unix līdzīgās sistēmās, piemēram, Linux) saglabātos servisa portu nosaukumus par portu numuriem. Šī komanda ir līdzvērtīga iepriekšminētajai komandai.

$ sudo ngrep -d any 'error' port syslog

6. Varat arī palaist ngrep pret HTTP serveri (80. ports), tas atbilst visiem pieprasījumiem galamērķa resursdatoram, kā parādīts.

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

Kā redzat iepriekšējā izvadē, visas HTTP galvenes pārsūtīšana tiek parādīta to pilnīgajā detaļā. Tomēr to ir grūti parsēt, tāpēc skatīsimies, kas notiek, lietojot režīmu -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. Lai drukātu laika zīmogu GGGG/MM/DD HH: MM: SS.UUUUUU katru reizi, kad pakete tiek saskaņota, izmantojiet -t karodziņu.

$ 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. Lai nepieļautu, ka saskarne tiek uzraudzīta nemierīgā režīmā (kur tā pārtver un nolasa katru tīkla pakešu, kas pienāk pilnībā), pievienojiet karodziņu -p .

$ sudo ngrep -p -W byline port 80

9. Vēl viena svarīga iespēja ir -N , kas ir noderīga gadījumā, ja ievērojat neapstrādātus vai nezināmus protokolus. Tas liek ngrep parādīt apakšprotokola numuru kopā ar vienzīmju identifikatoru.

$ sudo ngrep -N -W byline

Plašāku informāciju skatiet ngrep man lapā.

$ man ngrep

ngrep Github krātuve: https://github.com/jpr5/ngrep

Tas ir viss! Ngrep (tīkla grep) ir tīkla pakešu analizators, kas saprot BPF filtra loģiku tādā pašā veidā kā tcpdump. Mēs vēlētos uzzināt jūsu domas par ngrep komentāru sadaļā.