Come si cancella la cache arp su linux?


13

Tutti e due:

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 appare come:

$ 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 davvero cancellare la cache ARP, come in "elimina tutte le voci dalla tabella"? Io non voglio continuare voci incomplete, voglio che rimossi. È possibile?

MODIFICARE

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

3
Cosa stai cercando di realizzare qui? O più chiaramente, quale problema stai cercando di risolvere?
EEAA

Sei a corto di voci della tabella arp? Forse c'è un programma che richiede quell'IP, rinnovando così quella voce. Verificare con wiresharko tcpdump.
ott--

5
@MichaelMartinez perché problema xy . Sembra probabile che la domanda non sia il problema alla radice e potrebbe esserci qualche problema di fondo su cui invece dovrebbe lavorare l'OP.
Zoredache,

1
Il motivo per cui questa informazione non è nella domanda è perché non è pertinente. Voglio una cache ARP pulita. Punto. Non ti fidi di me che lo voglio, ma questo è il tuo problema, non il mio. Ti assicuro: voglio una cache ARP pulita.
dangonfast,

2
C'è una spiegazione profonda del meccanismo di cache ARP qui: stackoverflow.com/a/15511117/647991
dangonfast

Risposte:


12
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 poter riattivare ARP.


2
Uno deve fare in uno script di shell o sulla macchina, in quanto sembra interrompere la connettività dopo il primo comando.
Louis,

L'ho fatto su una linea, e ha funzionato: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Il sleeppotrebbe non essere necessario.
gennaio

5

La tua 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 si trova in una sorta di stato transitorio in procinto di essere eliminato.


Per me (Ubuntu 14.04) non è stato così: le voci sono conservate per molto tempo (per sempre?) Nello stato incompleto. Ricontrollerò di nuovo questo oggi.
dangonfast,

Verificato: anche dopo alcuni minuti, le voci sono ancora lì, nello stato incompleto (arp 1,88, net-tools 1,60)
dangonfast

Bene, allora il tuo problema è sicuramente un comportamento non standard, forse particolare per Ubuntu 14.04. Il modo corretto di farlo in Linux non funziona proprio per te. Spero che troverai presto la tua risposta. Puoi eliminarlo se lo desideri.
Armani,

1
No, lascialo, fornisce informazioni per gli altri. Ma suppongo che il comportamento più "standard" si trovi in ​​Ubuntu, non in Kali, che è una distro per i test di penetrazione e ha valori predefiniti ottimizzati appositamente per quel caso d'uso.
dangonfast,

1

In alcuni sistemi, il ipcomando non è disponibile.

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

Quindi questa è l'alternativa al ip link set arp off dev eth0; ip link set arp on dev eth0comando.

Se si desidera eliminare tutte le voci dalla tabella in un singolo comando, utilizzare for loopcome nell'esempio 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 DELL'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 DALL'INGRESSO CON MESSAGGIO INCOMPLETO

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

Questo è vero, eliminando arp con arp -dcomando, le voci arp sono ancora lì con il incompletemessaggio.

Per risolvere questo problema, utilizzare in ifconfig ethx up/downquesto modo

PRIMA

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

DISATTIVARE E ABILITARE LE INTERFACCE ETH1 E ETH2 IN 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 RISOLTO :)

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

0

La soluzione citata è l'approccio corretto e sicuro per svuotare la tabella ARP:

ip neigh flush all [dev <device>]

Se alcune voci vengono modificate in non valide, è temporaneo e fa parte del protocollo ARP. L'aspetto importante è che la mappatura è sparita, una voce ARP contrassegnata come incompleta non è una voce IP-MAC sulla tabella.

Ho appena provato questo e nel mio caso ha cancellato immediatamente la tabella e non ha lasciato voci incomplete.


In alcuni casi (poco chiari), ip neigh flush non è sufficiente. Nel mio caso non ha cancellato le voci aggiunte con arp -s.
MappaM,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.