Manuels pour la ligne de commande

Man » Manuel traceroute en ligne - documentation en ligne détaillée pour la page de manuel traceroute

🌍
traceroute - affiche le chemin suivi par les paquets vers un hôte réseau.

SYNTAXE

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]

DESCRIPTION

traceroute suit le chemin suivi par les paquets à partir d'un réseau IP jusqu'à un hôte donné. Il
utilise le champ TTL (Time To Live) du protocole IP et tente d'obtenir une réponse ICMP TIME_EXCEEDED
de chaque passerelle le long du chemin vers l'hôte.

traceroute6 est équivalent à traceroute -6

tcptraceroute est équivalent à traceroute -T

lft, le Layer Four Traceroute, effectue une trace de route TCP, comme traceroute -T, mais tente de
fournir une compatibilité avec l'implémentation originale, également appelée "lft".

Le seul paramètre requis est le nom ou l'adresse IP de l'hôte de destination. Le paramètre optionnel packet_len`gth est la taille totale du paquet de sondage (par défaut, 60 octets pour IPv4 et 80 pour IPv6). La taille spécifiée peut être ignorée dans certaines situations ou augmentée jusqu'à une valeur minimale.

Ce programme tente de tracer le chemin qu'un paquet IP suivrait jusqu'à un hôte Internet en envoyant des paquets de sondage avec un petit TTL (Time To Live), puis en écoutant une réponse ICMP "time exceeded" d'une passerelle. Nous commençons nos sondes avec un TTL de un et l'incrémentons d'un jusqu'à ce que nous atteignions un ICMP "port unreachable" (ou une réinitialisation TCP), ce qui signifie que nous avons atteint l'"hôte", ou que nous avons atteint un maximum (qui est par défaut de 30 sauts). Trois sondes (par défaut) sont envoyées pour chaque valeur de TTL, et une ligne est affichée indiquant le TTL, l'adresse de la passerelle et le temps de trajet aller-retour de chaque sonde. L'adresse peut être suivie d'informations supplémentaires si cela est demandé. S'il n'y a pas de réponse dans un certain délai d'attente, un "*" (astérisque) est affiché pour cette sonde.

Après le temps de trajet, certaines annotations supplémentaires peuvent être affichées: !H, !N ou !P (hôte, réseau ou protocole inaccessible), !S (échec de l'itinéraire source), !F (fragmentation nécessaire), !X (communication administrativement interdite), !V (violation de la priorité de l'hôte), !C (limite de priorité en vigueur) ou ! (code ICMP unreachable ). Si presque toutes les sondes entraînent un type d'échec, traceroute abandonne et se termine.


Nous ne voulons pas que l’hôte de destination traite les paquets de sondage UDP, donc le port de destination est défini sur une valeur improbable (vous pouvez le modifier avec l’option -p). Il n’y a pas de problème similaire pour le traceroute ICMP ou TCP (pour TCP, nous utilisons la technique de « half-open », qui empêche nos sondes d’être vues par les applications sur l’hôte de destination).

Dans l’environnement réseau moderne, les méthodes de traceroute traditionnelles ne sont pas toujours applicables, en raison de l’utilisation généralisée des pare-feu. Ces pare-feu filtrent les ports UDP « improbables » ou même les échos ICMP. Pour résoudre ce problème, des méthodes de traceroute supplémentaires sont implémentées (y compris TCP), voir la LISTE DES MÉTHODES DISPONIBLES ci-dessous. Ces méthodes tentent d’utiliser un protocole et un port source/destination spécifiques afin de contourner les pare-feu (afin d’être perçus par les pare-feu comme le début d’un type de session réseau autorisé).

OPTIONS

--help Affiche l’aide et quitte.

-4, -6 Force explicitement le traceroute IPv4 ou IPv6. Par défaut, le programme tentera de résoudre le nom donné et choisira le protocole approprié automatiquement. Si la résolution d’un nom d’hôte renvoie à la fois des adresses IPv4 et IPv6, traceroute utilisera IPv4.

-I, --icmp
Utilise ICMP ECHO pour les sondes.

-T, --tcp
Utilise TCP SYN pour les sondes.

-d, --debug
Active le débogage au niveau de la socket (lorsque le noyau Linux le prend en charge).

-F, --dont-fragment
Ne fragmente pas les paquets de sondage. (Pour IPv4, cela définit également le bit DF, qui indique aux routeurs intermédiaires de ne pas fragmenter à distance).

En faisant varier la taille du paquet de sondage à l’aide du paramètre de ligne de commande packet_len, vous pouvez obtenir manuellement des informations sur la MTU de chaque saut réseau. L’option --mtu (voir ci-dessous) tente de le faire automatiquement.

Notez que les fonctionnalités de non-fragmentation (comme -F ou --mtu) fonctionnent correctement depuis la version 6.22 du noyau Linux. Avant cette version, IPv6 était toujours fragmenté, et IPv4 pouvait utiliser uniquement la MTU finale découverte (à partir du cache de routage), qui peut être inférieure à la MTU réelle d’un appareil.

-f first_ttl, --first=first_ttl
Spécifie la valeur de TTL à partir de laquelle commencer. Par défaut, la valeur est de 1.

-g gateway, --gateway=gateway
Indique à traceroute d’ajouter une option de routage source au paquet sortant, qui indique au réseau de router le paquet via la passerelle spécifiée (la plupart des routeurs ont désactivé le routage source pour des raisons de sécurité). En général, plusieurs passerelles sont autorisées (séparées par des virgules). Pour IPv6, le format num,addr,addr... est autorisé, où num est un type d’en-tête de routage (par défaut, il s’agit du type 2). Notez que le type d’en-tête de routage 0 est désormais obsolète (rfc5095).

-i interface, --interface=interface
Spécifie l’interface par laquelle traceroute doit envoyer les paquets. Par défaut, l’interface est sélectionnée en fonction de la table de routage.

-m max_ttl, --max-hops=max_ttl
Spécifie le nombre maximum de sauts (valeur maximale de durée de vie) que traceroute doit explorer. La valeur par défaut est de 30.

-N squeries, --sim-queries=squeries
Spécifie le nombre de paquets de sondage envoyés simultanément. L'envoi de plusieurs sondes en même temps peut considérablement accélérer le traceroute. La valeur par défaut est 16.
Notez que certains routeurs et hôtes peuvent utiliser une limitation du débit ICMP. Dans une telle situation, la spécification d'un nombre trop important peut entraîner la perte de certaines réponses.

-n
Ne tente pas de mapper les adresses IP vers des noms d'hôtes lors de leur affichage.

-p port, --port=port
Pour le traçage UDP, spécifie le port de destination de base que traceroute utilisera (le numéro de port de destination sera incrémenté pour chaque sonde).
Pour le traçage ICMP, spécifie la valeur de séquence ICMP initiale (qui est également incrémentée pour chaque sonde).
Pour TCP et autres, spécifie simplement le port de destination (constant) auquel se connecter. Lors de l'utilisation du wrapper tcptraceroute, -p spécifie le port source.

-t tos, --tos=tos
Pour IPv4, définit la valeur Type de Service (TOS) et de priorité. Les valeurs utiles sont 16 (faible délai) et 8 (rendement élevé). Notez que pour utiliser certaines valeurs de priorité TOS, vous devez être un superutilisateur.
Pour IPv6, définit la valeur de contrôle de trafic.

-l flow_label, --flowlabel=flow_label
Utilise la valeur flow_label spécifiée pour les paquets IPv6.

-w max[,here,near], --wait=max[,here,near]
Détermine la durée pendant laquelle attendre une réponse à une sonde.

Il existe trois valeurs (en général) flottantes séparées par une virgule (ou une barre oblique). Max spécifie le temps maximum (en secondes, par défaut 5,0) à attendre, dans tous les cas.

L'implémentation traditionnelle de traceroute attendait toujours pendant toute la durée de max secondes pour chaque sonde. Mais si nous avons déjà reçu des réponses du même saut, ou même d'un saut suivant, nous pouvons utiliser le temps d'aller-retour d'une telle réponse comme indication pour déterminer la durée d'attente réelle.

La valeur facultative here (par défaut 3,0) spécifie un facteur par lequel multiplier le temps d'aller-retour d'une réponse déjà reçue du même saut. La valeur résultante est utilisée comme délai d'attente pour la sonde, au lieu de (mais pas plus de) max. La valeur facultative near (par défaut 10,0) spécifie un facteur similaire pour une réponse d'un saut suivant. (Le temps du premier résultat trouvé est utilisé dans les deux cas).

Tout d'abord, nous recherchons le même saut (du paquet qui sera imprimé en premier à partir de maintenant). Si rien n'est trouvé, nous recherchons un saut suivant. Si rien n'est trouvé, utilisez max. Si here et/ou near ont des valeurs nulles, le calcul correspondant est ignoré.
Here et near sont toujours définis sur zéro si seul max est spécifié (pour la compatibilité avec les versions précédentes).

-q nqueries, --queries=nqueries
Définit le nombre de paquets de sondage par saut. La valeur par défaut est 3.

-r
Contourne les tables de routage normales et envoie directement à un hôte sur un réseau connecté. Si l'hôte ne se trouve pas sur un réseau directement connecté, une erreur est renvoyée. Cette option peut être utilisée pour envoyer un ping à un hôte local via une interface qui n'a pas de route vers celui-ci.

-s source_addr, --source=source_addr
Choisit une adresse source alternative. Notez que vous devez sélectionner l'adresse d'une des interfaces. Par défaut, l'adresse de l'interface sortante est utilisée.

-z sendwait, --sendwait=sendwait

Intervalle de temps minimal entre les sondes (par défaut : 0). Si la valeur est supérieure à 10, elle indique un nombre en millisecondes, sinon, il s’agit d’un nombre de secondes (les valeurs à virgule flottante sont également autorisées). Utile lorsque certains routeurs utilisent une limitation de débit pour les messages ICMP.

-e, --extensions

Affiche les extensions ICMP (rfc4884). La forme générale est CLASS/TYPE : suivie d’un dump hexadécimal. MPLS (rfc4950) est affiché analysé, sous la forme : MPLS : L=label, E=exp_use, S=stack_bottom, T=TTL (plus d’objets séparés par /). L’information sur l’interface (rfc5837) est également affichée analysée, sous la forme suivante : {INC|SUB|OUT|NXT}:index,IP_addr,"name",mtu=MTU (les quatre champs peuvent être manquants).

-A, --as-path-lookups

Effectue des recherches de chemin AS dans les registres de routage et affiche les résultats directement après les adresses correspondantes.

-V, --version

Affiche la version et quitte.

Il existe des options supplémentaires destinées à une utilisation avancée (telles que des méthodes de traçage alternatives, etc.) :

--sport=port

Choisit le port source à utiliser. Implique -N 1 -w 5. Normalement, les ports source (le cas échéant) sont choisis par le système.

--fwmark=mark

Définit le marquage du pare-feu pour les paquets sortants (depuis le noyau Linux 2.6.25).

-M method, --module=name

Utilise la méthode spécifiée pour les opérations de traceroute. La méthode UDP par défaut a pour nom « default », ICMP (-I) et TCP (-T) ont pour noms « icmp » et « tcp », respectivement. Les options spécifiques à la méthode peuvent être transmises à l’aide de -O. La plupart des méthodes ont leurs raccourcis simples (-I signifie -M icmp, etc.).

-O option, --options=options

Spécifie une option spécifique à la méthode. Plusieurs options sont séparées par une virgule (ou utilisez plusieurs -O sur la ligne de commande). Chaque méthode peut avoir ses propres options spécifiques, ou peut ne pas en avoir du tout. Pour afficher des informations sur les options disponibles, utilisez -O help.

-U, --udp

Utilise UDP vers un port de destination spécifique pour le traceroute (au lieu d’incrémenter le port pour chaque sonde). Le port par défaut est 53 (dns).

-UL Utilise UDPLITE pour le traceroute (le port par défaut est 53).

-D, --dccp

Utilise les requêtes DCCP pour les sondes.

-P protocol, --protocol=protocol

Utilise un paquet brut du protocole spécifié pour le traceroute. Le protocole par défaut est 253 (rfc3692).

--mtu Découvre la MTU le long du chemin suivi. Implique -F -N 1. La nouvelle MTU est affichée une fois
sous la forme F=NUM lors de la première sonde d’un saut qui nécessite que cette MTU soit atteinte. (En fait, le message ICMP « fragmentation nécessaire » correspondant est normalement envoyé par le saut précédent).

Notez que certains routeurs peuvent mettre en cache les informations une fois qu’ils les ont vues sur une fragmentation. Ainsi, vous pouvez recevoir la MTU finale d’un saut plus proche. Essayez de spécifier un tos inhabituel à l’aide de -t, cela peut aider pour une tentative (puis cela peut également être mis en cache). Voir l’option -F pour plus d’informations.

--back Affiche le nombre de sauts en arrière lorsque cela semble différent de la direction avant.

Ce nombre est supposé dans l’hypothèse que les sauts distants envoient des paquets de réponse avec un ttl initial défini sur 64, 128 ou 255 (ce qui semble être une pratique courante). Il est affiché sous la forme d’une valeur négative, sous la forme « -NUM ».


LISTE DES MÉTHODES DISPONIBLES

En général, une méthode de traceroute spécifique doit être choisie avec l'option -M nom, mais la plupart des méthodes ont leurs propres options en ligne de commande (vous pouvez les voir après le nom de la méthode, si elles sont présentes).

default

La méthode traditionnelle et ancienne de traceroute. Utilisée par défaut.

Les paquets de sondage sont des datagrammes UDP avec des ports de destination « improbables ». Le port « improbable » du premier paquet de sondage est 33434, puis il est incrémenté de un pour chaque paquet de sondage suivant. Étant donné que ces ports sont censés être inutilisés, l’hôte de destination renvoie normalement un « icmp unreach port » en tant que réponse finale. (Personne ne sait ce qui se passe lorsqu’une application écoute ces ports, cependant).

Cette méthode est autorisée pour les utilisateurs non privilégiés.

icmp       -I

La méthode la plus courante aujourd’hui, qui utilise des paquets ICMP echo pour les sondages. Si vous pouvez ping(8) l’hôte de destination, le traceroute ICMP est également applicable.

Cette méthode peut être autorisée pour les utilisateurs non privilégiés depuis le noyau 3.0 (IPv4, pour IPv6 depuis la version 11, qui prend en charge les nouvelles prises dgram ICMP, ou « ping »). Pour autoriser ces prises, l’administrateur système doit fournir la plage sysctl net/ipv4/ping_group_range pour qu’elle corresponde à n’importe quel groupe de l’utilisateur. Options :

raw    Utiliser uniquement les prises brutes (la méthode traditionnelle).

Cette méthode est d’abord tentée par défaut (pour des raisons de compatibilité), puis les nouvelles prises dgram ICMP sont utilisées en tant que solution de repli.

dgram  Utiliser uniquement les prises dgram ICMP.

tcp        -T

Méthode moderne bien connue, conçue pour contourner les pare-feu. Utilise un port de destination constant (la valeur par défaut est 80, http).

Si des filtres sont présents dans le chemin du réseau, il est probable que tous les ports UDP « improbables » (comme pour la méthode par défaut) ou même les échos ICMP (comme pour ICMP) soient filtrés, et que le traceroute s’arrête simplement à ce pare-feu. Pour contourner un filtre réseau, nous devons utiliser uniquement les combinaisons de protocoles/ports autorisées. Si nous traçons, par exemple, un serveur de messagerie, il est plus probable que -T -p 25 puisse l’atteindre, même si -I ne le peut pas.

Cette méthode utilise la technique « half-open » bien connue, qui empêche les applications sur l’hôte de destination de voir nos sondes. Normalement, un SYN TCP est envoyé. Pour les ports non écoutés, nous recevons un RESET TCP, et c’est tout. Pour les ports d’écoute actifs, nous recevons un SYN+ACK TCP, mais nous répondons par un RESET TCP (au lieu du ACK TCP attendu), ce qui interrompt la session TCP distante sans que l’application n’en prenne même connaissance.

Il existe quelques options pour la méthode TCP :

syn,ack,fin,rst,psh,urg,ece,cwr

Définit les drapeaux TCP spécifiés pour le paquet de sondage, dans n’importe quelle combinaison.

flags=num

Définit le champ des drapeaux dans l’en-tête TCP exactement à la valeur num.

ecn    Envoyer un paquet SYN avec les drapeaux TCP ECE et CWR (pour la notification explicite de congestion, RFC 3168).

sack,timestamps,window_scaling

Utiliser l’option d’en-tête TCP correspondante dans le paquet de sondage sortant.


sysctl Utilise les paramètres actuels de sysctl (/proc/sys/net/*) pour les options d’en-tête TCP et ecn ci-dessus.

Défini par défaut, sauf indication contraire.

fastopen

Utilise l’option TCP fastopen (lors de la synchronisation), uniquement pour la négociation initiale des cookies.

mss=[num]

Utilise la valeur de num (ou inchangée) pour l’option d’en-tête maxseg TCP (lors de la synchronisation) et découvre son ajustement le long du chemin tracé. La nouvelle valeur mss modifiée est affichée une fois sous la forme M=NUM lors de la première sonde sur laquelle elle a été détectée. Notez que certains routeurs peuvent renvoyer un fragment initial trop court dans le message « temps écoulé », ce qui rend la vérification impossible. De plus, les réponses peuvent arriver dans un ordre différent. Tout cela peut entraîner un affichage ultérieur du rapport (l’utilisation de -N 1 peut aider pour l’ordre).

info Affiche les indicateurs TCP et les options prises en charge des réponses TCP finales lorsque l’hôte cible est atteint. Permet de déterminer si une application écoute le port et d’autres informations utiles. Les options TCP prises en charge sont toutes celles qui peuvent être définies par -T -O, c’est-à-dire mss, sack, timestamps, window_scaling et fastopen, avec un format de sortie similaire (une valeur pour mss et uniquement la présence pour les autres).

Les options par défaut sont syn, sysctl.

tcpconn

Une implémentation initiale de la méthode TCP, qui utilise simplement l’appel connect(2) et ouvre une session TCP complète. Non recommandé pour une utilisation normale, car une application de destination est toujours affectée (et peut être perturbée).

udp -U

Utilise un datagramme UDP avec un port de destination constant (par défaut 53, DNS). Conçu pour contourner un pare-feu.

Notez que, contrairement à la méthode TCP, l’application correspondante sur l’hôte de destination reçoit toujours nos sondes (avec des données aléatoires), et la plupart peuvent facilement être perturbées par celles-ci. Dans la plupart des cas, elle ne répondra pas à nos paquets, nous ne verrons donc jamais le dernier saut dans la trace. (Heureusement, il semble qu’au moins les serveurs DNS répondent avec quelque chose d’agressif).

Cette méthode est autorisée pour les utilisateurs non privilégiés.

udplite -UL

Utilise un datagramme udplite pour les sondes (avec un port de destination constant, par défaut 53).

Cette méthode est autorisée pour les utilisateurs non privilégiés. Options :

coverage=num

Définit la couverture d’envoi udplite sur num.

dccp -D

Utilise des paquets de requête DCCP pour les sondes (rfc4340).

Cette méthode utilise la même « technique semi-ouverte » que celle utilisée pour TCP. Le port de destination par défaut est 3343.

Options :

service=num

Définit le code de service DCCP sur num (par défaut 1885957735).

raw -P proto

Envoie un paquet brut du protocole proto. Aucun en-tête spécifique au protocole n’est utilisé, uniquement l’en-tête IP. Implique -N 1 -w 5. Options :

protocol=proto

Utilise le protocole IP proto (par défaut 253).

NOTES

Pour accélérer le travail, plusieurs sondes sont normalement envoyées simultanément. D’autre part, cela crée une « tempête de paquets », en particulier dans la direction des réponses. Les routeurs peuvent limiter le débit des réponses ICMP, et certaines réponses peuvent être perdues. Pour éviter cela, diminuez le nombre de sondes simultanées, ou définissez-le même sur 1 (comme dans l’implémentation initiale de traceroute), c’est-à-dire -N 1.

Le dernier hôte (cible) peut ignorer certaines des sondes simultanées et peut même ne répondre qu’aux dernières. Cela peut entraîner des « il semble que cela ait expiré » supplémentaires près du dernier saut. Nous utilisons un algorithme intelligent pour détecter automatiquement cette situation, mais si cela ne peut pas vous aider, utilisez simplement l’option -N 1.

Pour une plus grande stabilité, vous pouvez ralentir le fonctionnement du programme à l’aide de l’option -z, par exemple, utilisez -z 5 pour une pause de 0,5 seconde entre les sondes.

Pour éviter un temps d’attente supplémentaire, nous utilisons un algorithme adaptatif pour les délais d’attente (voir l’option -w pour plus d’informations). Cela peut entraîner une expiration prématurée (en particulier lorsque les temps de réponse varient) et l’affichage d’un « * » au lieu d’un temps. Dans ce cas, désactivez cet algorithme en spécifiant -w avec le délai d’attente souhaité uniquement (par exemple, -w 5).

Si certains sauts ne signalent rien pour aucune méthode, la dernière chance d’obtenir quelque chose est d’utiliser la commande ping -R (IPv4, et pour les 8 premiers sauts uniquement).

VOIR AUSSI

ping(8), ping6(8), tcpdump(8), netstat(8)