Das Programm traceroute hat mich schon immer fasziniert. Technisch gesehen ist es simpel: es sendet UDP-Datagramme mit steigenden "time to live"-Werten (TTL) raus, und wertet die eintreffenden ICMP-Datagramme aus. Der TTL-Wert gibt an, wie viele Hops das Datagramm noch zurücklegen kann, bis es verworfen wird. Der Host, der das Datagramm wegen abgelaufener TTL verwirft, sendet eine ICMP-Meldung an den Sender zurück. Was so einfach klingt, erzeugt in der Praxis faszinierende Ausgaben:
traceroute to www.freebsd.org (69.147.83.33), 30 hops max, 28 byte packets 1 192.168.0.1 (192.168.0.1) 1 ms 2 217.0.119.219 (217.0.119.219) 19 ms 3 217.0.90.194 (217.0.90.194) 22 ms 4 f-ea5-i.F.DE.NET.DTAG.DE (62.154.16.161) 19 ms 5 te-4-4.car2.Frankfurt1.Level3.net (4.68.110.253) 23 ms 6 vlan69.csw1.Frankfurt1.Level3.net (4.68.23.62) 24 ms 7 ae-62-62.ebr2.Frankfurt1.Level3.net (4.69.140.17) 23 ms 8 ae-44-44.ebr2.Washington1.Level3.net (4.69.137.62) 111 ms 9 ae-92-92.csw4.Washington1.Level3.net (4.69.134.158) 113 ms 10 ae-94-94.ebr4.Washington1.Level3.net (4.69.134.189) 117 ms 11 ae-3-3.ebr1.NewYork1.Level3.net (4.69.132.94) 114 ms 12 ae-91-91.csw4.NewYork1.Level3.net (4.69.134.78) 126 ms 13 ae-94-94.ebr4.NewYork1.Level3.net (4.69.134.125) 116 ms 14 ae-2-2.ebr4.SanJose1.Level3.net (4.69.135.185) 187 ms 15 ae-64-64.csw1.SanJose1.Level3.net (4.69.134.242) 187 ms 16 ae-13-69.car3.SanJose1.Level3.net (4.68.18.5) 180 ms 17 4.71.112.14 (4.71.112.14) 219 ms 18 ae-0-d161.msr1.sp1.yahoo.com (216.115.107.59) 180 ms 19 gi-1-43.bas-b1.sp1.yahoo.com (209.131.32.29) 180 ms 20 www.freebsd.org (69.147.83.33) 180 ms
Man kann förmlich sehen, welchen Weg die Datagramme nehmen. Es gibt sogar Implementierungen, die zu den einzelnen Hops geographische Daten ermitteln und diese darstellen; meine Implementierung beschränkt sich auf das Ausgeben der einzelnen Hops in Textform.
Das Programm verwendet einen gewöhnlichen UDP-Socket und setzt die TTL über die Socket-Option IP_TTL. Um die ICMP-Antworten zu empfangen, wird ein Raw Socket für ICMP eingesetzt. Aus diesem Grund ist es auch notwendig, das Programm mit root-Rechten zu starten. Es ist erstaunlich simpel und kurz, weshalb ich auch bisher widerstehen konnte, es wie die meisten anderen Programme einer Überarbeitung zu unterziehen. Allerdings sehe ich ein potenzielles Problem in der Genauigkeit der Timeouts, wenn zwischendrin andere ICMP-Pakete empfangen werden.
Datum | Version | Datei | Beschreibung |
---|---|---|---|
2003-08-31 | 1.0 | traceroute-1.0.tar.gz | Quellcode |