Entrambi:
sudo ip -s -s neigh flush all
E:
sudo arp -d 192.168.0.102
Invece di svuotare la cache arp, sembrano solo invalidare le voci (appariranno come incomplete
). Anche dopo alcuni minuti, la cache ARP ha il seguente aspetto:
$ 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
(Il MAC del gateway è stato aggiornato, va bene)
Come posso veramente cancellare la cache ARP, come in “eliminare tutte le voci dalla tabella”? non voglio mantenere voci incomplete, desidero che vengano rimosse. È possibile?
EDIT
Questo è il mio 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
Commenti
Risposta
Oneliner originale
ip link set arp off dev eth0 ; ip link set arp on dev eth0
Assicurati di fare tutto in una volta, in modo da non interrompere la connettività di rete prima di” essere in grado di riattivare ARP.
Linterfaccia rileva il comando copia-incolla
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: i punti e virgola ti consentono di condensare questo comando in un oneliner, ma sembra terribile in un blocco di codice su SO .
Esempio di output su 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
Commenti
- Uno deve farlo in uno script di shell o sulla macchina, poiché sembra interrompere la connettività dopo il primo comando.
- Lho fatto su una riga e ha funzionato:
dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev
.sleep
potrebbe non essere necessario.
Rispondi
Il tuo la prima soluzione funziona, ci vuole solo un po di tempo (5-10 secondi nel mio test su Kali) per passare da “(incompleto)” a nessuna voce.
Presumibilmente è in una sorta di stato di transizione su il suo modo di essere cancellato.
Commenti
- Per me (Ubuntu 14.04) non è stato così: le voci vengono conservate per molto tempo ( per sempre?) nello stato incompleto. Lo ricontrollerò ancora oggi.
- Verificato: anche dopo alcuni minuti, le voci sono ancora lì, nello stato incompleto (arp 1.88, net-tools 1.60)
- Bene allora il tuo problema è sicuramente un comportamento non standard, forse particolare di Ubuntu 14.04. Il modo corretto per farlo in Linux semplicemente non funziona per te. Spero che tu trovi presto la tua risposta. Puoi eliminarlo se ‘ ti piace.
- No, lascialo, fornisce informazioni per gli altri. Ma immagino che il comportamento più ” standard ” si trovi in Ubuntu, non in Kali, che è una distribuzione per i test di penetrazione e ha valori predefiniti ottimizzati specificamente per quel caso duso.
Risposta
La soluzione menzionata è quella corretta e sicura approccio per svuotare la tabella ARP:
ip neigh flush all [dev <device>]
Se alcune voci vengono modificate in non valide, ciò è temporaneo e fa parte dellARP . Laspetto importante è che la mappatura è sparita, una voce ARP contrassegnata come incompleta non è una voce IP-MAC sulla tabella.
Lho appena provato e nel mio caso ha immediatamente cancellato il table e non ha lasciato voci incomplete.
Commenti
- In alcuni casi (poco chiari), ip neigh flush all non è sufficiente. Nel mio caso non ha cancellato le voci aggiunte con arp -s.
- Preferisco di gran lunga questa alla mia risposta sopra, con lavvertenza aggiunta riguardo alle voci ARP statiche, a seconda del comportamento desiderato.
Risposta
In alcuni sistemi, il comando ip
non è disponibile.
user@linux:~$ ip -bash: ip: command not found user@linux:~$
Quindi questa è lalternativa del comando ip link set arp off dev eth0; ip link set arp on dev eth0
.
Se lo desideri elimina tutte le voci dalla tabella con un unico comando, utilizza for loop
come nellesempio seguente.
PRIMA
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:~$
RIMOZIONE DI ARP CON IL COMANDO ARP -D
user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done user@linux:~$
DOPO: INDIRIZZO MAC RIMOSSO DALLE VOCI CON MESSAGGIO INCOMPLETO
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
È vero, eliminando arp con il comando arp -d
, le voci arp sono ancora presenti con il messaggio incomplete
.
Per risolvere questo problema, utilizza ifconfig ethx up/down
in questo modo
PRIMA
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
DISABILITA & ABILITA LE INTERFACCE ETH1 & ETH2 IN UN UNICO COMANDO
user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done user@linux:~$
TADAAA … PROBLEMA RISOLTO:)
user@linux:~$ arp user@linux:~$
wireshark
otcpdump
.