# ICMP

Internet Control Message Protocol  
  
Le protocole ICMP (protocole IP #1) est généralement utilisé pour surveiller l’état d’un système, pour diagnostiquer la connexion entre deux systèmes ou pour stresser un système généralement dans l’objectif de nuire à son fonctionnement (ex. attaque de déni de service).  
  
Les applications communes de ICMP sont “ping” et “traceroute”. Ping permet de tester la connexion et la latence entre deux systèmes et traceroute permet de vérifier le chemin qu’emprunte une transmission entre deux systèmes (les routeurs qui acheminent les données entre les interlocuteurs).

# Ping

Ping est une commande généralement utilisée pour tester la connectivité entre deux appareils mis en réseau ainsi que de tester la latence de communication entre ces appareils. Cette commande est présente dans la majorité des systèmes pouvant être mis en réseau et utilise le protocole standardisé ICMP.

ICMP est un protocole sans état (sans établissement de session) permettant l'envoi de messages simples entre deux appareils. Ping utilise principalement les messages de type 8 ou "echo" et de type 0 ou "echo reply". Par le nom de ces types de messages, on peut en déduire que "ping" fonctionne en envoyant un message et en attendant une réponse avec le même contenu. Si un appareil envoie une requête "echo" à un autre appareil contenant le message "12345", il s'attendra à recevoir une réponse contenant "12345". Toute autre réponse indiquerait que la donnée aurait été déformée en chemin soit vers où depuis la destination du ping.

Par défaut, la plupart des systèmes enverront une partie contigue (qui se suit) de la table ASCII à une longueur déterminée (Windows envoie par défaut 32 octets/32 caractères ASCII, Linux en envoie 64). Il est possible de personnaliser la longueur ainsi que le contenu de ce message des outils le permettant (ex. nping).

Exemple d'une requête echo telle que présentée par Wireshark

```
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Data (32 bytes)
        Text: abcdefghijklmnopqrstuvwabcdefghi
        [Length: 32]
```

Exemple d'une réponse echo telle que présentée par Wireshark

```
Internet Control Message Protocol
    Type: 0 (Echo (ping) reply)
    [Response time: 40.602 ms]
    Data (32 bytes)
        Text: abcdefghijklmnopqrstuvwabcdefghi
        [Length: 32]
```

Cette application est parfois utilisée à des fins malveillantes pour "noyer" (flood) un système et surcharger sa connexion réseau. Ce type d'attaque se nomme une attaque de déni de service et pourrait être utilisée pour figer un serveur web ou pour augmenter la latence d'un compétiteur dans un jeu en ligne.

# Traceroute

Traceroute permet de déterminer l'itinéraire de la transmission d'une donnée (les routeurs responsables de l'acheminement de la donnée) d'un appareil à un autre. Cette application utilise aussi le protocole ICMP.

Ce protocole utilisera le type de réponse 11 du protocole ICMP (time exceeded) en déterminant un TTL (time to life) en fonction du nombre de sauts effectués pour rejoindre sa destination. Le premier ping envoyé aura un TTL de 1. De cette façon le premier routeur qui traitera la donnée indiquera que le délai est dépassé et répondra par sa propre adresse IP ainsi indiquant à la source du trafic le routeur à travers lequel la communication devra passer. La source enverra ensuite un ping avec un TTL de 2 pour que le deuxième routeur réponde avec un message de type 11/délai expiré pour que la source soit informée de l'adresse du deuxième routeur et ainsi de suite.

Exemple d'une première requête de traceroute avec un TTL de 1

```
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 192.168.0.2
    Time to Live: 1
        [Expert Info (Note/Sequence): "Time To Live" only 1]
            ["Time To Live" only 1]
    Protocol: ICMP (1)
    Source Address: 192.168.1.2
    Destination Address: 192.168.0.2
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
```

Exemple d'une réponse du premier saut d'une requête traceroute

```
Internet Control Message Protocol
    Type: 11 (Time-to-live exceeded)
    Code: 0 (Time to live exceeded in transit)
    Internet Protocol Version 4, Src: 192.168.1.2, Dst: 192.168.0.2
        Time to Live: 1
            [Expert Info (Note/Sequence): "Time To Live" only 1]
                ["Time To Live" only 1]
                [Severity level: Note]
                [Group: Sequence]
        Protocol: ICMP (1)
        Source Address: 192.168.1.2
        Destination Address: 192.168.0.2
```

Exemple d'une deuxième requête de traceroute avec un TTL de 2

```
Internet Protocol Version 4, Src: 192.168.1.2, Dst: 192.168.0.2
    Time to Live: 2
        [Expert Info (Note/Sequence): "Time To Live" only 2]
            ["Time To Live" only 2]
    Protocol: ICMP (1)
    Source Address: 192.168.1.2
    Destination Address: 192.168.0.2
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
```

Exemple d'une réponse du deuxième saut d'une requête traceroute provenant de la destination finale de la requête

```
Internet Protocol Version 4, Src: 192.168.0.2, Dst: 192.168.1.2
    Protocol: ICMP (1)
    Source Address: 192.168.0.2
    Destination Address: 192.168.1.2
Internet Control Message Protocol
    Type: 0 (Echo (ping) reply)
    [Request frame: 3]
    [Response time: 1.846 ms]
```