traceroute - Gibt die Route aus, die Pakete zu einem Netzwerk-Host verfolgen.
SYNTAX
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D]
[-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [packet_len]
traceroute6 [options]
tcptraceroute [options]
lft [options]
BESCHREIBUNG
traceroute verfolgt die Route, die Pakete von einem IP-Netzwerk auf ihrem Weg zu einem bestimmten Host nehmen. Es
verwendet das TTL-Feld (Time to Live) des IP-Protokolls und versucht, eine ICMP-Antwort vom Typ TIME_EXCEEDED von jedem Gateway auf dem Pfad zum Host zu erhalten.
traceroute6 ist äquivalent zu traceroute -6
tcptraceroute ist äquivalent zu traceroute -T
lft, die Layer Four Traceroute, führt eine TCP-Traceroute aus, ähnlich wie traceroute -T, versucht aber, die Kompatibilität mit der ursprünglichen Implementierung, die auch "lft" genannt wird, bereitzustellen.
Der einzige erforderliche Parameter ist der Name oder die IP-Adresse des Ziel-Hosts. Die optionale Paketgröße ist die Gesamtgröße des Sondierpakets (Standard 60 Bytes für IPv4 und 80 für IPv6). Die angegebene Größe kann in einigen Fällen ignoriert oder auf einen minimalen Wert erhöht werden.
Dieses Programm versucht, die Route zu verfolgen, die ein IP-Paket zu einem Internet-Host nehmen würde, indem es Sondierpakete mit einer kleinen TTL (Time to Live) sendet und dann auf eine ICMP-Antwort vom Typ "Time Exceeded" von einem Gateway hört. Wir beginnen mit unseren Sonden mit einem TTL von eins und erhöhen ihn schrittweise, bis wir eine ICMP-Antwort vom Typ "Port nicht erreichbar" (oder TCP-Reset) erhalten, was bedeutet, dass wir den "Host" erreicht oder die maximale Anzahl von Hops (Standard 30) erreicht haben. An jeder TTL-Einstellung werden standardmäßig drei Sonden gesendet, und es wird eine Zeile ausgegeben, die den TTL, die Adresse des Gateways und die Rundlaufzeit jeder Sonde anzeigt. Auf die Adresse können zusätzliche Informationen folgen, falls gewünscht. Wenn die Antworten von verschiedenen Gateways stammen, wird die Adresse jedes antwortenden Systems ausgegeben. Wenn innerhalb eines bestimmten Timeouts keine Antwort erfolgt, wird ein "*" (Sternchen) für diese Sonde ausgegeben.
Nach der Rundlaufzeit können einige zusätzliche Anmerkungen ausgegeben werden: !H, !N oder !P (Host, Netzwerk oder Protokoll nicht erreichbar), !S (Source Route fehlgeschlagen), !F (Fragmentierung erforderlich), !X (Kommunikation administrativ verboten), !V (Host-Prioritätsverletzung), !C (Prioritäts-Cutoff in Kraft) oder !
Wir möchten nicht, dass das Zielsystem die UDP-Probe-Pakete verarbeitet, daher ist der Zielport auf einen unwahrscheinlichen Wert gesetzt (Sie können ihn mit der Option -p ändern). Dies ist kein Problem für ICMP- oder TCP-Tracerouting (für TCP verwenden wir eine Half-Open-Technik, die verhindert, dass unsere Sonden von Anwendungen auf dem Zielsystem erkannt werden).
In der modernen Netzwerkumgebung sind die traditionellen Traceroute-Methoden nicht immer anwendbar, da Firewalls weit verbreitet sind. Solche Firewalls filtern die „unwahrscheinlichen“ UDP-Ports oder sogar ICMP-Echos. Um dies zu lösen, werden einige zusätzliche Tracerouting-Methoden implementiert (einschließlich TCP), siehe LISTE DER VERFÜGBAREN METHODEN unten. Diese Methoden versuchen, ein bestimmtes Protokoll und eine bestimmte Quell-/Zielportkombination zu verwenden, um Firewalls zu umgehen (sodass sie von Firewalls einfach als Start einer zulässigen Art von Netzwerksitzung angesehen werden).
OPTIONEN
--help Gibt Hilfsinformationen aus und beendet das Programm.
-4, -6 Erzwingt explizit IPv4- oder IPv6-Tracerouting. Standardmäßig versucht das Programm, den angegebenen Namen aufzulösen und das entsprechende Protokoll automatisch auszuwählen. Wenn beim Auflösen eines Hostnamens sowohl IPv4- als auch IPv6-Adressen zurückgegeben werden, verwendet Traceroute IPv4.
-I, --icmp
Verwendet ICMP-Echos für die Sonden.
-T, --tcp
Verwendet TCP-SYN für die Sonden.
-d, --debug
Aktiviert die Socket-Debugging-Funktion (wenn sie vom Linux-Kernel unterstützt wird).
-F, --dont-fragment
Fragmentiert die Sondenpakete nicht. (Für IPv4 setzt dies auch das DF-Bit, das den Zwischenroutern mitteilt, dass sie die Pakete nicht remote fragmentieren sollen).
Durch die Variation der Größe des Sondenpakets mit dem Befehlszeilenparameter packet_len können Sie manuell Informationen über die MTU der einzelnen Netzwerk-Hops erhalten. Die Option --mtu (siehe unten) versucht, dies automatisch zu tun.
Beachten Sie, dass nicht fragmentierende Funktionen (wie -F oder --mtu) erst ab Linux-Kernel 6.22 ordnungsgemäß funktionieren. Vor dieser Version wurde IPv6 immer fragmentiert, und IPv4 konnte nur die einmal aus dem Routen-Cache abgerufene MTU verwenden, die kleiner sein kann als die tatsächliche MTU eines Geräts.
-f first_ttl, --first=first_ttl
Gibt an, mit welcher TTL begonnen werden soll. Standardmäßig ist dies 1.
-g gateway, --gateway=gateway
Weist Traceroute an, eine IP-Quellenrouting-Option zum ausgehenden Paket hinzuzufügen, die das Netzwerk anweist, das Paket über das angegebene Gateway zu leiten (die meisten Router haben das Quellenrouting aus Sicherheitsgründen deaktiviert). Im Allgemeinen sind mehrere Gateways erlaubt (durch Komma getrennt). Für IPv6 ist das Format num,addr,addr... zulässig, wobei num ein Routing-Header-Typ ist (Standard ist Typ 2). Beachten Sie, dass der Routing-Header-Typ 0 jetzt veraltet ist (RFC 5095).
-i interface, --interface=interface
Gibt die Schnittstelle an, über die Traceroute Pakete senden soll. Standardmäßig wird die Schnittstelle anhand der Routingtabelle ausgewählt.
-m max_ttl, --max-hops=max_ttl
Gibt die maximale Anzahl von Hops (maximaler Time-to-Live-Wert) an, die Traceroute abfragt. Der Standardwert ist 30.
-N squeries, --sim-queries=squeries
Gibt die Anzahl der gleichzeitig gesendeten Probe-Pakete an. Das gleichzeitige Senden mehrerer Probes kann die Traceroute-Ausführung erheblich beschleunigen. Der Standardwert ist 16. Beachten Sie, dass einige Router und Hosts die ICMP-Ratenbegrenzung verwenden können. In einer solchen Situation kann die Angabe einer zu großen Anzahl dazu führen, dass einige Antworten verloren gehen.
-n Versuchen Sie nicht, IP-Adressen in Hostnamen umzuwandeln, wenn diese angezeigt werden.
-p port, --port=port
Für UDP-Tracing gibt dies den Basis-Zielport an, den Traceroute verwenden wird (die Zielportnummer wird für jede Probe inkrementiert). Für ICMP-Tracing gibt dies den anfänglichen ICMP-Sequenzwert an (der ebenfalls für jede Probe inkrementiert wird). Für TCP und andere gibt dies einfach den (konstanten) Zielport an, zu dem eine Verbindung hergestellt werden soll. Wenn Sie das tcptraceroute-Wrapper verwenden, gibt -p den Quellport an.
-t tos, --tos=tos
Für IPv4 wird der Type of Service (TOS)- und Precedence-Wert festgelegt. Nützliche Werte sind 16 (geringe Verzögerung) und 8 (hoher Durchsatz). Beachten Sie, dass Sie, um einige TOS-Precedence-Werte zu verwenden, Superuser-Rechte haben müssen. Für IPv6 wird der Traffic Control-Wert festgelegt.
-l flow_label, --flowlabel=flow_label
Verwenden Sie die angegebene flow_label für IPv6-Pakete.
-w max[,here,near], --wait=max[,here,near]
Bestimmt, wie lange auf eine Antwort auf eine Probe gewartet werden soll.
Es gibt drei (im Allgemeinen) Gleitkommawerte, die durch ein Komma (oder einen Schrägstrich) getrennt sind. Max gibt die maximale Zeit (in Sekunden, Standardwert 5,0) an, auf die in jedem Fall gewartet werden soll.
Die traditionelle Traceroute-Implementierung hat immer die volle max-Sekunden für jede Probe gewartet. Aber wenn wir bereits einige Antworten vom selben Hop oder sogar von einem nachfolgenden Hop haben, können wir die Round-Trip-Zeit einer solchen Antwort als Hinweis verwenden, um die tatsächliche vernünftige Wartezeit zu bestimmen.
Das optionale here (Standardwert 3,0) gibt einen Faktor an, mit dem die Round-Trip-Zeit einer bereits empfangenen Antwort vom selben Hop multipliziert wird. Der resultierende Wert wird als Timeout für die Probe verwendet, anstelle von (aber nicht länger als) max. Das optionale near (Standardwert 10,0) gibt einen ähnlichen Faktor für eine Antwort von einem nachfolgenden Hop an. (Die Zeit des ersten gefundenen Ergebnisses wird in beiden Fällen verwendet).
Zuerst suchen wir nach demselben Hop (von der Probe, die jetzt zuerst ausgegeben wird). Wenn nichts gefunden wird, suchen wir nach einem nachfolgenden Hop. Wenn nichts gefunden wird, verwenden wir max. Wenn here und/oder near den Wert Null haben, wird die entsprechende Berechnung übersprungen. Here und near sind immer auf Null gesetzt, wenn nur max angegeben ist (zur Kompatibilität mit früheren Versionen).
-q nqueries, --queries=nqueries
Setzt die Anzahl der Probe-Pakete pro Hop. Der Standardwert ist 3.
-r Umgeht die normalen Routingtabellen und sendet direkt an einen Host in einem angeschlossenen Netzwerk. Wenn
der Host sich nicht in einem direkt angeschlossenen Netzwerk befindet, wird ein Fehler zurückgegeben. Diese Option kann
verwendet werden, um einen lokalen Host über eine Schnittstelle zu pingen, die keine Route dorthin hat.
-s source_addr, --source=source_addr
Wählt eine alternative Quelladresse aus. Beachten Sie, dass Sie die Adresse einer der Schnittstellen auswählen müssen. Standardmäßig wird die Adresse der ausgehenden Schnittstelle verwendet.
-z sendwait, --sendwait=sendwait
Minimales Zeitintervall zwischen den Sonden (Standardwert 0). Wenn der Wert größer als 10 ist, wird er in Millisekunden angegeben, andernfalls in Sekunden (auch Gleitkommazahlen sind zulässig). Nützlich, wenn einige Router eine Ratenbegrenzung für ICMP-Nachrichten verwenden.
-e, --extensions
Zeigt ICMP-Erweiterungen (rfc4884) an. Das allgemeine Format ist CLASS/TYPE:, gefolgt von einem hexadezimalen Dump. MPLS (rfc4950) wird geparst und in folgendem Format angezeigt: MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (weitere Objekte sind durch / getrennt). Die Interface Information (rfc5837) wird ebenfalls geparst und in folgendem Format angezeigt: {INC|SUB|OUT|NXT}:index,IP_addr,"name",mtu=MTU (alle vier Felder können fehlen).
-A, --as-path-lookups
Führt AS-Pfad-Nachschlagen in Routing-Registern durch und gibt die Ergebnisse direkt nach den entsprechenden Adressen aus.
-V, --version
Gibt die Version aus und beendet das Programm.
Es gibt zusätzliche Optionen, die für die erweiterte Verwendung gedacht sind (z. B. alternative Tracing-Methoden usw.):
--sport=port
Wählt den Quellport für die Verwendung aus. Impliziert -N 1 -w 5. Normalerweise werden Quellports (falls zutreffend) vom System ausgewählt.
--fwmark=mark
Setzt die Firewall-Markierung für ausgehende Pakete (ab Linux-Kernel 2.6.25).
-M method, --module=name
Verwendet die angegebene Methode für Traceroute-Operationen. Die Standard-UDP-Methode hat den Namen "default", ICMP (-I) und TCP (-T) haben die Namen "icmp" bzw. "tcp". Methodenspezifische Optionen können mit -O übergeben werden. Die meisten Methoden haben ihre eigenen einfachen Abkürzungen (z. B. bedeutet -I -M icmp usw.).
-O option, --options=options
Gibt eine methodenspezifische Option an. Mehrere Optionen werden durch ein Komma getrennt (oder verwenden Sie mehrere -O in der Befehlszeile). Jede Methode kann ihre eigenen spezifischen Optionen haben oder gar keine. Um Informationen über verfügbare Optionen anzuzeigen, verwenden Sie -O help.
-U, --udp
Verwendet UDP für ein bestimmtes Zielport für das Tracerouting (anstelle der Erhöhung des Ports für jede Sonde). Der Standardport ist 53 (DNS).
-UL Verwendet UDPLITE für das Tracerouting (Standardport ist 53).
-D, --dccp
Verwendet DCCP-Anforderungen für die Sonden.
-P protocol, --protocol=protocol
Verwendet ein rohes Paket des angegebenen Protokolls für das Tracerouting. Das Standardprotokoll ist 253 (rfc3692).
--mtu Ermittelt die MTU entlang des verfolgten Pfads. Impliziert -F -N 1. Die neue MTU wird einmal in der Form F=NUM bei der ersten Sonde eines Hops ausgegeben, der diese MTU benötigt. (Tatsächlich wird die entsprechende "Fragmentierung erforderlich"-ICMP-Nachricht normalerweise vom vorherigen Hop gesendet).
Beachten Sie, dass einige Router die einmal gesehenen Informationen über eine Fragmentierung möglicherweise zwischenspeichern. Daher können Sie die endgültige MTU von einem näheren Hop erhalten. Versuchen Sie, einen ungewöhnlichen TOS mit -t anzugeben, dies kann für einen Versuch helfen (danach kann es auch dort zwischengespeichert werden). Siehe Option -F für weitere Informationen.
--back Gibt die Anzahl der Rückwärts-Hops aus, wenn sie sich von der Vorwärtsrichtung zu unterscheiden scheint.
Diese Anzahl wird unter der Annahme geschätzt, dass die Remote-Hops Antwortpakete mit einer anfänglichen TTL von entweder 64, 128 oder 255 senden (was eine gängige Praxis zu sein scheint). Sie wird als negativer Wert in der Form '-NUM' ausgegeben.
LISTE DER VERFÜGBAREN METHODEN
Im Allgemeinen muss eine bestimmte Traceroute-Methode mit -M name ausgewählt werden, aber die meisten Methoden haben ihre einfachen Befehlszeilenschalter (diese können Sie nach dem Methodennamen sehen, falls vorhanden).
default
Die traditionelle, alte Methode des Traceroutings. Wird standardmäßig verwendet.
Die Sondierpakete sind UDP-Datagramme mit sogenannten „unwahrscheinlichen“ Zielports. Der „unwahrscheinliche“ Port des ersten Sondierpakets ist 33434, dann wird er für jedes nächste Sondierpaket um eins erhöht. Da davon ausgegangen wird, dass die Ports nicht verwendet werden, sendet das Ziel normalerweise eine „icmp unreach port“-Antwort als endgültige Antwort. (Niemand weiß, was passiert, wenn eine Anwendung auf diese Ports hört).
Diese Methode ist für nicht privilegierte Benutzer erlaubt.
icmp -I
Die heutzutage am häufigsten verwendete Methode, die ICMP-Echo-Pakete für Sonden verwendet. Wenn Sie das Ziel mit ping(8) anpingen können, ist das ICMP-Tracerouting ebenfalls anwendbar.
Diese Methode kann für nicht privilegierte Benutzer ab Kernel 3.0 (IPv4, für IPv6 ab 11, was neue dgram ICMP- (oder „ping“-) Sockets unterstützt) erlaubt sein. Um solche Sockets zu ermöglichen, muss der Systemadministrator einen net/ipv4/ping_group_range sysctl-Bereich bereitstellen, der mit einer beliebigen Gruppe des Benutzers übereinstimmt. Optionen:
raw Nur Raw-Sockets verwenden (die traditionelle Methode).
Diese Methode wird zuerst ausprobiert (aus Kompatibilitätsgründen), dann werden neue dgram ICMP-Sockets als Fallback verwendet.
dgram Nur dgram ICMP-Sockets verwenden.
tcp -T
Eine bekannte moderne Methode, die dazu dient, Firewalls zu umgehen. Verwendet einen konstanten Zielport (standardmäßig 80, http).
Wenn im Netzwerkpfad Filter vorhanden sind, werden höchstwahrscheinlich alle „unwahrscheinlichen“ UDP-Ports (wie bei der Standardmethode) oder sogar ICMP-Echos (wie bei ICMP) gefiltert, und das gesamte Tracerouting stoppt an einer solchen Firewall. Um einen Netzwerkfilter zu umgehen, müssen wir nur zulässige Protokoll-/Port-Kombinationen verwenden. Wenn wir beispielsweise einen Mailserver verfolgen, ist es wahrscheinlicher, dass -T -p 25 ihn erreichen kann, selbst wenn -I dies nicht kann.
Diese Methode verwendet eine bekannte „Half-Open-Technik“, die verhindert, dass Anwendungen auf dem Zielhost unsere Sonden überhaupt sehen. Normalerweise wird ein TCP SYN gesendet. Für nicht abgehörte Ports erhalten wir ein TCP RESET, und damit ist es erledigt. Für aktive, abgehörte Ports erhalten wir ein TCP SYN+ACK, antworten aber mit einem TCP RESET (anstatt der erwarteten TCP ACK), wodurch die Remote-TCP-Sitzung ohne jegliche Kenntnis der Anwendung beendet wird.
Es gibt ein paar Optionen für die TCP-Methode:
syn,ack,fin,rst,psh,urg,ece,cwr
Setzt die angegebenen TCP-Flags für das Sondierpaket in beliebiger Kombination.
flags=num
Setzt das Flags-Feld im TCP-Header genau auf num.
ecn Senden Sie ein SYN-Paket mit den TCP-Flags ECE und CWR (für Explicit Congestion Notification, RFC3168).
sack,timestamps,window_scaling
Verwenden Sie die entsprechende TCP-Header-Option im ausgehenden Sondierpaket.
sysctl Verwenden Sie die aktuelle sysctl-Einstellung (/proc/sys/net/*) für die oben genannten TCP-Header-Optionen und ecn.
Wird standardmäßig immer verwendet, wenn nichts anderes angegeben ist.
fastopen
Verwenden Sie die Fastopen-TCP-Option (bei SYN) nur für die anfängliche Cookie-Aushandlung.
mss=[num]
Verwenden Sie den Wert von num (oder unverändert) für die Maxseg-TCP-Header-Option (bei SYN) und ermitteln Sie die Einschränkung entlang des verfolgten Pfads. Der geänderte MSS-Wert wird einmal in der Form M=NUM bei der ersten Sonde angezeigt, bei der er erkannt wurde. Beachten Sie, dass einige Router möglicherweise ein zu kurzes ursprüngliches Fragment in der Zeitüberschreitungsmeldung zurückgeben, wodurch die Überprüfung unmöglich wird. Außerdem können die Antworten in einer anderen Reihenfolge eingehen. All dies kann dazu führen, dass der Bericht an einer späteren Stelle erfolgt (die Verwendung von -N 1 kann bei der Reihenfolge helfen).
info Drucken Sie die TCP-Flags und unterstützten Optionen der endgültigen TCP-Antworten, wenn das Zielhost erreicht wird. Ermöglicht die Bestimmung, ob eine Anwendung auf dem Port lauscht, und andere nützliche Informationen. Unterstützte TCP-Optionen sind alle, die mit -T -O eingestellt werden können, d. h. mss, sack, Zeitstempel, Window-Scaling und Fastopen, mit dem ähnlichen Ausgabeformat (ein Wert für mss und nur die Anwesenheit für andere).
Standardoptionen sind syn, sysctl.
tcpconn
Eine erste Implementierung der TCP-Methode, die einfach einen connect(2)-Aufruf verwendet und eine vollständige TCP-Sitzung öffnet. Nicht für den normalen Gebrauch empfohlen, da die Zielanwendung immer beeinträchtigt wird (und verwirrt werden kann).
udp -U
Verwenden Sie ein UDP-Datagramm mit einem konstanten Zielport (standardmäßig 53, DNS). Soll die Firewall umgehen.
Beachten Sie, dass im Gegensatz zur TCP-Methode die entsprechende Anwendung auf dem Zielhost immer unsere Sonden empfängt (mit zufälligen Daten), und die meisten können durch diese leicht verwirrt werden. In den meisten Fällen antworten sie jedoch nicht auf unsere Pakete, sodass wir den letzten Hop in der Ablaufverfolgung nicht sehen können. (Glücklicherweise scheinen zumindest DNS-Server mit etwas Ärger zu antworten).
Diese Methode ist für nicht privilegierte Benutzer erlaubt.
udplite -UL
Verwenden Sie ein UDPLite-Datagramm für Sonden (mit einem konstanten Zielport, standardmäßig 53).
Diese Methode ist für nicht privilegierte Benutzer erlaubt. Optionen:
coverage=num
Legen Sie die UDPLite-Sendeverdeckung auf num fest.
dccp -D
Verwenden Sie DCCP-Anforderungspakete für Sonden (RFC4340).
Diese Methode verwendet die gleiche "halb-offene Technik" wie für TCP. Der Standardzielport ist 3343.
Optionen:
service=num
Legen Sie den DCCP-Dienstcode auf num fest (standardmäßig 1885957735).
raw -P proto
Senden Sie ein Raw-Paket des Protokolls proto. Es werden keine protokollspezifischen Header verwendet, nur der IP-Header. Impliziert -N 1 -w 5. Optionen:
protocol=proto
Verwenden Sie das IP-Protokoll proto (standardmäßig 253).
HINWEISE
Um die Arbeit zu beschleunigen, werden normalerweise mehrere Sonden gleichzeitig gesendet. Andererseits erzeugt dies einen "Paketsturm", insbesondere in der Antwortrichtung. Router können die Rate der ICMP-Antworten drosseln, und einige Antworten können verloren gehen. Um dies zu vermeiden, verringern Sie die Anzahl der gleichzeitigen Sonden oder setzen Sie sie sogar auf 1 (wie in der ursprünglichen Traceroute-Implementierung), d. h. -N 1.
Der endgültige (Ziel-)Host kann einige der gleichzeitigen Sonden verwerfen und möglicherweise nur die neuesten beantworten. Dies kann zu zusätzlichen „sieht aus wie abgelaufene“ Hops in der Nähe des letzten Hops führen. Wir verwenden einen intelligenten Algorithmus, um eine solche Situation automatisch zu erkennen, aber wenn dies in Ihrem Fall nicht hilft, verwenden Sie einfach -N 1.
Für noch mehr Stabilität können Sie die Arbeitsweise des Programms mit der Option -z verlangsamen, z. B. -z 5 für eine halbe Sekunde Pause zwischen den Sonden.
Um unnötiges Warten zu vermeiden, verwenden wir einen adaptiven Algorithmus für Timeouts (siehe die Option -w für weitere Informationen). Dies kann zu einem vorzeitigen Ablauf (insbesondere wenn sich die Antwortzeiten ändern) und zur Ausgabe von „*“ anstelle einer Zeit führen. In diesem Fall schalten Sie diesen Algorithmus aus, indem Sie -w mit dem gewünschten Timeout angeben (z. B. -w 5).
Wenn einige Hops bei jeder Methode nichts melden, besteht die letzte Möglichkeit, etwas zu erhalten, darin, den Befehl ping -R (IPv4 und nur für die nächsten 8 Hops) zu verwenden.