ping - envoyer une requête ICMP ECHO_REQUEST aux hôtes du réseau
SYNTAXE
ping [-aAbBdCDfhHLnOqrRUvV346] [-c nombre] [-e identifiant] [-F flowlabel] [-i intervalle]
[-I interface] [-l preload] [-m mark] [-M pmtudisc_option] [-N nodeinfo_option]
[-w délai] [-W délai_d'attente] [-p motif] [-Q tos] [-s taille_paquet] [-S sndbuf] [-t ttl]
[-T option_horodatage] [saut...] {destination}
DESCRIPTION
ping utilise le datagramme ECHO_REQUEST obligatoire du protocole ICMP pour obtenir une réponse ICMP ECHO_RESPONSE
d'un hôte ou d'une passerelle. Les datagrammes ECHO_REQUEST (« pings ») contiennent un en-tête IP et ICMP, suivi d'une structure timeval, puis d'un nombre arbitraire d'octets de « remplissage » utilisés pour remplir le paquet.
ping fonctionne avec IPv4 et IPv6. L'utilisation d'un seul de ces protocoles peut être imposée en spécifiant -4 ou -6.
ping peut également envoyer des requêtes d'informations de nœud IPv6 (RFC4620). Les sauts intermédiaires peuvent ne pas être autorisés, car le routage source IPv6 a été déprécié (RFC5095).
OPTIONS
-3
Précision du RTT (ne pas arrondir le résultat de la mesure du temps).
-4
Utiliser IPv4 uniquement.
-6
Utiliser IPv6 uniquement.
-a
Ping audible.
-A
Ping adaptatif. L'intervalle entre les paquets s'adapte au temps de trajet aller-retour, de sorte qu'il n'y ait effectivement pas plus d'un (ou plus, si preload est défini) paquet non répondu dans le réseau. L'intervalle par défaut est de 2 ms, pour plus d'informations, voir l'option -i. Sur les réseaux avec un faible RTT, ce mode est essentiellement équivalent au mode flood.
-b
Autoriser le ping d'une adresse de diffusion.
-B
Ne pas autoriser ping à modifier l'adresse source des sondes. L'adresse est liée à celle sélectionnée au démarrage de ping.
-c nombre
Arrêter après avoir envoyé le nombre de paquets ECHO_REQUEST. Avec l'option délai, ping attend le nombre de paquets ECHO_REPLY, jusqu'à ce que le délai d'attente expire.
-C
Appeler la fonction connect() lors de la création du socket.
-d
Définir l'option SO_DEBUG sur le socket utilisé. Essentiellement, cette option de socket n'est pas utilisée par le noyau Linux.
-D
Afficher l'horodatage (heure Unix + microsecondes comme dans gettimeofday) avant chaque ligne.
-e identifiant
Définir le champ d'identification de ECHO_REQUEST. La valeur 0 implique l'utilisation d'une socket brute (non prise en charge sur une socket de datagramme ICMP). La valeur du champ peut être affichée avec l'option -v.
-f
Ping en mode flood. Pour chaque paquet ECHO_REQUEST envoyé, un point « . » est affiché, tandis que pour chaque paquet ECHO_REPLY reçu, un caractère d'effacement (backspace) est affiché. Cela permet d'afficher rapidement le nombre de paquets perdus. Si l'intervalle n'est pas spécifié, il définit l'intervalle à zéro et affiche les paquets aussi rapidement qu'ils reviennent ou cent fois par seconde, selon la valeur la plus élevée. Seul l'utilisateur root peut utiliser cette option avec un intervalle de zéro.
-F flow-label
Uniquement IPv6. Alloue et définit l’étiquette de flux de 20 bits (en hexadécimal) sur les paquets de requête d’écho. Si la valeur est zéro, le noyau alloue une étiquette de flux aléatoire.
-h
Affiche l’aide.
-H
Force la résolution DNS du nom de sortie. Utile pour une destination numérique, ou l’option -f, qui, par défaut, n’effectue pas cette résolution. Cela peut également aider à résoudre les problèmes de résolution DNS. Annule l’option -n définie précédemment. Voir également la variable d’environnement IPUTILS_PING_PTR_LOOKUP.
-i intervalle
Définit l’intervalle d’attente en secondes entre l’envoi de chaque paquet. Un nombre décimal est autorisé, avec un point comme séparateur décimal (quel que soit le paramètre régional). Par défaut, l’intervalle est d’une seconde entre chaque paquet, ou pas d’attente en mode « flood ». Seul l’utilisateur root peut définir l’intervalle à des valeurs inférieures à 2 ms. Les pings de diffusion et de multidiffusion ont une limite encore plus élevée pour l’utilisateur normal : un minimum de 1 seconde.
-I interface
L’interface est soit une adresse, soit un nom d’interface, soit un nom VRF. Si l’interface est une adresse, elle définit l’adresse source sur l’adresse d’interface spécifiée. Si l’interface est un nom d’interface, elle définit l’interface source sur l’interface spécifiée. Si l’interface est un nom VRF, chaque paquet est routé en utilisant la table de routage correspondante ; dans ce cas, l’option -I peut être répétée pour spécifier une adresse source. REMARQUE : pour IPv6, lors de l’exécution de ping vers une adresse de portée de liaison locale, la spécification de liaison (par la notation « % » dans la destination, ou par cette option) peut être utilisée, mais ce n’est plus obligatoire.
-l précharge
Si précharge est spécifié, ping envoie ce nombre de paquets sans attendre de réponse. Seul l’utilisateur root peut sélectionner une précharge supérieure à 3.
-L
Supprime la boucle des paquets de multidiffusion. Ce drapeau ne s’applique que si la destination ping est une adresse de multidiffusion.
-m marque
Utilise une marque pour étiqueter les paquets sortants. Ceci est utile pour diverses raisons au sein du noyau, telles que l’utilisation du routage basé sur des règles pour sélectionner un traitement sortant spécifique. La capacité CAP_NET_ADMIN ou CAP_NET_RAW (depuis Linux 5.17) est requise, voir socket(7).
-M pmtudisc_opt
Sélectionne la stratégie de découverte PMTU. pmtudisc_option peut être soit do (définit le drapeau DF mais est soumis aux vérifications PMTU par le noyau, les paquets trop volumineux seront rejetés), want (effectue la découverte PMTU, fragmente localement lorsque la taille du paquet est importante), probe (définit le drapeau DF et contourne les vérifications PMTU, utile pour la sonde), ou dont (ne définit pas le drapeau DF).
-N nodeinfo_option
Uniquement IPv6. Envoie des requêtes d’informations de nœud IPv6 (RFC4620) au lieu des requêtes d’écho. La capacité CAP_NET_RAW est requise.
aide
Affiche l’aide pour la prise en charge NI.
nom
Requête des noms de nœud.
ipv6
Requête des adresses IPv6. Il existe plusieurs drapeaux spécifiques à IPv6.
ipv6-global
Demande les adresses IPv6 de portée globale.
ipv6-sitelocal
Demande les adresses IPv6 de portée de site.
ipv6-linklocal
Demande les adresses IPv6 de portée de liaison.
ipv6-all
Demande les adresses IPv6 sur d’autres interfaces.
ipv4
Requête des adresses IPv4. Il existe un drapeau spécifique à IPv4.
ipv4-all
Demande les adresses IPv4 sur d’autres interfaces.
subject-ipv6=ipv6addr
Adresse de sujet IPv6.
subject-ipv4=ipv4addr
Adresse de sujet IPv4.
subject-name=nodename
Nom du sujet. Si le nom contient plus d'un point, on suppose qu'il s'agit d'un nom de domaine complet (FQDN).
subject-fqdn=nodename
Nom du sujet. On suppose toujours qu'il s'agit d'un nom de domaine complet (FQDN).
-n
Sortie numérique uniquement. Aucune tentative ne sera faite pour rechercher les noms symboliques pour les adresses d'hôte (pas de résolution DNS inversée). Il s'agit de la valeur par défaut pour la destination numérique ou l'option -f. Remplace l'option -H définie précédemment. Voir également la variable d'environnement IPUTILS_PING_PTR_LOOKUP.
-O
Signaler l'écho ICMP en attente avant d'envoyer le paquet suivant. Ceci est utile en conjonction avec l'option d'horodatage -D pour enregistrer la sortie dans un fichier de diagnostic et rechercher les réponses manquantes.
-p pattern
Vous pouvez spécifier jusqu'à 16 octets de « remplissage » pour remplir le paquet que vous envoyez. Ceci est utile pour diagnostiquer les problèmes liés aux données dans un réseau. Par exemple, -p ff fera en sorte que le paquet envoyé soit rempli de tous les uns.
-q
Sortie silencieuse. Rien n'est affiché, sauf les lignes de résumé au démarrage et à la fin.
-Q tos
Définit les bits liés à la qualité de service (QoS) dans les datagrammes ICMP. tos peut être un nombre décimal ou hexadécimal (ping uniquement).
Dans RFC2474, ces champs sont interprétés comme des bits de service différencié (DS) de 8 bits, constitués de : bits 0 et 1 (les 2 bits les moins significatifs) de données distinctes, et bits 2 à 7 (les 6 bits les plus significatifs) du point de code de service différencié (DSCP). Dans RFC2481 et RFC3168, les bits 0 et 1 sont utilisés pour ECN.
Historiquement (RFC1349, obsolète par RFC2474), ces bits étaient interprétés comme suit : bit 0 (le bit le moins significatif) pour réservé (actuellement en cours de redéfinition en tant que contrôle de congestion), 1 à 4 pour le type de service et les bits 5 à 7 (les bits les plus significatifs) pour la priorité.
-r
Contourner les tables de routage normales et envoyer directement à un hôte sur une interface connectée. 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 effectuer un ping d'un hôte local via une interface qui n'a pas de route vers celui-ci, à condition que l'option -I soit également utilisée.
-R
ping uniquement. Enregistrer la route. Inclut l'option RECORD_ROUTE dans le paquet ECHO_REQUEST et affiche le tampon de route dans les paquets renvoyés. Notez que l'en-tête IP est suffisamment grand pour contenir seulement neuf routes. De nombreux hôtes ignorent ou rejettent cette option.
-s packetsize
Spécifie le nombre d'octets de données à envoyer. La valeur par défaut est 56, ce qui se traduit par 64 octets de données ICMP lorsqu'elle est combinée aux 8 octets de l'en-tête de données ICMP. La valeur maximale autorisée est 65 507 pour IPv4 (65 467 avec les options -R, -T ou les sauts intermédiaires) ou 65 527 pour IPv6, mais la plupart des systèmes la limitent à un nombre plus petit, dépendant du système.
-S sndbuf
Définit la taille du tampon de socket sndbuf. Si elle n'est pas spécifiée, elle est sélectionnée pour ne mettre en mémoire tampon qu'un seul paquet.
-t ttl
ping uniquement. Définit le temps de vie IP (TTL).
-T timestamp option
Définit des options d'horodatage IP spéciales. L'option d'horodatage peut être soit tsonly (uniquement les horodatages), soit tsandaddr (horodatages et adresses), soit tsprespec host1 [host2 [host3 [host4]]] (horodatage des sauts spécifiés).
-U
Affiche la latence utilisateur à utilisateur complète (l'ancien comportement). Normalement, ping affiche le temps d'aller-retour du réseau, ce qui peut être différent, par exemple, en raison d'échecs DNS.
-v
Affichage détaillé. Ne pas supprimer les réponses DUP lors de la transmission de requêtes vers une adresse multicast.
-V
Afficher la version et quitter.
-w délai
Spécifier un délai d’attente, en secondes, avant que ping ne se termine, quel que soit le nombre de paquets envoyés ou reçus. Dans ce cas, ping ne s’arrête pas après l’envoi du nombre de paquets spécifié, mais attend soit l’expiration du délai, soit la réception du nombre de réponses spécifié, soit la notification d’une erreur du réseau.
-W délai_d’attente
Temps d’attente pour une réponse, en secondes. Cette option affecte uniquement le délai d’attente en l’absence de réponses. Sinon, ping attend deux RTT (Round Trip Time). Un nombre réel est autorisé, avec un point comme séparateur décimal (indépendamment de la configuration locale). 0 signifie un délai d’attente infini.
Lors de l’utilisation de ping pour l’isolation des défauts, il doit d’abord être exécuté sur l’hôte local afin de vérifier que l’interface réseau locale est active et fonctionne. Ensuite, les hôtes et les passerelles situés de plus en plus loin doivent être « pingés ». Les temps d’aller-retour et les statistiques de perte de paquets sont calculés. Si des paquets en double sont reçus, ils ne sont pas inclus dans le calcul de la perte de paquets, bien que le temps d’aller-retour de ces paquets soit utilisé dans le calcul des temps d’aller-retour minimum, moyen, maximum et de l’écart type.
L’écart type (mdev) de la population, qui est essentiellement une moyenne de la distance de chaque RTT de ping par rapport au RTT moyen. Plus l’écart type est élevé, plus le RTT est variable (dans le temps). Avec une variabilité RTT élevée, vous rencontrerez des problèmes de vitesse avec les transferts volumineux (ils prendront plus de temps que nécessaire, car la variabilité finira par amener l’expéditeur à attendre les accusés de réception) et vous aurez une qualité VoIP moyenne à médiocre.
Lorsque le nombre de paquets spécifié a été envoyé (et reçu) ou si le programme est terminé avec un signal SIGINT, un bref résumé est affiché. Des statistiques actuelles plus courtes peuvent être obtenues sans terminer le processus avec le signal SIGQUIT.
Ce programme est destiné à être utilisé pour les tests, les mesures et la gestion des réseaux. En raison de la charge qu’il peut imposer au réseau, il n’est pas conseillé d’utiliser ping pendant les opérations normales ou à partir de scripts automatisés.
ENVIRONNEMENT
La variable d’environnement IPUTILS_PING_PTR_LOOKUP, lorsqu’elle est définie sur 0, désactive la résolution DNS inverse (recherche PTR) par défaut. Elle sera remplacée par les options -H ou -n.
CODE DE SORTIE
Si ping ne reçoit aucune réponse, il quittera avec le code 1. Si un nombre de paquets et un délai d’attente sont tous les deux spécifiés, et que moins du nombre de paquets spécifié sont reçus lorsque le délai d’attente est atteint, il quittera également avec le code 1. En cas d’autre erreur, il quitte avec le code 2. Sinon, il quitte avec le code 0. Cela permet d’utiliser le code de sortie pour déterminer si un hôte est actif ou non.
DESTINATIONS IPv6 LINK-LOCAL
Pour IPv6, lorsque l’adresse de destination a une portée locale et que ping utilise des sockets ICMP, l’interface de sortie doit être spécifiée. Lorsque ping utilise des sockets bruts, il n’est pas strictement nécessaire de spécifier l’interface de sortie, mais il est conseillé de le faire pour éviter toute ambiguïté lorsqu’il existe plusieurs interfaces de sortie possibles.
Il existe deux façons de spécifier l’interface de sortie :
en utilisant la notation %
L’adresse de destination est suivie de % et du nom de l’interface de sortie ou de l’ifindex, par exemple :
ping fe80::5054:ff:fe70:67bc%eth0
ping fe80::5054:ff:fe70:67bc%2
en utilisant l’option -I
Lorsque vous utilisez des sockets de datagrammes ICMP, cette méthode est prise en charge depuis les versions du noyau suivantes : 5.17, 5.15.19, 5.10.96, 5.4.176, 4.19.228, 4.14.265. De plus, elle n’est pas prise en charge sur musl libc.
DÉTAILS DES PAQUETS ICMP
Un en-tête IP sans options fait 20 octets. Un paquet ICMP ECHO_REQUEST contient un en-tête ICMP supplémentaire de 8 octets, suivi d’une quantité arbitraire de données. Lorsqu’une taille de paquet est spécifiée, cela indique la taille de cette partie supplémentaire de données (la valeur par défaut est 56). Par conséquent, la quantité de données reçues à l’intérieur d’un paquet IP de type ICMP ECHO_REPLY sera toujours de 8 octets supérieure à l’espace de données demandé (l’en-tête ICMP).
Si l’espace de données est d’au moins la taille de la structure timeval, ping utilise les premiers octets de cet espace pour inclure un horodatage, qu’il utilise dans le calcul des temps de trajet aller-retour. Si l’espace de données est plus court, aucun temps de trajet aller-retour n’est fourni.
PAQUETS DUPLIQUÉS ET ENDOMMAGÉS
ping signalera les paquets dupliqués et endommagés. Les paquets dupliqués ne devraient jamais se produire et semblent être causés par des retransmissions inappropriées au niveau de la liaison. Les doublons peuvent se produire dans de nombreuses situations et ne sont que rarement (voire jamais) un bon signe, bien que la présence de faibles niveaux de doublons ne soit pas toujours une source d’inquiétude.
Les paquets endommagés sont évidemment une source d’inquiétude majeure et indiquent souvent un matériel défectueux quelque part sur le trajet du paquet ping (dans le réseau ou dans les hôtes).
COLLISIONS D’ID
Contrairement à TCP et UDP, qui utilisent le port pour identifier de manière unique le destinataire afin de fournir des données, ICMP utilise le champ d’identification (ID) pour l’identification. Par conséquent, si, sur la même machine et au même moment, deux processus ping utilisent le même ID, la réponse echo peut être transmise à un destinataire incorrect. Il s’agit d’un problème connu en raison de la taille limitée du champ d’ID de 16 bits. Il s’agit d’une limitation historique du protocole qui ne peut pas être corrigée pour le moment, à moins que nous n’encodions un ID dans la charge utile du paquet ping. ping affiche l’erreur ADRESSE DIFFÉRENTE et la perte de paquets est négative.
ping utilise le PID pour obtenir un numéro unique. La valeur par défaut de /proc/sys/kernel/pid_max est 32768. Sur les systèmes qui utilisent ping intensivement et avec pid_max supérieur à 65535, des collisions finiront par se produire.
ESSAI DE DIFFÉRENTS MOTIFS DE DONNÉES
La couche (inter)réseau ne doit jamais traiter les paquets différemment en fonction des données contenues dans la partie des données. Malheureusement, des problèmes liés aux données sont connus pour s’infiltrer dans les réseaux et y rester indétectés pendant de longues périodes. Dans de nombreux cas, le motif particulier qui causera des problèmes est un motif qui ne comporte pas suffisamment de « transitions », comme tous les uns ou tous les zéros, ou un motif juste à la limite, comme presque tous les zéros. Il n’est pas nécessairement suffisant de spécifier un motif de données composé uniquement de zéros (par exemple) sur la ligne de commande, car le motif qui est intéressant se trouve au niveau de la liaison de données, et la relation entre ce que vous tapez et ce que les contrôleurs transmettent peut être compliquée.
Cela signifie que si vous avez un problème dépendant des données, vous devrez probablement effectuer de nombreux tests pour le trouver. Si vous avez de la chance, vous pourriez trouver un fichier qui ne peut pas être envoyé sur votre réseau ou qui prend beaucoup plus de temps à transférer que d'autres fichiers de longueur similaire. Vous pouvez ensuite examiner ce fichier pour rechercher des motifs répétés que vous pouvez tester à l'aide de l'option -p de ping.
DÉTAILS SUR LA VALEUR TTL
La valeur TTL d'un paquet IP représente le nombre maximal de routeurs IP que le paquet peut traverser avant d'être rejeté. En pratique, vous pouvez vous attendre à ce que chaque routeur sur Internet décrémente la valeur TTL de exactement un.
La valeur TTL pour les paquets TCP peut prendre différentes valeurs. La valeur maximale possible de ce champ est 255, une valeur initiale recommandée est 64. Pour plus d'informations, consultez la section TCP/Interface de niveau inférieur de RFC9293.
En fonctionnement normal, ping affiche la valeur TTL du paquet qu'il reçoit. Lorsqu'un système distant reçoit un paquet ping, il peut faire l'une des trois choses suivantes avec le champ TTL dans sa réponse :
Ne pas la modifier ; c'est ce que faisaient les systèmes Berkeley Unix avant la version 4.3BSD Tahoe. Dans ce cas, la valeur TTL du paquet reçu sera 255 moins le nombre de routeurs dans le chemin d'aller-retour.
La définir sur 255 ; c'est ce que font les systèmes Berkeley Unix actuels. Dans ce cas, la valeur TTL du paquet reçu sera 255 moins le nombre de routeurs dans le chemin du système distant vers l'hôte effectuant le ping.
La définir sur une autre valeur. Certaines machines utilisent la même valeur pour les paquets ICMP que pour les paquets TCP, par exemple 30 ou 60. D'autres peuvent utiliser des valeurs complètement aléatoires.
BOGUES
De nombreux hôtes et passerelles ignorent l'option RECORD_ROUTE.
La longueur maximale de l'en-tête IP est trop petite pour que des options comme RECORD_ROUTE soient complètement utiles. Cependant, il n'y a pas grand-chose à faire à ce sujet.
Le ping par inondation n'est généralement pas recommandé, et le ping par inondation vers l'adresse de diffusion ne doit être effectué que dans des conditions très contrôlées.
VOIR AUSSI
HISTORIQUE
La commande ping est apparue dans 4.3BSD.
La version décrite ici est sa descendante spécifique à Linux.
À partir de la version s20150815, le binaire ping6 n'existe plus. Il a été fusionné dans ping. La création d'un lien symbolique nommé ping6 pointant vers ping donnera la même fonctionnalité qu'avant.
SÉCURITÉ
ping nécessite la capacité CAP_NET_RAW pour être exécuté : 1) si le programme est utilisé pour des requêtes non-écho (voir l'option -N) ou lorsque le champ d'identification est défini sur 0 pour ECHO_REQUEST (voir l'option -e), ou 2) si le noyau ne prend pas en charge les sockets de datagrammes ICMP, ou 3) si l'utilisateur n'est pas autorisé à créer un socket d'écho ICMP. Le programme peut être utilisé en tant que set-uid root.
DISPONIBILITÉ
ping fait partie du package iputils.