Au préalable, il faut installer tous les packages nécessaires pour faire des graphiques.
sudo apt-get install tcpdump graphviz imagemagick python-gnuplot python-crypto python-pyx
Nous allons faire un graphe du chemin pris pour atteindre www.tf1.fr en envoyant un paquet traceroute.
Avant de faire le graphe du chemin pris par traceroute, on affichera les réponses au format texte.
sudo scapy
[sudo] password for xxxxx:
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)
>>> sn,unans=traceroute(["www.tf1.fr"],maxttl=10)
Begin emission:
*.*.*.*.*.Finished to send 10 packets.
*.*.*.*...
Received 20 packets, got 9 answers, remaining 1 packets
23.200.87.158:tcp80
1 192.168.1.254 11
2 5.50.10.254 11
3 62.35.253.193 11
4 89.89.101.33 11
5 212.194.171.6 11
7 62.34.0.98 11
8 23.200.87.158 SA
9 23.200.87.158 SA
10 23.200.87.158 SA
>>> sn.nsummary()
0000 IP / TCP 192.168.1.2:17239 > 23.200.87.158:http S ==> IP / ICMP 192.168.1.254 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror
0001 IP / TCP 192.168.1.2:10443 > 23.200.87.158:http S ==> IP / ICMP 62.35.253.193 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror
0002 IP / TCP 192.168.1.2:5701 > 23.200.87.158:http S ==> IP / ICMP 5.50.10.254 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror
0003 IP / TCP 192.168.1.2:16247 > 23.200.87.158:http S ==> IP / ICMP 89.89.101.33 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror
0004 IP / TCP 192.168.1.2:16605 > 23.200.87.158:http S ==> IP / ICMP 212.194.171.6 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror / Padding
0005 IP / TCP 192.168.1.2:56709 > 23.200.87.158:http S ==> IP / ICMP 62.34.0.98 > 192.168.1.2 time-exceeded ttl-zero-during-transit / IPerror / TCPerror / Padding
0006 IP / TCP 192.168.1.2:51284 > 23.200.87.158:http S ==> IP / TCP 23.200.87.158:http > 192.168.1.2:51284 SA / Padding
0007 IP / TCP 192.168.1.2:59111 > 23.200.87.158:http S ==> IP / TCP 23.200.87.158:http > 192.168.1.2:59111 SA / Padding
0008 IP / TCP 192.168.1.2:32305 > 23.200.87.158:http S ==> IP / TCP 23.200.87.158:http > 192.168.1.2:32305 SA / Padding
>>> unans.nsummary()
0000 IP / TCP 192.168.1.2:47871 > 23.200.87.158:http S
>>> sn.graph()
ce qui donne sous forme graphique :
Quelques explications :
192.168.1.254 est l'IP privée de ma box Bouygues Telecom
5.50.10.254 est donc le premier routeur de Bouygues Telecom que ma box utilise pour sortir sur Internet.
Pour TTL6, le routeur n'a pas répondu, donc on ne peut pas connaître l'IP de ce routeur (sur le graphe unk0 , et unans.nsummary().
On voit que traceroute envoie en fait des paquets TCP avec flag SYN (S) et port 80 (http) (vers www.tf1.fr (en incrémentant le TTL, et le routeur, qui ne peut transmettre ce paquet, répond par une erreur ICMP, ce qui permet de connaître l'IP du routeur.