Recherche de site Web

ngrep - Un analyseur de paquets réseau pour Linux


Ngrep (network grep) est un analyseur de paquets réseau simple mais puissant. Il s'agit d'un outil de type grep appliqué à la couche réseau : il correspond au trafic transitant sur une interface réseau. Il vous permet de spécifier une expression régulière ou hexadécimale étendue à comparer aux charges utiles de données (les informations ou le message réel dans les données transmises, mais pas les métadonnées générées automatiquement) des paquets.

Cet outil fonctionne avec différents types de protocoles, notamment IPv4/6, TCP, UDP, ICMPv4/6, IGMP ainsi que Raw sur un certain nombre d'interfaces. Il fonctionne de la même manière que l'outil de détection de paquets tcpdump.

Le package ngrep peut être installé à partir des référentiels système par défaut dans les distributions Linux traditionnelles à l'aide de l'outil de gestion de packages, comme indiqué.

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

Après avoir installé ngrep, vous pouvez commencer à analyser le trafic sur votre réseau Linux à l'aide des exemples suivants.

1. La commande suivante vous aidera à faire correspondre toutes les requêtes ping sur l'interface de travail par défaut. Vous devez ouvrir un autre terminal et essayer d'envoyer une requête ping à une autre machine distante. L'indicateur -q indique à ngrep de fonctionner silencieusement, de ne produire aucune information autre que les en-têtes de paquets et leurs charges utiles.

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  

Vous pouvez appuyer sur Ctrl + C pour y mettre fin.

2. Pour rechercher uniquement le trafic en direction d'un site de destination particulier, par exemple 'google.com', exécutez la commande suivante, puis essayez d'y accéder à partir d'un navigateur.

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. Si vous surfez sur le Web, exécutez la commande suivante pour surveiller les fichiers demandés par votre navigateur :.

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. Pour voir toutes les activités traversant le port source ou de destination 25 (SMTP), exécutez la commande suivante.

sudo ngrep port 25

5. Pour surveiller tout trafic syslog basé sur le réseau afin de détecter l'apparition du mot « erreur », utilisez la commande suivante.

 
sudo ngrep -d any 'error' port 514

Il est important de noter que cet outil peut convertir les noms de ports de service stockés dans «/etc/services» (sur les systèmes de type Unix tels que Linux) en numéros de port. Cette commande est équivalente à la commande ci-dessus.

sudo ngrep -d any 'error' port syslog

6. Vous pouvez également exécuter ngrep sur un serveur HTTP (port 80), il correspondra à toutes les requêtes adressées à l'hôte de destination, comme indiqué.

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

Comme vous pouvez le voir dans la sortie ci-dessus, toutes les transmissions d'en-têtes HTTP sont affichées dans leurs détails sanglants. C'est cependant difficile à analyser, alors regardons ce qui se passe lorsque vous appliquez le mode de signature -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. Pour imprimer un horodatage sous la forme AAAA/MM/JJ HH:MM:SS.UUUUUU à chaque fois qu'un paquet correspond, utilisez l'indicateur -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. Pour éviter de mettre l'interface surveillée en mode promiscuité (où elle intercepte et lit chaque paquet réseau qui arrive dans son intégralité), ajoutez l'indicateur -p.

sudo ngrep -p -W byline port 80

9. Une autre option importante est -N qui est utile si vous observez des protocoles bruts ou inconnus. Il indique à ngrep d'afficher le numéro du sous-protocole ainsi que l'identifiant à un seul caractère.

sudo ngrep -N -W byline

Pour plus d'informations, consultez la page de manuel ngrep.

man ngrep

Dépôt ngrep Github : https://github.com/jpr5/ngrep

C'est tout! Ngrep (network grep) est un analyseur de paquets réseau qui comprend la logique du filtre BPF de la même manière que tcpdump. Nous aimerions connaître votre avis sur ngrep dans la section commentaires.