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
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
. Lasleep
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:~$
wireshark
otcpdump
.