ngrep – tinklo paketų analizatorius, skirtas Linux


Ngrep (tinklo grep) yra paprastas, bet galingas tinklo paketų analizatorius. Tai į grep panašus įrankis, taikomas tinklo sluoksniui – jis atitinka srautą, einantį per tinklo sąsają. Tai leidžia nurodyti išplėstinę reguliariąją arba šešioliktainę išraišką, kuri atitiktų paketų naudingąsias apkrovas (faktinę informaciją arba pranešimą perduodamuose duomenyse, bet ne automatiškai sugeneruotus metaduomenis).

Šis įrankis veikia su įvairių tipų protokolais, įskaitant IPv4/6, TCP, UDP, ICMPv4/6, IGMP ir Raw daugelyje sąsajų. Jis veikia taip pat, kaip tcpdump paketų uostymo įrankis.

Paketą ngrep galima įdiegti iš numatytųjų sistemos saugyklų pagrindiniuose „Linux“ platinimuose naudojant paketų valdymo įrankį, kaip parodyta.

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

Įdiegę ngrep, galite pradėti analizuoti srautą „Linux“ tinkle naudodami toliau pateiktus pavyzdžius.

1. Ši komanda padės suderinti visas ping užklausas numatytojoje darbo sąsajoje. Turite atidaryti kitą terminalą ir pabandyti išsiųsti ping kitą nuotolinį įrenginį. Žymė -q nurodo ngrep veikti tyliai ir neleisti jokios kitos informacijos, išskyrus paketų antraštes ir jų naudingąsias apkrovas.

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  

Norėdami jį nutraukti, galite paspausti Ctrl + C.

2. Norėdami pritaikyti tik srautą, nukreiptą į tam tikrą paskirties svetainę, pvz., google.com, paleiskite šią komandą, tada pabandykite pasiekti ją iš naršyklės.

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. Jei naršote internete, paleiskite šią komandą, kad stebėtumėte, kokių failų prašo jūsų naršyklė:.

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. Norėdami pamatyti visą veiklą, kertnčią šaltinį arba paskirties prievadą 25 (SMTP), paleiskite šią komandą.

sudo ngrep port 25

5. Norėdami stebėti bet kokį tinklo sistemos žurnalo srautą, ar nėra žodžio "klaida", naudokite šią komandą.

 
sudo ngrep -d any 'error' port 514

Svarbu tai, kad šis įrankis gali konvertuoti paslaugų prievadų pavadinimus, saugomus „/etc/services“ (į „Unix“ panašiose sistemose, pvz., „Linux“), į prievadų numerius. Ši komanda yra lygiavertė aukščiau pateiktai komandai.

sudo ngrep -d any 'error' port syslog

6. Taip pat galite paleisti ngrep HTTP serveryje (prievadas 80), jis atitiks visas užklausas paskirties prieglobai, kaip parodyta.

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

Kaip matote aukščiau pateiktoje išvestyje, visas HTTP antraščių perdavimas rodomas labai išsamiai. Vis dėlto sunku jį išanalizuoti, todėl pažiūrėkime, kas nutinka, kai taikote eilutės režimą -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. Norėdami spausdinti laiko žymą YYYY/MM/DD HH:MM:SS.UUUUUU kiekvieną kartą, kai suderinamas paketas, naudokite vėliavėlę -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. Kad stebima sąsaja nebūtų perjungta į neteisėtą režimą (kai ji perima ir nuskaito kiekvieną tinklo paketą, kuris gaunamas visą), pridėkite vėliavėlę -p.

sudo ngrep -p -W byline port 80

9. Kita svarbi parinktis yra -N, kuri yra naudinga, jei stebite neapdorotus arba nežinomus protokolus. Ji nurodo ngrep, kad būtų rodomas antrinio protokolo numeris kartu su vieno simbolio identifikatoriumi.

sudo ngrep -N -W byline

Daugiau informacijos rasite ngrep vadovo puslapyje.

man ngrep

ngrep Github saugykla: https://github.com/jpr5/ngrep

Tai viskas! Ngrep (tinklo grep) yra tinklo paketų analizatorius, kuris supranta BPF filtro logiką taip pat, kaip tcpdump. Norėtume sužinoti jūsų mintis apie ngrep komentarų skiltyje.