Le ping pour les débutants
Sommaire
I. Présentation
Dans ce tutoriel, nous allons découvrir une commande indispensable en informatique : ping. Disponible nativement sur différents systèmes d'exploitation dont Windows et Linux, cette commande s'appuie sur le protocole ICMP et permet de réaliser quelques tests sur un réseau.
Après une courte introduction au protocole ICMP, je vais vous expliquer à quoi sert la commande "ping" puis il sera temps de passer à la démonstration. Pour cela, nous allons effectuer l'analyse d'un ping entre deux machines à partir du logiciel Wireshark.
II. Le protocole ICMP
Le protocole ICMP, pour Internet Control Message Protocol, est très utile sur les réseaux IP puisqu'en cas de problème d'émission d'un paquet, il va être capable d'informer l'émetteur du paquet qu'il y a eu une erreur dans la transmission du paquet. En cas d'incident pour joindre un service, un hôte ou un routeur, le protocole ICMP peut informer l'adresse IP source de ce dysfonctionnement.
Même s'il n'est pas utilisé régulièrement au sein des applications, le protocole ICMP est très utile au sein d'outils de diagnostics pour le réseau tels que le ping que nous allons voir aujourd'hui, mais aussi traceroute.
Chaque paquet ICMP est encapsulé dans un datagramme IP. Contrairement aux protocoles TCP ou UDP, le protocole ICMP n'est pas un protocole de transport.
III. À quoi sert la commande ping ?
Dans une très grande majorité des cas, la commande ping sert à tester la communication entre deux équipements connectés à un réseau IP, mais la commande ping peut servir à d'autres choses. Voici une liste de trois cas courants de l'utilisation du ping :
- Tester la communication entre deux équipements connectés à un réseau
Lorsque l'on effectue un ping d'une machine A vers une machine B, et que l'on obtient une réponse positive, cela signifie que d'un point de vue du réseau, la machine A peut atteindre la machine B (route aller) et que la machine B peut atteindre la machine A (route retour). Je vais revenir sur cette notion de "réponse positive" par la suite.
- Mesurer la fiabilité d'un réseau à un instant t
Si l'on émet des requêtes "ping" entre une machine A et une machine B en boucle, pendant plusieurs minutes, et que l'on obtient que des réponses positives, on peut considérer que le chemin réseau entre les deux machines est fiable et stable (en tout cas à cet instant). Par contre, si l'on envoie 20 requêtes "ping" et que l'on a un taux de réponse négative de 20%, c'est qu'il y a un problème sur le réseau !
- Mesurer la latence d'un réseau à un instant t
Nous le verrons dans la suite de ce tutoriel, que quand un ping est envoyé d'une machine A vers une machine B, la machine A (qui est la machine source) va mesurer le temps de réponse. Ce temps de réponse correspond laps au temps qui s'est écoulé entre le moment où la machine A a envoyé le paquet et où elle a reçue la réponse de la machine B. Si le temps de réponse est trop élevé, c'est le signe d'une perturbation sur le réseau, d'une congestion sur le réseau ou d'un problème de performance sur l'hôte distant.
IV. Comment fonctionne le ping ?
Lorsque l'on utilise la commande "ping", c'est la couche IP de notre machine qui va s'appuyer sur le protocole ICMP pour émettre un message ICMP "Echo Request" à destination de l'hôte distant.
Effectuée à partir d'une machine, la commande "ping" envoie un paquet ICMP vers l'hôte cible et ce paquet ICMP des informations, dont le type et le code. Grâce à eux, nous allons pouvoir en savoir plus sur le message envoyé via le protocole ICMP. Lorsqu'un ping se passe bien, l'hôte source utilise le message "echo request" et l'hôte destination lui répond avec le message "echo reply".
Ainsi, le type et le code peuvent prendre plusieurs valeurs avec à chaque fois une signification différente (données du tableau obtenues sur Wikipédia) :
Dans le tableau ci-dessus, nous retrouvons bien les types et les codes présents sur mon premier schéma. Nous verrons par la suite que l'on retrouve ces codes aussi dans la pratique, lors d'une analyse d'un ping avec Wireshark.
Quand on utilise la commande ping, que ce soit sur Windows, Linux, macOS, ou depuis la ligne de commande de son routeur, ou son switch, on obtiendra différentes informations à l'écran. Les informations affichées ne sont pas toujours les mêmes, cela dépend de la méthode d'implémentation de l'outil ping.
Faisons quelques essais...
Sur une machine Windows, on peut réaliser un ping à partir d'une Invite de commandes, d'une console Windows PowerShell ou PowerShell : c'est pris en charge dans toutes les consoles et cet outil est intégré à Windows. Il suffit de préciser l'adresse IP (ou le nom d'hôte, le nom de domaine) que l'on souhaite pinger :
ping 1.1.1.1
Par défaut, Windows va réaliser 4 ping et s'arrêter. Si l'on veut effectuer un ping continue qui s'arrête seulement lorsque l'on décide de l'arrêter, il faut ajouter une option :
ping 1.1.1.1 -t
Sur l'image ci-dessus, on peut voir cette ligne pour chaque ping, ce qui correspond au résultat du ping :
Réponse de 1.1.1.1 : octets=32 temps=9 ms TTL=56
Cela signifie que l'hôte distant a répondu, c'est pour cette raison que l'on a l'information "Réponse de 1.1.1.1". On remarque d'autres informations sur cette ligne :
- octets=32
Le paquet correspondant au ping est d'une taille de 32 octets. La taille du paquet peut être modifiée, par exemple sous Linux c'est 64 octets, soit 64 bytes en anglais (voir ci-dessous). Sous Windows, l'option "-l" permet de modifier la taille du paquet, par exemple pour 1024 octets : ping 192.168.100.11 -l 1024
- temps=9 ms
Le temps nécessaire pour que le paquet puisse atteindre l'hôte distant (1.1.1.1) et faire le chemin retour pour revenir à notre machine. Ce temps est toujours exprimé en millisecondes.
- TTL=56
TTL signifie Time To Live, ce qui correspond à la durée de vie du paquet avant qu'il ne soit détruit. En fait, lorsqu'un ping est émit il y a une valeur initiale pour le TTL qui est généralement fixée à 64 (ou 128). A chaque fois que le paquet va passer au travers d'un routeur, le TTL sera réduit de 1. Lorsque l'on voit un TTL=56, on peut en déduire que le paquet a traversé 8 routeurs avant d'atteindre sa cible : ce n'est pas étonnant puisque 1.1.1.1 correspond à l'adresse IP du DNS CloudFlare, sur Internet.
Note : lorsque l'on ping un hôte qui est sur le même segment réseau, par exemple connecté au même réseau WiFi à la maison, et bien, le TTL reste à 64 (ou à sa valeur initiale), car on ne traverse pas de routeur.
Pour lire les résultats d'une série de ping, on peut s'appuyer sur les statistiques affichées à la fin de la commande. On peut voir que j'ai envoyé 4 paquets, que j'en ai reçu 4, donc j'en ai perdu 0, ce qui signifie que la perte est de 0%. Tout va bien. On a également le temps de réponse moyen qui est calculé, ainsi que les temps de réponse max et min.
Si l'on regarde l'aide de la commande ping (ping --help), on peut voir qu'il existe d'autres options. Par exemple, pour forcer l'utilisation d'IPv4 ou d'IPv6 :
ping www.domaine.fr -4 ping www.domaine.fr -6
Si l'on effectue un ping depuis une machine sous Linux, par exemple avec la distribution Kali Linux, on peut utiliser une syntaxe similaire pour effectuer un simple ping. La différence c'est que le ping va s'exécuter en continu et qu'il faudra l'arrêter manuellement.
ping 1.1.1.1
Dans le cas où l'hôte distant ne répond pas au ping, cela peut s'expliquer par de nombreuses raisons :
- L'hôte distant est injoignable à cause d'un problème de routage (acheminement du paquet sur le réseau)
- Un pare-feu entre les deux machines bloque les pings
- Le pare-feu local de l'hôte distant est configuré pour ne pas répondre au ping
- Le ping est effectué sur un nom de domaine est le DNS ne parvient pas à résoudre ce nom
- Etc.
Maintenant, passons à l'analyse d'un ping avec Wireshark.
V. Analyse d'un ping avec Wireshark
Pour capturer le trafic réseau généré par notre ping, il faut que l'on lance une capture avec l'application Wireshark. Cette application va capturer les paquets réseau à destination de notre ordinateur et émit par notre ordinateur, sur l'interface réseau en cours d'utilisation. À la place de Wireshark, nous pourrions utiliser un autre logiciel tel que tcpdump. Pour ma part, je vais émettre le ping depuis la machine avec l'adresse IP "192.168.100.101" vers le serveur avec l'adresse IP "192.168.100.11".
Une fois Wireshark lancé sur votre machine, cliquez sur "Capture" dans le menu puis "Options". Cela nous permet de sélectionner l'interface Ethernet et d'appliquer un filtre pour capture uniquement les échanges entre ma machine locale et le serveur avec l'adresse IP "192.168.100.11".
ip src 192.168.100.11 or ip dst 192.168.100.11
Vous pouvez aussi utiliser le filtre suivant basé sur le protocole :
icmp
On clique sur "Démarrer" pour lancer la capture, puis dans le même temps je lance le ping :
ping 192.168.100.11
En appliquant un filtre supplémentaire sur le protocole ICMP (on saisit "icmp" dans la barre des filtres et on valide), on obtient 8 paquets. C'est normal puisque sous Windows, 4 requêtes ping sont émises puis la commande s'arrête. Comme nous avons obtenu une réponse à chaque fois : 4 x 2 = 8 paquets.
Si l'on se réfère à la colonne "Info", on remarque deux informations importantes :
Echo (ping) request Echo (ping) reply
La première correspond à la requête ping de ma machine locale et la seconde à la réponse de l'hôte distant.
Si l'on sélectionne le paquet n°1 et que l'on regarde le contenu de l'en-tête ICMP, on peut voir des informations importantes :
Type: 8 (echo (ping) request) Code: 0
Nous retrouvons le type et le code, comme je l'évoquais précédemment lors des explications théoriques. Avec cette analyse Wireshark, où l'on voit les paquets, on retrouve bien ces informations.
Dans le même esprit, si l'on prend le paquet n°2, on peut voir qu'il correspond à la réponse au ping reçue de la part du serveur distant (192.168.100.11).
Type: 0 (echo (ping) reply) Code: 0
Cet enchaînement de requêtes et de réponses est présent 4 fois, ce qui est logique. Au sein des paquets, on peut remarquer deux autres valeurs :
- Identifier
- Sequence Number
Ces numéros permettent d'ajouter un suivi au sein des paquets ICMP. De cette façon, quand notre hôte local reçoit une réponse de la part de l'hôte distant, il sait à quel paquet ICMP "Echo request" cette réponse correspond. Autrement dit, ces identifiants permettent de faire la correspondance entre les requêtes ping et les réponses ping entre deux hôtes.
Dans le cas où l'hôte distant ne réponse pas, la commande ping affiche "Délai d’attente de la demande dépassé.", tandis qu'au niveau de Wireshark, on peut "No response seen" et "No response found!". Au niveau des paquets, on peut voir les requêtes "echo request", mais les réponses ne sont pas là.
Dans cet exemple, nous venons d'émettre 4 requêtes ping "echo request" à destination du serveur. On peut dire que cela a permis de vérifier que les deux machines pouvaient communiquer ensemble.
Il faut savoir que le "ping" peut être utilisé dans le cadre d'attaques informatiques, notamment les attaques "ping flood" de type déni de service. L'objectif étant de surcharger l'ordinateur cible en lui envoyant tellement d'echo request qu'il n'arrive plus à suivre. À l'aide d'outils ping plus évolué (permettant de faciliter les attaques), l'attaquant va pouvoir s'en prendre à une machine, un routeur, un serveur, etc... Soit à partir d'une seule machine (Déni de service - DoS) ou d'un ensemble de machines (Déni de service distribué - DDoS) : tout dépend de la cible. En fait, on peut dire qu'il faut être plus fort que la cible pour réussir à la faire tomber.
VI. Conclusion
Bien que très simple d'utilisation, la commande ping est indispensable, car c'est un outil basique, mais qui est pertinent pour effectuer un premier diagnostique sur un réseau informatique. Au-delà de savoir l'utiliser au sein d'une console, que ce soit sous Windows ou Linux, vous en savez également un peu plus sur son fonctionnement grâce à l'analyse Wireshark effectuée !
hello
merci pour ce petit cours express.
je me suis demande quand on fait un ping depuis un pc qui a une interface ethernet et une wifi, qui fait l appel et depuis quel chemin?
Bonjour à vous j’ai une quetsion
Sur un ordinateur, la commande PING permet -elle de ?
de faire remonter l’adresse MAC d’une machine dans la table ARP
de vérifier la connectivité entre deux équipements au travers des couches physique, ethernet et IP
de mesurer le temps d’aller et rerour des données Ip entre deux machines
de m’assurer qu’aucun firewall ne bride les communications entre deux machines »
Merci pour votre retour