Comment effacer le cache arp sous Linux?

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 sous la forme 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é rafraîchi – cest ok)

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

EDIT

Ceci est 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 

Commentaires

  • Quessayez-vous daccomplir ici? Ou plus clairement, quel problème essayez-vous de résoudre?
  • Vous manquez dentrées de table arp? Peut-être quil y a ‘ un programme demandant cette adresse IP, renouvelant ainsi cette entrée. Vérifiez auprès de wireshark ou tcpdump.
  • @MichaelMartinez car xy problème . Il semble probable que cette question ne soit pas ‘ le problème racine et il pourrait y avoir un problème sous-jacent sur lequel lOP devrait travailler à la place.
  • La raison pour laquelle ces informations nest pas dans la question parce que ce nest pas pertinent. Je veux un cache ARP propre. Arrêt complet. Vous ne me croyez pas que je veux cela, mais cest votre problème, pas le mien. Je vous assure: je veux un cache ARP propre.
  • Il y a une explication détaillée du mécanisme de cache ARP ici: stackoverflow.com/a/ 15511117/647991

Réponse

Oneliner original

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.

Commande de découverte de linterface copier-coller

interfaces=$( arp -n | awk " NR == 1 {next} {interfaces[$5]+=1} END {for (interface in interfaces){print(interface)}} " ); for interface in $interfaces; do echo "Clearing ARP cache for $interface"; sudo ip link set arp off dev $interface; sudo ip link set arp on dev $interface; done 

Remarque: Les points-virgules vous permettent de condenser cette commande en un oneliner, mais cela a lair terrible dans un bloc de code sur SO .

Exemple de sortie sur Raspbian

pi@raspberrypi:~ $ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.0.1 ether 58:19:f8:0d:57:aa C wlan0 10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0 pi@raspberrypi:~ $ interfaces=$( arp -n | awk " NR == 1 {next} {interfaces[$5]+=1} END {for (interface in interfaces){print(interface)}} "); for interface in $interfaces; do echo "Clearing ARP cache for $interface"; sudo ip link set arp off dev $interface; sudo ip link set arp on dev $interface; done Clearing ARP cache for wlan0 pi@raspberrypi:~ $ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0 

Commentaires

  • Il faut soit faites dans un script shell ou sur la machine, car cela semble interrompre la connectivité après la première commande.
  • Je lai fait sur une seule ligne, et cela a fonctionné: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. La sleep peut ne pas être nécessaire.

Réponse

Votre la première solution fonctionne, cela prend juste un peu de temps (5 à 10 secondes dans mon test sur Kali) pour passer de « (incomplet) » à aucune entrée.

Il est vraisemblablement dans une sorte détat de transition sur sa façon dêtre supprimé.

Commentaires

  • Pour moi (Ubuntu 14.04) ce nétait pas le cas: les entrées sont conservées longtemps ( pour toujours?) à létat incomplet. Je vais re-vérifier cela aujourdhui.
  • Vérifié: même après quelques minutes, les entrées sont toujours là, à létat incomplet (arp 1.88, net-tools 1.60)
  • Eh bien alors 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. Jespère que vous trouverez bientôt votre réponse. Peut supprimer celui-ci si vous ‘ aimez.
  • Non, laissez-le, il donne des informations pour les autres. Mais je suppose que le comportement 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 dutilisation.

Réponse

La solution que vous avez mentionnée est la bonne et la plus sûre approche pour vider la table ARP:

ip neigh flush all [dev <device>]

Si certaines entrées sont modifiées en invalides, cest temporaire et une partie de lARP Laspect important est que le mappage a disparu, une entrée ARP marquée comme incomplète nest pas une entrée IP-MAC sur la table.

Jai juste essayé ceci et dans mon cas, cela a immédiatement effacé le table et na laissé aucune entrée incomplète.

Commentaires

  • Dans certains cas (peu clairs), ip neigh flush all nest pas suffisant. Dans mon cas, cela na pas effacé les entrées ajoutées avec arp -s.
  • Je préfère de loin cela à ma propre réponse ci-dessus, avec la mise en garde supplémentaire concernant les entrées ARP statiques, en fonction du comportement souhaité.

Réponse

Dans certains systèmes, la commande ip nest pas disponible.

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

Voici donc lalternative de la commande ip link set arp off dev eth0; ip link set arp on dev eth0.

Si vous voulez supprimez toutes les entrées du tableau en une seule commande, utilisez for loop comme dans lexemple 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 DARP AVEC ARP -D COMMAND

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

APRÈS: LADRESSE MAC SUPPRIMÉE DES ENTRÉES AVEC UN MESSAGE INCOMPLET

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

Cest vrai, en supprimant arp avec la commande arp -d, les entrées arp sont toujours là avec le message incomplete.

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

AVANT

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

DISABLE & ACTIVER LES INTERFACES ETH1 & ETH2 EN UNE SEULE COMMANDE

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:~$ 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *