Skip to content

TTL et ICMP : identifier l'OS source et compter les sauts réseau

Le TTL (Time To Live) est un champ de 8 bits dans l’en-tête IP. Il sert à éviter qu’un paquet tourne indéfiniment sur le réseau en cas de boucle de routage. Chaque routeur traversé décrémente sa valeur de 1. Quand il atteint 0, le paquet est abandonné et le routeur retourne un message ICMP Time Exceeded à l’expéditeur.

Ce mécanisme, conçu pour la robustesse réseau, révèle aussi des informations exploitables en audit.

Source (TTL=64)
[Routeur 1] → TTL devient 63
[Routeur 2] → TTL devient 62
[Routeur 3] → TTL devient 61
Destination reçoit le paquet avec TTL=61

Si le TTL atteint 0 avant d’arriver à destination :

[Routeur N] → TTL = 0 → paquet abandonné
→ ICMP Time Exceeded envoyé à la source

C’est sur ce principe que fonctionne traceroute : il envoie des paquets avec TTL=1, puis TTL=2, etc., et collecte les ICMP Time Exceeded de chaque routeur pour cartographier le chemin.

Valeurs TTL de départ par système d’exploitation

Section titled “Valeurs TTL de départ par système d’exploitation”

Chaque OS initialise le TTL à une valeur par défaut connue :

Système d’exploitationTTL de départ
Linux / Android64
Windows128
macOS / iOS64
Cisco IOS (équipements réseau)255
Solaris / AIX255
FreeBSD64

Ces valeurs sont des constantes documentées — elles n’ont pas changé depuis des décennies.

Déduire le nombre de sauts et l’OS source

Section titled “Déduire le nombre de sauts et l’OS source”

En observant le TTL d’un paquet reçu, on peut remonter à la valeur d’origine et calculer le nombre de sauts traversés.

Exemple : un paquet arrive avec TTL=54.

Les candidats possibles :

  • Départ à 64 (Linux/macOS) → 64 − 54 = 10 sauts
  • Départ à 128 (Windows) → 128 − 54 = 74 sauts (peu probable sur un LAN)
  • Départ à 255 (Cisco) → 255 − 54 = 201 sauts (impossible sur Internet)

Le TTL=54 avec une valeur d’origine de 64 indique une machine Linux ou macOS à 10 sauts.

Autre exemple : TTL=118 dans une réponse.

  • Départ à 128 (Windows) → 128 − 118 = 10 sauts
  • Départ à 64 → TTL reçu supérieur au TTL de départ : impossible

La source est Windows à 10 sauts.

Pour afficher le TTL sur chaque ligne de la liste de paquets :

  1. Clic droit sur un paquet dans la liste
  2. IPv4Time to Live
  3. Apply as Column

La colonne TTL apparaît dans la liste et persiste entre les sessions.

# Afficher uniquement les paquets avec un TTL inférieur à 10 (proches de l'expiration)
ip.ttl < 10
# Afficher les paquets ICMP Time Exceeded (TTL expiré en transit)
icmp.type == 11
# Afficher les ping (ICMP Echo Request / Echo Reply)
icmp.type == 8 || icmp.type == 0
# Filtrer les paquets d'une source avec un TTL précis
ip.src == 192.168.1.1 && ip.ttl == 64

En déroulant Internet Protocol Version 4 dans le panneau de détail :

Internet Protocol Version 4
Version: 4
Header Length: 20 bytes
...
Time to Live: 54 ← valeur observée à la réception
Protocol: ICMP (1)
Source Address: 203.0.113.45
Destination Address: 192.168.1.10

Sans aucun outil de fingerprinting dédié, un simple ping suffit à orienter l’identification de l’OS :

Terminal window
ping 192.168.1.100
PING 192.168.1.100: 64 bytes of data
64 bytes from 192.168.1.100: icmp_seq=0 ttl=128 time=1.2 ms

TTL=128 reçu, et la cible est sur le LAN local (0 ou 1 saut) → Windows.

Terminal window
ping 10.0.0.5
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=0.8 ms

TTL=64 sur le LAN → Linux, macOS, Android ou FreeBSD.

traceroute exploite directement le TTL pour cartographier le chemin réseau :

Terminal window
# Linux / macOS
traceroute 8.8.8.8
# Windows
tracert 8.8.8.8
traceroute to 8.8.8.8, 30 hops max
1 192.168.1.1 1.2 ms ← routeur local (TTL=1 expiré ici)
2 10.0.0.1 5.4 ms ← FAI
3 172.16.10.1 8.1 ms
4 ...
10 8.8.8.8 22.3 ms ← destination atteinte (10 sauts)

Chaque ligne correspond à un routeur ayant reçu un paquet avec TTL=0 et renvoyé un ICMP Time Exceeded. Le dernier saut est la destination elle-même, qui répond normalement.

Le TTL est visible dans chaque paquet IP sans aucun outil spécifique. En le croisant avec les valeurs de départ par OS, on peut estimer le nombre de sauts entre soi et une cible et orienter l’identification du système sans scan actif. Dans Wireshark, appliquer le TTL comme colonne permet de repérer immédiatement les anomalies — paquets proches de l’expiration, TTL incohérents avec la topologie attendue.