Capturer le localhost dans WireShark/Ethereal sous Windows

Je ne sais pas si certains d’entre vous bossent sur des projets telecom, mais il est une situation dans laquelle on se retrouve tôt ou tard: avoir besoin de tester deux logiciels censés communiquer entre eux par le réseau sur son propre ordinateur, et vouloir sniffer le réseau pour savoir ce qu’ils se disent exactement. Problème, wireshark (nouveau nom d’Ethereal) capture tout ce qui passe par la carte réseau, mais dans le cas de communication réseau internes à l’ordinateur, les paquets empruntent des raccourcis qui les font échapper à cette capture. Comment tricher pour les avoir quand même? Une façon de faire consiste à les forcer à passer par la carte réseau, en indiquant à windows que tous les paquets en provenance de notre ordinateur et à destination de notre adresse ip doivent emprunter la passerelle par défaut.

I visualisation des paramètres initiaux :

D’abord on fait un ipconfig pour repérer son adresse ip, et la passerelle par défaut. Par exemple on obtient ça:

C:\>ipconfig
Windows IP Configuration
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix  . : toto.titi.tata.com
IP Address. . . . . . . . . . . . : 192.168.16.53
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.16.2

Tant qu’on y est, on peut aussi regarder les paramètres par défaut de routage interne :

H:\>route print 192.168.16.53 | find « 192.168.16.53 »
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20

Le résultat dit que les paquets à destination de mon adresse IP doivent être redirigés sur mon localhost. C’est ce que nous allons changer.

II Forçage du passage des paquets par le routeur :

Nous allons donc ajouter une route à Windows en lui disant que pour router des paquets vers notre adresse IP, il faut passer par le routeur:

H:\>route add 192.168.16.53 mask 255.255.255.255 192.168.16.2 metric 1

Regardons maintenant les nouveaux parametres de routage de windows :

H:\>route print 192.168.16.53 | find « 192.168.16.53 »
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20
192.168.16.53  255.255.255.255 192.168.16.2 192.168.16.53       1

La nouvelle route a bien été ajoutée. L’étape suivante concerne notre application qui tourne en interne : Au lieu de lui donner l’adresse hote interne 127.0.0.1, il faut lui donner l’adresse hôte externe, dans cet exemple 192.168.16.53. Une fois que c’est fait, nous pouvons lancer ethereal/wireshark  et notre application, et les paquets seront capturés.

III Résoudre le problème du dédoublement des paquets :

Seul petit problème, le trajet des paquets va être le suivant :
1)      Le paquet part de l’application cliente sur notre ordinateur
2)      Il est routé vers le routeur
3)      Le routeur nous le renvoie
4)      Le paquet est reçu par l’application serveur sur notre ordinateur

Et dans le cas du trajet serveur -> client, c’est la même chose.

Ca implique que chaque paquet passe deux fois par notre carte réseau, et que du coup tous les paquets seront capturés en double par wireshark/ethereal. Pour pallier à ce petit problème, il suffit d’ajouter un filtre dans wireshark, pour lui indiquer par exemple de bloquer les paquets sortant de la carte réseau du routeur. Par exemple, si en plus vous ne voulez que les paquets snmp, et que votre carte réseau a pour adresse 00:ab:cd:ef:12:34, indiquez le filtre suivant dans wireshark/ethereal:

snmp && !(eth.src == 00:ab:cd:ef:12:34)

Et le tour est joué!

IV Rétablir les choses dans leur configuration d’origine :

Lorsqu’on n’a plus besoin de capturer les paquets, il n’est pas nécessaire de polluer le routeur plus longtemps. Il suffit d’enlever la route ajoutée au II :

H:\>route delete
192.168.16.53
H:\>route print 192.168.16.53 | find « 192.168.16.53 »
192.168.16.53  255.255.255.255        127.0.0.1       127.0.0.1       20

Et tout est de retour à l’état initial.

I visualisation des paramètres initiaux :

D’abord on fait un ipconfig pour repérer son adresse ip, et la passerelle par défaut. Dans mon cas ça donne ça :

H:\>ipconfig

Windows IP Configuration

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix  . : rennes.eu.thmulti.com

IP Address. . . . . . . . . . . . : 141.11.149.18

Subnet Mask . . . . . . . . . . . : 255.255.240.0

Default Gateway . . . . . . . . . : 141.11.159.1

Tant qu’on y est, on peut aussi regarder les paramètres par défaut de routage interne :

H:\>route print 141.11.149.18 | find « 141.11.149.18 »

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

Le résultat dit que les paquets à destination de mon adresse IP doivent être redirigés sur mon localhost. C’est ce que nous allons changer.

II Forçage du passage des paquets par le routeur :

Nous allons donc ajouter une route à Windows en lui disant que pour router des paquets vers notre adresse IP, il faut passer par le routeur :

H:\>route add 141.11.149.18 mask 255.255.255.255 141.11.159.1 metric 1

Regardons maintenant les nouveaux parametres de routage de windows :

H:\>route print 141.11.149.18 | find « 141.11.149.18 »

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

141.11.149.18  255.255.255.255     141.11.159.1   141.11.149.18       1

La nouvelle route a bien été ajoutée. L’étape suivante concerne notre application qui tourne en interne : Au lieu de lui donner l’adresse hote interne 127.0.0.1, il faut lui donner l’adresse hôte externe, dans mon cas 141.11.149.18. Une fois que c’est fait, nous pouvons lancer ethereal/wireshark  et notre application, et les paquets seront capturés.

III Résoudre le problème du dédoublement des paquets :

Seul petit problème, le trajet des paquets va être le suivant :

1) Le paquet part de l’application cliente sur notre ordinateur

2) Il est routé vers le routeur

3) Le routeur nous le renvoie

4) Le paquet est reçu par l’application serveur sur notre ordinateur

Et dans le cas du trajet serveur -> client, c’est la même chose.

Ca implique que chaque paquet passe deux fois par notre carte réseau, et que du coup tous les paquets seront capturés en double par wireshark/ethereal. Pour pallier à ce petit problème, il suffit d’ajouter un filtre dans wireshark, pour lui indiquer par exemple de bloquer les paquets sortant de la carte réseau du routeur. Par exemple, dans mon cas, je ne veux que les paquets snmp, donc j’indique le filtre suivant à wireshark/ethereal :

snmp && eth.src != 00:19:b9:2e:45:cf

Et le tour est joué!

IV Rétablir les choses dans leur configuration d’origine :

Lorsqu’on n’a plus besoin de capturer les paquets, il n’est pas nécessaire de polluer le routeur plus longtemps. Il suffit d’enlever la route ajoutée au II :

H:\>route delete 141.11.149.18

H:\>route print 141.11.149.18 | find « 141.11.149.18 »

141.11.149.18  255.255.255.255        127.0.0.1       127.0.0.1       20

Et tout est de retour à l’état initial.

Publicités

2 réflexions au sujet de « Capturer le localhost dans WireShark/Ethereal sous Windows »

  1. Yaude

    Excellent, mais le retour en arrière supprime la route vers l’adresses ip locale. Ceci dit, ce n’est pas gênant car localhost marche toujours mais on ne peut plus faire de ping vers son adresse en 192.168.16.53.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s