Zoeken op website

ngrep - Een netwerkpakketanalysator voor Linux


Ngrep (netwerk grep) is een eenvoudige maar krachtige netwerkpakketanalysator. Het is een grep-achtig hulpmiddel dat wordt toegepast op de netwerklaag; het matcht verkeer dat over een netwerkinterface gaat. Hiermee kunt u een uitgebreide reguliere of hexadecimale expressie opgeven die moet worden vergeleken met de gegevenspayloads (de daadwerkelijke informatie of het bericht in verzonden gegevens, maar niet de automatisch gegenereerde metagegevens) van pakketten.

Deze tool werkt met verschillende soorten protocollen, waaronder IPv4/6, TCP, UDP, ICMPv4/6, IGMP en Raw op een aantal interfaces. Het werkt op dezelfde manier als de tcpdump packet sniffing tool.

Het pakket ngrep kan worden geïnstalleerd vanuit de standaardsysteembronnen in reguliere Linux-distributies met behulp van de pakketbeheertool, zoals weergegeven.

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

Nadat u ngrep hebt geïnstalleerd, kunt u beginnen met het analyseren van het verkeer op uw Linux-netwerk aan de hand van de volgende voorbeelden.

1. Met de volgende opdracht kunt u alle ping-verzoeken op de standaardwerkinterface matchen. U moet een andere terminal openen en proberen een andere externe machine te pingen. De vlag -q vertelt ngrep om stil te werken en geen andere informatie uit te voeren dan pakketheaders en hun payloads.

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  

U kunt op Ctrl + C drukken om het te beëindigen.

2. Om alleen verkeer te matchen dat naar een bepaalde bestemmingssite gaat, bijvoorbeeld 'google.com', voert u de volgende opdracht uit en probeert u deze vervolgens vanuit een browser te openen.

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. Als u op internet surft, voer dan de volgende opdracht uit om te controleren welke bestanden uw browser opvraagt:.

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. Om alle activiteiten te zien die bron- of bestemmingspoort 25 (SMTP) overschrijden, voert u de volgende opdracht uit.

sudo ngrep port 25

5. Om netwerkgebaseerd syslog-verkeer te controleren op het voorkomen van het woord “error”, gebruikt u de volgende opdracht.

 
sudo ngrep -d any 'error' port 514

Belangrijk is dat deze tool servicepoortnamen die zijn opgeslagen in “/etc/services ” (op Unix-achtige systemen zoals Linux) kan converteren naar poortnummers. Dit commando is gelijk aan het bovenstaande commando.

sudo ngrep -d any 'error' port syslog

6. Je kunt ngrep ook uitvoeren tegen een HTTP-server (poort 80), het zal alle verzoeken matchen met de bestemmingshost, zoals weergegeven.

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

Zoals je in de bovenstaande uitvoer kunt zien, worden alle HTTP-headers verzonden in hun bloederige details. Het is echter moeilijk te ontleden, dus laten we eens kijken wat er gebeurt als je de -W byline-modus toepast.

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. Om een tijdstempel af te drukken in de vorm van JJJJ/MM/DD UU:MM:SS.UUUUUU telkens wanneer een pakket overeenkomt, gebruik de vlag -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. Om te voorkomen dat de interface die wordt gemonitord in de promiscue modus wordt gezet (waarbij elk netwerkpakket dat binnenkomt in zijn geheel wordt onderschept en gelezen), voegt u de vlag -p toe.

sudo ngrep -p -W byline port 80

9. Een andere belangrijke optie is -N, wat handig is als je ruwe of onbekende protocollen gebruikt. Het vertelt ngrep om het subprotocolnummer samen met de identificatie van één teken weer te geven.

sudo ngrep -N -W byline

Voor meer informatie, zie de ngrep manpagina.

man ngrep

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

Dat is alles! Ngrep (netwerk grep) is een netwerkpakketanalysator die de BPF-filterlogica op dezelfde manier begrijpt als tcpdump. We willen graag weten wat jouw mening is over ngrep in het opmerkingengedeelte.