Come si cancella la cache arp su Linux?

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

  • Cosa stai cercando di ottenere qui? O più chiaramente, quale problema stai cercando di risolvere?
  • Sei a corto di voci nella tabella arp? Forse ‘ è un programma che richiede quellIP, rinnovando così quella voce. Controlla con wireshark o tcpdump.
  • @MichaelMartinez perché xy problema . Sembra probabile che la domanda non sia ‘ il problema principale e potrebbe esserci un problema di fondo su cui lOP dovrebbe invece lavorare.
  • Il motivo per cui queste informazioni non è nella domanda è perché non è rilevante. Voglio una cache ARP pulita. Punto. Non ti fidi di me se lo voglio, ma questo è il tuo problema, non il mio. Ti assicuro: voglio una cache ARP pulita.
  • Cè una spiegazione approfondita del meccanismo della cache ARP qui: stackoverflow.com/a/ 15511117/647991

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *