Comment effacez-vous le cache arp sous linux?


13

Tous les deux:

sudo ip -s -s neigh flush all

Et:

sudo arp -d 192.168.0.102

Au lieu de vider le cache arp, ils semblent simplement invalider les entrées (ils apparaîtront comme incomplete). Même après quelques minutes, le cache ARP ressemble à:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.103                    (incomplete)                              eth0
192.168.0.1              ether   DE:AD:BE:EF:DE:AD   C                     eth0

(Le MAC de la passerelle a été actualisé - c'est ok)

Comment puis-je vraiment vider le cache ARP, comme dans "supprimer toutes les entrées de la table"? Je ne veux pas conserver les entrées incomplètes, je veux les supprimer. Est-ce possible?

ÉDITER

Voici mon système:

» arp --version
net-tools 1.60
arp 1.88 (2001-04-04)
+I18N
AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE 
HW: (ether) +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 

» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:        14.04
Codename:       trusty

» uname -a
Linux polyphemus.xxx-net 3.13.0-46-generic #77-Ubuntu SMP Mon Mar 2 18:23:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

3
Qu'essayez-vous d'accomplir ici? Ou plus clairement, quel problème essayez-vous de résoudre?
EEAA

Êtes-vous à court d'entrées de table arp? Peut-être qu'un programme demande cette adresse IP, renouvelant ainsi cette entrée. Vérifiez avec wiresharkou tcpdump.
ott--

5
@MichaelMartinez car problème xy . Il semble probable que la question ne soit pas le problème racine et il pourrait y avoir un problème sous-jacent sur lequel l'OP devrait travailler à la place.
Zoredache

1
La raison pour laquelle ces informations ne sont pas en cause est qu'elles ne sont pas pertinentes. Je veux un cache ARP propre. Arrêt complet. Vous ne me croyez pas que je veux ça, mais c'est votre problème, pas le mien. Je vous assure: je veux un cache ARP propre.
dangonfast

2
Il y a une explication approfondie du mécanisme de cache ARP ici: stackoverflow.com/a/15511117/647991
dangonfast

Réponses:


12
ip link set arp off dev eth0 ; ip link set arp on dev eth0

Assurez-vous de tout faire en même temps, afin de ne pas interrompre la connectivité réseau avant de pouvoir réactiver ARP.


2
On doit soit le faire dans un script shell ou sur la machine, car il semble rompre la connectivité après la première commande.
Louis

Je l' ai fait sur une ligne, et cela a fonctionné: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Cela sleeppeut ne pas être nécessaire.
mivk

5

Votre première solution fonctionne, il faut juste un peu de temps (5-10 secondes dans mon test sur Kali) pour passer de "(incomplet)" à aucune entrée.

Vraisemblablement, il est dans une sorte de transition vers sa suppression.


Pour moi (Ubuntu 14.04) ce n'était pas le cas: les entrées sont conservées longtemps (pour toujours?) À l'état incomplet. Je revérifierai cela encore aujourd'hui.
dangonfast

Vérifié: même après quelques minutes, les entrées sont toujours là, à l'état incomplet (arp 1.88, net-tools 1.60)
dangonfast

Eh bien, votre problème est certainement un comportement non standard, peut-être particulier à Ubuntu 14.04. La bonne façon de le faire sous Linux ne fonctionne tout simplement pas pour vous. J'espère que vous trouverez bientôt votre réponse. Peut supprimer celui-ci si vous le souhaitez.
armani

1
Non, laissez-le, il donne des informations pour les autres. Mais je suppose que le comportement le plus "standard" se trouve dans Ubuntu, pas dans Kali, qui est une distribution pour les tests de pénétration et a des valeurs par défaut spécifiquement modifiées pour ce cas d'utilisation.
dangonfast

1

Dans certains systèmes, la ipcommande n'est pas disponible.

user@linux:~$ ip
-bash: ip: command not found
user@linux:~$

C'est donc l'alternative de la ip link set arp off dev eth0; ip link set arp on dev eth0commande.

Si vous souhaitez supprimer toutes les entrées du tableau en une seule commande, utilisez for loopcomme dans l'exemple suivant.

AVANT

user@linux:~$ arp
? (10.0.0.1) at 00:00:00:aa:aa:12 [ether]  on eth1
? (172.168.0.3) at 00:00:00:aa:aa:11 [ether]  on eth2
user@linux:~$ 

SUPPRESSION D'ARP AVEC LA COMMANDE ARP -D

user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done
user@linux:~$

APRÈS: ADRESSE MAC SUPPRIMÉE DES ENTRÉES AVEC UN MESSAGE INCOMPLETE

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

C'est vrai, en supprimant arp avec la arp -dcommande, les entrées d'arp sont toujours là avec le incompletemessage.

Pour résoudre ce problème, utilisez ifconfig ethx up/downcomme ceci

AVANT

user@linux:~$ arp
? (10.0.0.1) at <incomplete>  on eth1
? (172.168.0.3) at <incomplete>  on eth2
user@linux:~$ 

DESACTIVER ET ACTIVER LES INTERFACES ETH1 ET ETH2 DANS UNE COMMANDE UNIQUE

user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done
user@linux:~$ 

TADAAA ... PROBLÈME RÉSOLU :)

user@linux:~$ arp
user@linux:~$ 

0

Votre solution mentionnée est l'approche correcte et sûre pour vider la table ARP:

ip neigh flush all [dev <device>]

Si certaines entrées sont changées en invalides, cela est temporaire et fait partie du protocole ARP. L'aspect important est que le mappage a disparu, une entrée ARP signalée comme incomplète n'est pas une entrée IP-MAC sur la table.

Je viens d'essayer cela et dans mon cas, il a immédiatement effacé la table et n'a laissé aucune entrée incomplète.


Dans certains cas (peu clairs), ip neigh flush all n'est pas suffisant. Dans mon cas, il n'a pas effacé les entrées ajoutées avec arp -s.
MappaM
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.