Réseau – Effectuer un Traceroute « manuel »

Qui n’a jamais utilisé « traceroute » (« tracert » sous windows) ? Ce petit utilitaire qui permet de se faire une idée plus ou moins correcte du cheminement d’un paquet envoyé vers une adresse sur le Web ou sur un réseau local.
En lisant cet article, vous verrez comment réaliser un traceroute manuel, simplement à l’aide de la commande « ping »…

Petite introduction
Afin de comprendre la manœuvre, il faut d’abord savoir comment fonctionne traceroute et donc garder en têtes quelques notions élémentaires:

  • Un paquet de donnée a une durée de vie (TTL) qui représente le nombre maximum de « sauts » qu’il peut effectuer avant d’arriver à destination. A Chaque saut, le TTL est diminué de 1. Si le TTL tombe à 0, le paquet est tout simplement détruit.
  • Lorsque qu’un paquet est détruit, en général, la machine qui l’a fait renvoit un paquet ICMP à l’adresse d’origine pour prévenir du problème.
  • Un paquet de donnée n’a aucune mémoire du trajet qu’il a emprunté.

Traceroute ne fait rien de plus qu’envoyer des paquets de données successif en incrémentant la valeur du TTL (en démarrant à 1). Pour y voir plus clair, voici ce qu’il fait:

  1. Envoi du paquet n°1 avec un TTL=1
  2. Le paquet arrive au premier saut (S1), son TTL passe alors à 0. Si S1 n’est pas la destination finale, il détruit le paquet et envoit un ICMP d’erreur à la source. La source reçoit donc l’adresse de S1 (via le message ICMP).
  3. Envoi du paquet n°2 avec un TTL=2
  4. Le paquet arrive à S1, TTL=2-1=1. Le TTL n’est pas à 0, S1 n’est pasl a destination, donc le paquet est envoyé vers le saut n°2.
  5. Le paquet n°2 arrive à S2, son TTL passe alors à 0. Si S2 n’est pas la destination finale, il détruit le paquet et envoit un ICMP d’erreur à la source. La source reçoit donc l’adresse de S1 (via le message ICMP).
  6. Envoi du paquet n°3 avec un TTL=3
  7. etc… en incrémentant progressivement le TTL de base jusqu’à ce que le paquet atteigne sa destination prévue.

Attention!!! … Les sauts ou points de passage des différents paquets peuvent différer de paquet en paquet. Sur un réseau qu’on ne maitrise pas et dont on ne connait pas la topologie, un traceroute ne représente rien de plus qu’une série de points de passages possibles et pas obligatoirement reliés les uns aux autres.

Voici un exemple:

On fait un traceroute de P1 vers P6. Le tracé noir représente les liaisons physiques.
Le trait vert représent un paquet avec un TTL=2, le trait rouge un paquet avec un TTL suffisant pour arriver à destination.
Pour une raison quelconque pendant le traceroute l’itinéraire utilisé par les paquets change (problème matériel, …). Lorsque le paquet vert est détruit, P1 reçoit l’adresse de P7. Pourtant le paquet « rouge » n’y passe pas pour arriver à P6.
Comme traceroute affiche les adresses des points qui ont détruits les paquets avec un TTL=0, il afficherait quelque chose comme: P1 -> P2 -> P7 -> P4 -> P5 -> P6
Et pourtant il n’y a pas de connexion direct possible entre P7 et P4.

Passons au traceroute manuel 😉
Nous allons ici faire exactement la même chose que traceroute, et ce à l’aide de la commande « ping ». (Ici avec la syntaxe Windows). Nous allons donc envoyer successivement des pings en modifiant la valeur de TTL et on verra que l’adresse qui répond au ping change à chaque modification du TTL jusqu’à ce que la destination soit atteint.

  1. Ouvrez une invite de commande MS-DOS (Menu démarrer -> Exécuter -> cmd.exe ).
  2. Tapez la commande: ping -n 1 -i 1 google.com   (-n 1 définit qu’on envoit un seul echo request, -i 1 définit le TTL).
  3. Tapez ensuite: ping -n 1 -i 2 google.com
  4. Ensuite: ping -n 1 -i 3 google.com
  5. etc … en augmentant la value de du TTL à chaque commande.

Voici la partie intéressante dans les réponses reçues:
Ping1 TTL=1: Réponse de 192.168.1.1 : Durée de vie expirée lors du transit.
Ping2 TTL=2: Réponse de 79.20.85.1 : Durée de vie expirée lors du transit.
Ping3 TTL=3: Réponse de 213.124.174.225 : Durée de vie expirée lors du transit.
Ping4 TTL=4: Réponse de 213.124.253.69 : Durée de vie expirée lors du transit.
etc…

Et voilà un traceroute manuel effectué 😉

2 Comments on “Réseau – Effectuer un Traceroute « manuel »