/sbin/arp

La commande arp permet de manipuler le cache ARP du noyau.

ARP est le système permettant la résolution des adresses IP en adresses physiques. Lorsqu'un hôte a besoin de communiquer avec un autre ordinateur d'un réseau local, il doit commencer par obtenir son adresse physique afin de lui adresser les paquets. La résolution d'adresse IP en adresse physique se fait par l'intermédiaire du protocole arp. Le cache ARP est une table gérée par le noyau faisant la correspondance entre les adresses IP et les adresses physiques lorsqu'elles ont déjà été résoluees.

Lorsqu'un hôte ne possède pas encore l'adresse physique du destinataire d'un paquet, il procède à une résolution ARP. La résolution se fait en deux temps. Premièrement, un paquet est envoyé sur le réseau à une adresse de broadcast, ce paquet précise l'IP recherchée. Ensuite, si un hôte du réseau possède l'adresse IP demandée dans la requête, il va répondre à celle-ci en envoyant son adresse IP et son adresse physique.

La commande arp

Lorsque la commande arp est lancée sans arguments, elle affiche simplement le contenu de toute la table du cache arp:

$ arp -a
sca-xt29.ulb.ac.be (164.15.81.40) at 00:11:D8:2B:CE:7F [ether] on eth1
cs.ulb.ac.be (164.15.81.5) at 00:04:76:9C:8F:44 [ether] on eth1
sca-xt11.ulb.ac.be (164.15.81.21) at 00:11:D8:48:76:77 [ether] on eth1
sca-xt09.ulb.ac.be (164.15.81.19) at 00:11:2F:67:B8:2E [ether] on eth1
sca-xt07.ulb.ac.be (164.15.81.17) at 00:11:D8:48:78:E5 [ether] on eth1
sca-xt21.ulb.ac.be (164.15.81.31) at 00:11:D8:2B:CE:93 [ether] on eth1

La commande arp est régulièrement utilisée pour 3 usages, afficher le cache arp, ajouter un hôte ou supprimer un hôte du cache.

Affichage

Afficher le cache arp est utile pour retrouver un hôte posant problème sur le réseau, et pour vérifier la validité des données. Lorsque la commande est invoquée sans options comme dans l'exemple précédent, elle affiche le contenu de la table. Deux options sont intéressantes pour l'affichage. L'option -n permet de spécifier qu'il ne faut pas résoudre le nom pour les adresses, ce qui permet d'accélérer le travail de la commande, les adresses IP sont donc affichées directement. L'option -a [hostname] permet d'afficher l'entrée du cache arp correspondant au nom d'hôte ou à l'adresse IP spécifiée.

$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
host-213-213-197-22.brut  ether   00:17:DF:44:30:01   C                     eth1
192.168.0.5              ether   00:90:F5:01:57:CA   C                     eth0
$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
213.213.197.22            ether   00:17:DF:44:30:01   C                     eth1
192.168.0.5              ether   00:90:F5:01:57:CA   C                     eth0
$ arp -a
host-213-213-197-1.brutele.be (213.213.197.1) à 00:17:DF:44:30:01 [ether] sur eth1
? (192.168.0.5) à 00:90:F5:01:57:CA [ether] sur eth0
$ arp -a hostname
arp -a 192.168.0.5
? (192.168.0.5) à 00:90:F5:01:57:CA [ether] sur eth0

Ajout d'un hôte

Un autre usage courant de la commande arp est l'ajout d'hôte dans le cache. On peut ajouter un hôte de façon temporaire, de la même façon que s' il avait été ajouté par une résolution arp, ou on peut ajouter un hôte permanent, qui ne sera pas supprimé comme le serait un hôte temporaire.

L'option permettant d'ajouter un hôte est -s hôte adresse_materielle hôte est l'adresse IP d'un hôte ou son nom, et adresse_materielle est l'adresse physique correspondante.

Lors de l'ajout d'un hôte, celui-ci est par défaut un hôte permanent, il n'est donc pas sujet à remplacement ou à supression lors des résolutions arp. Définir des adresses arp permanentes permet d'éviter la résolution ARP dans certains cas où elle est indésirable.

# arp -s 192.168.0.2 00:50:12:34:56:78
$ arp -a -n
? (192.168.0.2) à 00:50:12:34:56:78 [ether] PERM sur eth0
? (213.213.197.1) à 00:17:DF:44:30:01 [ether] sur eth1
? (192.168.0.5) à 00:90:F5:01:57:CA [ether] sur eth0

Notez le "PERM" pour l'adresse 192.168.0.2 qui indique que l'entrée est statique.

Il est aussi possible d'ajouter au cache un hôte temporaire, comme si il avait été découvert par recherche arp, ce type d'usage est utile pour écarter arp lors d'un dépannage réseau. Il suffit d'ajouter le qualificateur temp à la fin de l'option -s pour créer un hôte temporaire.

# sudo arp -s 192.168.0.69 00:60:98:76:54:32 temp
$ arp -a -n
? (192.168.0.69) à 00:60:98:76:54:32 [ether] sur eth0
? (192.168.0.2) à 00:50:12:34:56:78 [ether] PERM sur eth0
? (213.213.197.1) à 00:17:DF:44:30:01 [ether] sur eth1
? (192.168.0.5) à 00:90:F5:01:57:CA [ether] sur eth0

Une entrée a été ajoutée pour la station 192.168.0.69, et celle-ci est une entrée normale. Elle sera supprimée après un certain temps d'inactivité et peut être modifiée par une résolution.

Suppression d'un hôte

Il peut être utile de supprimer un hôte du cache ARP pour des besoins de dépannage ou simplement pour supprimer un hôte permanent qui n'est plus sur le réseau.

L'option permettant de retirer une entrée du cache arp est -d, on précise ensuite le nom d'hôte ou l'adresse IP à supprimer.

# arp -d 192.168.0.2
? (192.168.0.2) à  sur eth0
? (213.213.197.1) à 00:17:DF:44:30:01 [ether] sur eth1
? (192.168.0.5) à 00:90:F5:01:57:CA [ether] sur eth0

Les options importantes

Voici le récapitulatif des options importantes de netcat:

-n, --numeric
Affiche les hôtes sous forme numérique (adresse IP), au lieu de chercher à résoudre le nom d'hôte.
-a [hostname], --display [hostname]
Si hostname n'est pas spécifié, affiche tout le cache arp. Si hostname est fourni, affiche les informations relative à l'hôte.
-s hostname hw_addr [temp]
Ajoute une nouvelle paire IP-addresses physique à la table arp. L'adresse IP est précisée par hostname, l'adresse physique par hw_addr. Si temp est précisé, la nouvelle entrée sera une entrée standard, sinon c'est un hôte permanent qui est ajouté.
-d hostname, --delete hostname
Supprime l'entrée d'adresse IP hostname du cache arp.

Page de manuel

La page de manuel de arp décrit l'ensemble des options de la commande