
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.