arp -a : afficher la table ARP et diagnostiquer ton réseau local
Tu tapes arp -a dans ton terminal ou ton invite de commandes et tu tombes sur une liste d’adresses IP associées à des adresses MAC. En fait, c’est exactement ce que fait cette commande : elle te montre le contenu du cache ARP de ta machine, c’est-à-dire toutes les correspondances que ton système a apprises récemment pour parler sur le réseau local.
Le protocole ARP (Address Resolution Protocol) existe depuis des décennies pour résoudre un problème simple. Sur un réseau Ethernet, les machines communiquent avec des adresses MAC à la couche 2, mais les applications utilisent des adresses IP à la couche 3. Quand ton poste veut joindre 192.168.10.45, il ne connaît pas forcément son adresse physique. Il envoie donc une requête en broadcast : « Qui possède l’IP 192.168.10.45 ? ». La machine concernée répond avec sa MAC, et tout le monde garde l’info en cache pour éviter de reposer la question toutes les deux secondes. arp -a te donne un instantané de ce que ton système a retenu de ces échanges.
Ce que arp -a affiche vraiment
Le résultat change un peu selon l’OS, mais le principe reste identique. Sous Windows, tu ouvres cmd (idéalement en administrateur), tu tapes arp -a et tu valides. Tu vois une ou plusieurs sections, une par interface réseau. Chaque ligne donne l’IP, l’adresse physique correspondante et le type d’entrée.
Voici à quoi ça ressemble souvent :
Interface: 192.168.10.25 --- 0x3
Internet Address Physical Address Type
192.168.10.1 00-0c-29-8a-1b-2c dynamic
192.168.10.50 00-11-22-33-44-55 dynamic
224.0.0.22 01-00-5e-00-00-16 static
La ligne multicast en bas est classique, elle est statique. Les entrées « dynamic » viennent du protocole lui-même et expirent après un délai d’inactivité (quelques minutes en général). Les entrées « static » sont celles que tu as ajoutées manuellement.
Sous Linux, la sortie est un peu différente. Avec arp -a ou arp -an (pour rester en adresses numériques), tu obtiens quelque chose comme ça :
? (192.168.10.1) at 00:0c:29:8a:1b:2c [ether] on eth0
? (192.168.10.50) at 00:11:22:33:44:55 [ether] on eth0
Les flags indiquent l’état : C pour complete, M pour permanent (static). Sur les systèmes récents, beaucoup de gens passent plutôt par ip neigh show, qui donne des infos plus riches sur l’état des voisins (REACHABLE, STALE, DELAY…).
Sur macOS, arp -a ou arp -an marche très bien aussi, avec un format proche de Linux.
arp -a au quotidien : les cas concrets
Quand tu diagnostiques un problème de connectivité sur le LAN, arp -a fait souvent partie des premières commandes que je lance. Tu pinges une machine, ça ne répond pas. Tu regardes le cache : si l’entrée n’y est pas, soit la cible n’a jamais répondu à une requête ARP, soit elle est tout simplement éteinte ou débranchée. Si l’entrée est là mais que le ping échoue quand même, le problème est ailleurs : firewall, routage, ou config IP qui a changé.
Le petit truc que j’utilise tout le temps : je fais un ping vers l’IP cible juste avant de relancer arp -a. Comme ça le cache se rafraîchit et je suis sûr d’avoir l’info à jour. Ça permet aussi de voir rapidement si une machine est joignable au niveau couche 2 avant de creuser plus loin.
Ça sert également pour repérer des choses bizarres. Une adresse MAC inattendue associée à ton gateway ? Ça peut être le signe d’un double IP, d’un vieux matériel qui traîne, ou dans le pire des cas d’un empoisonnement ARP. Sur un petit réseau de bureau, c’est rare, mais sur des environnements un peu plus exposés, ça arrive.
Ajouter ou supprimer des entrées
Tu peux forcer une correspondance avec arp -s. Par exemple :
arp -s 192.168.10.200 00-aa-bb-cc-dd-ee
Ça crée une entrée statique. Utile pour des tests ou pour contourner temporairement un souci, mais ce n’est pas une solution propre sur le long terme. Pour tout effacer, sous Windows c’est arp -d *, sous Linux arp -d 192.168.10.200 ou l’équivalent avec ip.
Attention : les entrées statiques ne survivent pas toujours à un redémarrage du service réseau. Si tu veux les rendre persistantes, il faut les mettre dans un script de boot.
Les limites d’arp -a et les outils modernes
Le cache ARP est local à chaque machine et ne contient que les correspondances récentes. Tu ne verras pas tout le réseau, seulement les machines avec lesquelles tu as communiqué ou qui ont répondu à des broadcasts récents. Pour un scan plus complet, des outils comme nmap ou arp-scan sont plus efficaces.
Sous Linux, ip -s neigh show remplace peu à peu la vieille commande arp. Elle fait partie du paquet iproute2 et donne une vision plus précise de l’état des voisins. La commande arp reste disponible via net-tools, mais elle est un peu considérée comme legacy sur les distributions récentes.
Proxy ARP existe aussi : un routeur peut répondre à la place d’une machine distante pour faire croire qu’elle est sur le même segment. C’est transparent pour les clients, mais ça complexifie un peu le diagnostic quand tu regardes le cache.
La question sécurité : ARP n’est pas parfait
Le protocole ARP n’a aucune authentification. N’importe qui sur le même LAN peut envoyer une fausse réponse et empoisonner le cache des autres machines. L’attaquant se fait alors passer pour le gateway ou pour une autre station et intercepte le trafic. C’est l’ARP spoofing.
Dans les environnements un peu critiques, les switches gèrent ça avec le Dynamic ARP Inspection (DAI). Le switch compare chaque réponse ARP à une base de liaisons IP-MAC construite via DHCP snooping et rejette les réponses incohérentes. Sur un réseau domestique ou un petit LAN de bureau bien contrôlé, le risque reste limité, mais c’est toujours bon de savoir que le mécanisme existe et qu’il n’est pas infaillible.
En pratique, arp -a reste une commande de base, rapide, qui ne demande presque rien et qui te donne tout de suite une idée de ce qui se passe au niveau de la résolution d’adresses. Je l’utilise encore constamment pour les diagnostics de premier niveau. Ça fait gagner un temps fou pour comprendre si le problème est au niveau MAC/IP ou plus haut dans la pile.