¿Cómo borras la caché arp en linux?

Ambos:

sudo ip -s -s neigh flush all 

Y:

sudo arp -d 192.168.0.102 

En lugar de borrar el caché de arp, parece que solo invalidan las entradas (aparecerán como incomplete). Incluso después de unos minutos, la caché ARP se ve así:

$ 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 

(La MAC de la puerta de enlace se ha actualizado, eso está bien)

¿Cómo puedo realmente borrar la caché ARP, como en «eliminar todas las entradas de la tabla»? Yo no quiero mantener las entradas incompletas, quiero que se eliminen. ¿Es esto posible?

EDIT

Este es mi sistema:

» 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 

Comentarios

  • ¿Qué estás tratando de lograr aquí? O más claramente, ¿qué problema está tratando de resolver?
  • ¿Le faltan entradas en la tabla arp? Tal vez haya ‘ un programa que solicite esa IP, renovando así esa entrada. Verifique con wireshark o tcpdump.
  • @MichaelMartinez porque xy problema . Parece probable que la pregunta no sea ‘ t la raíz del problema y podría haber algún problema subyacente en el que el OP debería estar trabajando en su lugar.
  • La razón por la que esta información no está en la pregunta es porque no es relevante. Quiero un caché ARP limpio. Punto final. No confías en mí que quiero eso, pero ese es tu problema, no el mío. Te lo aseguro: quiero un caché ARP limpio.
  • Hay una explicación detallada del mecanismo del caché ARP aquí: stackoverflow.com/a/ 15511117/647991

Respuesta

Delineador original

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

Asegúrese de hacerlo todo a la vez, para que no» interrumpa la conectividad de la red antes de «poder volver a activar ARP.

Interfaz que descubre el comando copiar y pegar

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 

Nota: Los puntos y comas le permiten condensar este comando en un delineador, pero se ve terrible en un bloque de código en SO .

Salida de ejemplo en 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 

Comentarios

  • Uno debe hacer en un script de shell o en la máquina, ya que parece romper la conectividad después del primer comando.
  • Lo hice en una línea y funcionó: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. La sleep puede no ser necesaria.

Respuesta

Su La primera solución funciona, solo se necesita un poco de tiempo (5-10 segundos en mi prueba en Kali) para pasar de «(incompleto)» a ninguna entrada.

Presumiblemente se encuentra en algún tipo de estado de transición en su camino a ser eliminado.

Comentarios

  • Para mí (Ubuntu 14.04) este no fue el caso: las entradas se guardan durante mucho tiempo ( para siempre?) en el estado incompleto. Volveré a comprobar esto hoy.
  • Verificado: incluso después de algunos minutos, las entradas todavía están allí, en el estado incompleto (arp 1.88, net-tools 1.60)
  • Bueno entonces su problema es ciertamente un comportamiento no estándar, tal vez particular de Ubuntu 14.04. La forma correcta de hacerlo en Linux simplemente no funciona para usted. Espero que encuentres tu respuesta pronto. Puedes borrar este si ‘ quieres.
  • No, déjalo, da información para otros. Pero supongo que el comportamiento más » estándar » se encuentra en Ubuntu, no en Kali, que es una distribución para pruebas de penetración y tiene valores predeterminados ajustados específicamente para ese caso de uso.

Respuesta

Su solución mencionada es la correcta y segura enfoque para vaciar la tabla ARP:

ip neigh flush all [dev <device>]

Si ciertas entradas se cambian a inválidas, eso es temporal y parte del ARP protocolo. El aspecto importante es que el mapeo se ha ido, una entrada ARP marcada como incompleta no es una entrada IP-MAC en la tabla.

Acabo de probar esto y en mi caso borró inmediatamente el tabla y no dejó entradas incompletas.

Comentarios

  • En algunos casos (poco claros), ip neigh flush all no es suficiente. En mi caso, no borró las entradas agregadas con arp -s.
  • Prefiero esto a mi propia respuesta anterior, con la advertencia adicional con respecto a las entradas ARP estáticas, según el comportamiento deseado.

Responder

En cierto sistema, el comando ip no está disponible.

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

Así que esta es la alternativa del comando ip link set arp off dev eth0; ip link set arp on dev eth0.

Si quieres elimine todas las entradas de la tabla en un solo comando, use for loop como el siguiente ejemplo.

ANTES de

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

ELIMINANDO ARP CON EL COMANDO ARP -D

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

DESPUÉS: DIRECCIÓN MAC ELIMINADA DE LAS ENTRADAS CON MENSAJE INCOMPLETO

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

Eso es cierto, al eliminar arp con el comando arp -d, las entradas de arp siguen ahí con el mensaje incomplete.

Para resolver este problema, use ifconfig ethx up/down así

ANTES

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

DESACTIVAR & HABILITAR LAS INTERFACES ETH1 & ETH2 EN UN SOLO COMANDO

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

TADAAA … PROBLEMA RESUELTO:)

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *