ping (utilitaire de mise en réseau) - ping (networking utility)

Ping
Ping iputils screenshot.png
Version Linux de ping
Auteur(s) original(aux) Mike Muuss
Développeur(s) Divers open source et commerciaux développeurs
Première version 1983 ; il y a 38 ans ( 1983 )
Plate-forme Multiplateforme
Taper Commander
Licence Domaine public , BSD , GPL , MIT

Ping est un utilitaire logiciel d' administration de réseau informatique utilisé pour tester l'accessibilité d'un hôte sur un réseau IP ( Internet Protocol ). Il est disponible pour pratiquement tous les systèmes d'exploitation dotés d'une capacité de mise en réseau, y compris la plupart des logiciels d'administration réseau intégrés.

Ping mesure le temps d' aller-retour pour les messages envoyés de l'hôte d'origine à un ordinateur de destination qui sont renvoyés à la source. Le nom vient de la terminologie active du sonar qui envoie une impulsion sonore et écoute l'écho pour détecter les objets sous l'eau.

Ping fonctionne en envoyant des paquets de demande d'écho ICMP ( Internet Control Message Protocol ) à l'hôte cible et en attendant une réponse d'écho ICMP. Le programme signale les erreurs, la perte de paquets et un résumé statistique des résultats, comprenant généralement le minimum, le maximum, les temps d' aller-retour moyens et l' écart type de la moyenne.

Les options de ligne de commande de l'utilitaire ping et sa sortie varient entre les nombreuses implémentations. Les options peuvent inclure la taille de la charge utile, le nombre de tests, les limites du nombre de sauts de réseau ( TTL ) que les sondes traversent, l'intervalle entre les demandes et le temps d'attente d'une réponse. De nombreux systèmes fournissent un utilitaire compagnon ping6, pour les tests sur les réseaux Internet Protocol version 6 (IPv6), qui implémentent ICMPv6 .

Histoire

Version DOS de ping

L'utilitaire ping a été écrit par Mike Muuss en décembre 1983 alors qu'il travaillait au Ballistic Research Laboratory , aujourd'hui l' US Army Research Laboratory . Une remarque de David Mills sur l'utilisation des paquets d'écho ICMP pour le diagnostic et les mesures du réseau IP a incité Muuss à créer l'utilitaire pour résoudre les problèmes de réseau. L'auteur l'a nommé d'après le son produit par le sonar , car sa méthodologie est analogue à la localisation de l'écho du sonar. Le backronym Packet Internet Groper pour PING est utilisé depuis plus de 30 ans, et bien que Muuss dise que de son point de vue PING n'était pas un acronyme, il a reconnu l'expansion du nom par Mills. La première version publiée était un logiciel du domaine public ; toutes les versions ultérieures ont été concédées sous la licence BSD . Ping a été inclus pour la première fois dans 4.3BSD . La version FreeDOS a été développée par Erick Engelke et est sous licence GPL . Tim Crawford a développé la version ReactOS . Il est licencié sous la licence MIT .

La RFC 1122 prescrit que tout hôte doit traiter les demandes d'écho ICMP et émettre des réponses d'écho en retour.

Exemple d'appel

