icmp or arp and net 192.168.60.0/24
Table des matières
Ethernet et ARP
Nous savons que sur un réseau local Ethernet chaque nœud dispose d'une adresse utilisée par le «Media Access Control» grâce à laquelle chaque nœud est parfaitement identifiable. Sur des architectures de type NetBIOS, des algorithmes permettaient d'établir des relations directes entre les noms des nœuds et leur adresse MAC. Avec l'arrivée d'IP, c'est une relation entre adresse IP et adresse MAC que chaque nœud doit connaître avant toute tentative de dialogue. C'est ARP qui s'en charge, et voici comment.
Relations entre MAC et IPv4
Il faut maintenant mettre en évidence la façon dont le système retrouve les adresses MAC en fonction des adresses IPv4. Nous allons espionner ce qu'il se passe sur la couche Ethernet lorsqu'un nœud ipv4 cherche à dialoguer avec un autre nœud IPv4. La commande la plus simple à utiliser pour générer un dialogue est la commande ping
qui utilise le protocole ICMP que nous étudierons plus tard en détail.
L'outil d'espionnage se nomme Wireshark, c'est une référence dans le domaine. Il est distribué sous licence libre GPL.
Address Resolution Protocol
Pour rappel, soit le réseau local suivant:
Le poste 192.168.60.127 doit lancer une impression sur 192.168.60.10, mais le poste ne connaît pas l'adresse MAC associée à 192.168.60.10. La preuve ?
arp -n Adresse TypeMap AdresseMat Indicateurs Iface 192.168.60.254 ether 68:a3:78:86:ec:02 C enp1s0 192.168.60.3 ether 18:31:bf:df:a1:f0 C enp1s0 192.168.60.47 ether ae:2a:a7:dd:e6:07 C enp1s0
Nous allons la lui faire découvrir avec un simple: ping -c1 192.168.60.10
non sans avoir placé judicieusement notre sonde wiresherk, avec un filtre1) pour éliminer les trames parasites (car il s'en passe, des choses, même sur un réseau si petit).
Voici ce que l'on obtient:
No. Source Destination Protocol Info 1 RealtekU_37:36:49 Broadcast ARP Who has 192.168.60.10? Tell 192.168.60.127 2 HonHaiPr_0c:8d:48 RealtekU_37:36:49 ARP 192.168.60.10 is at f8:da:0c:0c:8d:48 3 192.168.60.127 192.168.60.10 ICMP Echo (ping) request id=0x0475, seq=1/256, ttl=64 (reply in 8) 4 192.168.60.10 192.168.60.127 ICMP Echo (ping) reply id=0x0475, seq=1/256, ttl=255 (request in 7)
Avant de pourvoir effectuer le ping, le système lance une recherche ARP sous forme d'un broadcast la question étant:
Who has 192.168.60.10? Tell 192.168.60.127
Tout le monde entend la question, mais seul l'intéressé répond:
192.168.60.10 is at f8:da:0c:0c:8d:48
Et à ce moment seulement ICMP lance le ping.
Voyons dans le détail de ces trames.
Trame1:
Ethernet II, Src: RealtekU_37:36:49 (52:54:00:37:36:49), Dst: Broadcast (ff:ff:ff:ff:ff:ff) Destination: Broadcast (ff:ff:ff:ff:ff:ff) Source: RealtekU_37:36:49 (52:54:00:37:36:49) Type: ARP (0x0806) Address Resolution Protocol (request) Hardware type: Ethernet (1) Protocol type: IPv4 (0x0800) Hardware size: 6 Protocol size: 4 Opcode: request (1) Sender MAC address: RealtekU_37:36:49 (52:54:00:37:36:49) Sender IP address: 192.168.60.127 Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00) Target IP address: 192.168.60.10
- Au niveau 2, nous voyons l'adresse MAC de la source et l'adresse MAC de broadcast (
ff:ff:ff:ff:ff:ff
). - Au niveau 3, nous voyons les adresses IP de la source et de la cible.
Trame 2:
Ethernet II, Src: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48), Dst: RealtekU_37:36:49 (52:54:00:37:36:49) Destination: RealtekU_37:36:49 (52:54:00:37:36:49) Source: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48) Type: ARP (0x0806) Address Resolution Protocol (reply) Hardware type: Ethernet (1) Protocol type: IPv4 (0x0800) Hardware size: 6 Protocol size: 4 Opcode: reply (2) Sender MAC address: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48) Sender IP address: 192.168.60.10 Target MAC address: RealtekU_37:36:49 (52:54:00:37:36:49) Target IP address: 192.168.60.127Nous avons notre réponse et le ping va pouvoir se faire:
Ethernet II, Src: RealtekU_37:36:49 (52:54:00:37:36:49), Dst: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48) Destination: HonHaiPr_0c:8d:48 (f8:da:0c:0c:8d:48) Source: RealtekU_37:36:49 (52:54:00:37:36:49) Type: IPv4 (0x0800) Internet Protocol Version 4, Src: 192.168.60.127, Dst: 192.168.60.10 0100 .... = Version: 4 .... 0101 = Header Length: 20 bytes (5) Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) 0000 00.. = Differentiated Services Codepoint: Default (0) .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0) Total Length: 84 Identification: 0xfe75 (65141) 010. .... = Flags: 0x2, Don't fragment 0... .... = Reserved bit: Not set .1.. .... = Don't fragment: Set ..0. .... = More fragments: Not set ...0 0000 0000 0000 = Fragment Offset: 0 Time to Live: 64 Protocol: ICMP (1) Header Checksum: 0x4259 Source Address: 192.168.60.127 Destination Address: 192.168.60.10 Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0x26a0 Identifier (BE): 1141 (0x0475) Identifier (LE): 29956 (0x7504) Sequence Number (BE): 1 (0x0001) Sequence Number (LE): 256 (0x0100)] Timestamp from icmp data: Mar 2, 2025 16:14:08.000000000 CET Data (48 bytes)
- Au niveau Ethernet, nous voyons les adresses MAC,
- au niveau Internet, les adresses IP,
- au niveau ICMP Nous avons un exemple de l' «echo request» et nous aurons l’occasion de revoir ceci plus en détail avec l'étude détaillée d'ICMP.
Structure du protocole ARP
Compléments d'information
- La durée de vie d'une entrée dans le cache ARP est limitée. Les durées sont paramétrables, mais par défaut une entrée a une durée de vie de plus ou moins 30 s (entre 15 et 45 s de façon aléatoire); Après ce temps, l'entrée est considérée comme «stale» (périmée) et sera éventuellement rafraîchie avec une nouvelle requête ARP si la table n'est pas trop volumineuse, détruite sinon. Les plus curieux iront voir le RFC 826
.
Wireshark peut aussi vérifier ce comportement. - le système qui a lancé la requête considère la première réponse reçue comme étant la bonne, sans aucune forme de vérification. Sur un réseau local, la technique du «man in the middle» peut permettre à un malveillant de prendre la place de la cible légitime en s'arrangeant pour répondre avant elle. En s'y prenant bien, le malveillant peut assez facilement se mettre au milieu de la conversation en interceptant les trames avant de les retransmettre à la cible légitime. Les hackers en herbe se débrouilleront tout seuls pour trouver comment s'y prendre…
- Nous avons vu la commande
arp -a
pour afficher le contenu du cache ARP, mais il existe une commande plus récente et plus fine: la fameuse commandeip
(administrateur requis):ip -4 neigh show
qui donnerait ici:
192.168.60.254 dev sw0 lladdr 68:a3:78:86:ec:02 REACHABLE 192.168.60.10 dev sw0 lladdr f8:da:0c:0c:8d:48 STALE 192.168.60.3 dev sw0 lladdr 18:31:bf:df:a1:f0 REACHABLE
Le routage
Voici comment les choses se passent. L'émetteur dispose pour envoyer son paquet:
- de son adresse IP,
- du masque de son réseau,
- de l'adresse de sa cible.
Au passage de la couche IP à la couche Ethernet, le calcul préliminaire est le suivant:
- calcul d'un ET logique bit à bit entre l'adresse de la source et le masque du réseau de la source (donne l'adresse du réseau source)
- calcul d'un ET logique bit à bit entre l'adresse de la cible et le masque du réseau de la source
- si les 2 résultats sont identiques, c'est que source et cible sont dans le même réseau. On cherche alors l'adresse MAC de la cible.
- si les deux résultats sont différents, c'est que la cible est dans un autre réseau. Dans le cas le plus classique, on cherchera alors l'adresse MAC de la passerelle par défaut pour que la couche Ethernet transporte la trame vers le routeur. Le reste ne dépend plus de la source.
Le cas le plus classique:
ip route show default via 192.168.60.254 dev enp1s0 192.168.60.0/24 dev enp1s0 proto kernel scope link src 192.168.60.127
Dans un cas plus complexe:
ip route show default via 192.168.60.254 dev sw0 192.168.60.0/24 dev sw0 proto kernel scope link src 192.168.60.47 192.168.61.0/24 dev sw1 proto kernel scope link src 192.168.61.254Ce nœud dispose de deux interfaces Ethernet, chacune dans un réseau différent. Le calcul sera alors plus long. Si l'adresse de la source est dans l'un des réseaux indiqués le système devra d'abord vérifier si la cible est dans
192.168.60.0/24
ou si elle est dans 192.168.61.0/24
avent de décider de l'envoyer sur la passerelle par défaut. Ce cas de figure pourra être étudié plus loin.