Ce qui suit est le résultat de l'exécution de ping sur Linux pour l'envoi de cinq sondes (intervalle de 1 seconde par défaut, configurable via l'option -i) à l'hôte cible www.example.com :

$ ping -c 5 www.example.com
PING www.example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=9.674 ms
64 bytes from 93.184.216.34: icmp_seq=4 ttl=56 time=11.127 ms

--- www.example.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.674/10.968/11.726/0.748 ms

La sortie répertorie chaque message de sonde et les résultats obtenus. Enfin, il répertorie les statistiques de l'ensemble du test. Dans cet exemple, le temps d' aller-retour le plus court était de 9,674 ms, la moyenne était de 10,968 ms et la valeur maximale était de 11,726 ms. La mesure avait un écart type de 0,748 ms.

Messages d'erreur

En cas de non-réponse de l'hôte cible, la plupart des implémentations n'affichent rien ou impriment périodiquement des notifications concernant l'expiration du délai. Les résultats de ping possibles indiquant un problème sont les suivants :

  • H, !N ou !P  – hôte, réseau ou protocole inaccessible
  • S  - la route source a échoué
  • F  – fragmentation nécessaire
  • U ou !W  – réseau/hôte de destination inconnu
  • I  - l'hôte source est isolé
  • A  – communication avec le réseau de destination administrativement interdite
  • Z  – communication avec l'hôte de destination administrativement interdite
  • Q  – pour ce ToS le réseau de destination est inaccessible
  • T  - pour ce ToS l'hôte de destination est inaccessible
  • X  – communication administrativement interdite
  • V  – violation de la priorité de l'hôte
  • C  – seuil de préséance en vigueur

En cas d'erreur, l'hôte cible ou un routeur intermédiaire renvoie un message d'erreur ICMP, par exemple "hôte inaccessible" ou "TTL dépassé en transit". De plus, ces messages incluent les huit premiers octets du message d'origine (dans ce cas, l'en-tête de la demande d'écho ICMP, y compris la valeur d'extinction), afin que l'utilitaire ping puisse faire correspondre les réponses aux requêtes d'origine.

Format des messages

Paquet ICMP

datagramme IPv4
  Bits 0-7 Bits 8-15 Bits 16-23 Bits 24-31
En-tête
(20 octets)
Version/DIH Type de service (ToS) Longueur
Identification drapeaux et décalage
Temps de vivre (TTL) Protocole Somme de contrôle d'en-tête
Adresse IP source
Adresse IP de destination
En-tête ICMP
(8 octets)
Type de message Code Somme de contrôle
Données d'en-tête
Charge utile ICMP
( facultatif )
Données de charge utile
datagramme IPv6
  Bits 0-3 Bits 4-7 Bits 8–11 Bits 12-15 Bits 16-23 Bits 24-31
En-tête
(40 octets)
Version Classe de trafic Étiquette de flux
Longueur de la charge utile En-tête suivant Limite de sauts
Adresse source
Adresse de destination
En-tête ICMP6
(8 octets)
Type de message Code Somme de contrôle
Données d'en-tête
Charge utile ICMP6
( facultatif )
Données de charge utile

Composition générique d'un paquet ICMP :

  • En-tête IPv4 (en bleu) : protocole défini sur 1 (ICMP) et Type de service défini sur 0.
  • En-tête IPv6 (en bleu) : En-tête suivant défini sur 58 (ICMP6)
  • En-tête ICMP (en rouge) :
    • Type de message ICMP (8 bits)
    • Code (8 bits)
    • Somme de contrôle (16 bits), le complément à un de 16 bits de la somme des compléments à un du paquet. Pour IPv4, cela est calculé à partir du message ICMP commençant par le champ Type (l'en- tête IP n'est pas inclus). Pour IPv6, cela est calculé à partir du message ICMP, précédé d'un "pseudo-en-tête" IPv6.
    • Le champ Header Data (32 bits), qui dans ce cas (requête et réponses d'écho ICMP), sera composé de l'identifiant (16 bits) et du numéro de séquence (16 bits).
  • Charge utile ICMP : charge utile pour les différents types de réponses ; peut être une longueur arbitraire, laissée au détail de la mise en œuvre. Cependant, le paquet incluant les en-têtes IP et ICMP doit être inférieur à l' unité de transmission maximale du réseau ou risquer d'être fragmenté .

Demande d'écho

La requête d'écho ("ping") est un message ICMP / ICMP6 .

00 01 02 03 04 05 06 07 08 09 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Tapez = 8 (IPv4, ICMP) 128 (IPv6, ICMP6) Code = 0 Somme de contrôle
Identifiant Numéro de séquence
Charge utile

L'identifiant et le numéro de séquence peuvent être utilisés par le client pour faire correspondre la réponse avec la demande qui a provoqué la réponse. En pratique, la plupart des systèmes Linux utilisent un identifiant unique pour chaque processus ping, et le numéro de séquence est un nombre croissant au sein de ce processus. Windows utilise un identifiant fixe, qui varie selon les versions de Windows, et un numéro de séquence qui n'est réinitialisé qu'au démarrage.

Réponse d'écho

La réponse d'écho est un message ICMP généré en réponse à une demande d'écho ; il est obligatoire pour tous les hôtes et doit inclure la charge utile exacte reçue dans la demande.

00 01 02 03 04 05 06 07 08 09 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Tapez = 0(IPv4,ICMP) 129(IPv6,ICMP6) Code = 0 Somme de contrôle
Identifiant Numéro de séquence
Charge utile
  • L' identifiant et le numéro de séquence peuvent être utilisés par le client pour associer chaque demande d'écho à sa réponse.

Charge utile

La charge utile du paquet est généralement remplie de caractères ASCII , comme le montre la sortie de l' utilitaire tcpdump dans les 32 derniers octets de l'exemple suivant (après l'en-tête ICMP de huit octets commençant par 0x0800 ) :

16:24:47.966461 IP (tos 0x0, ttl 128, id 15103, décalage 0, drapeaux [aucun],
proto : ICMP (1), longueur : 60) 192.168.146.22 > 192.168.144.5 : requête d'écho ICMP,
id 1, séquence 38, longueur 40
       0x0000: 4500 003c 3aff 0000 8001 5c55 c0a8 9216 E..<:.....\U....
       0x0010 : c0a8 9005 0800 4d35 0001 0026 6162 6364 ......M5...&abcd
       0x0020 : 6566 6768 696a 6b6c 6d6e 6f70 7172 7374 efghijklmnopqrst
       0x0030 : 7576 7761 6263 6465 6667 6869 uvwabcdefghi

La charge utile peut comprendre un horodatage indiquant l'heure de transmission et un numéro de séquence, qui ne se trouvent pas dans cet exemple. Cela permet à ping de calculer le temps d'aller-retour sans état sans avoir besoin d'enregistrer le temps de transmission de chaque paquet.

La charge utile peut également inclure un paquet magique pour le protocole Wake-on-LAN , mais la charge utile minimale dans ce cas est plus longue que celle indiquée. La demande d'écho ne reçoit généralement aucune réponse si l'hôte dormait en état d'hibernation, mais l'hôte se réveille toujours de l'état de veille si son interface est configurée pour accepter les demandes de réveil. Si l'hôte est déjà actif et configuré pour autoriser les réponses aux paquets ICMP Echo Request entrants , la réponse renvoyée doit inclure la même charge utile. Cela peut être utilisé pour détecter que l'hôte distant a été effectivement réveillé, en répétant une nouvelle demande après un certain délai pour permettre à l'hôte de reprendre ses services réseau. Si l'hôte dormait simplement dans un état actif de faible puissance, une seule demande réveille cet hôte juste assez pour permettre à son service Echo Reply de répondre instantanément si ce service était activé. L'hôte n'a pas besoin de réveiller complètement tous les appareils et peut revenir en mode faible consommation après un court délai. Une telle configuration peut être utilisée pour éviter qu'un hôte entre en état d'hibernation, avec un délai de réveil beaucoup plus long, après un certain temps passé en mode actif à faible consommation.

Des failles de sécurité

Pour mener une attaque par déni de service , un attaquant peut envoyer des requêtes ping aussi rapidement que possible, écrasant éventuellement la victime avec des requêtes d'écho ICMP. Cette technique est appelée ping flood .

Les requêtes ping vers plusieurs adresses, les balayages ping , peuvent être utilisées pour obtenir une liste de tous les hôtes d'un réseau.

Voir également

Les références

Lectures complémentaires

Liens externes