Wie löscht man den Arp-Cache unter Linux?

13

Beide:

sudo ip -s -s neigh flush all

Und:

sudo arp -d 192.168.0.102

Anstatt den Arp-Cache zu leeren, scheinen sie nur Einträge ungültig zu machen (sie erscheinen als incomplete). Selbst nach einigen Minuten sieht der ARP-Cache so aus:

$ 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

(Der MAC des Gateways wurde aktualisiert - das ist in Ordnung)

Wie kann ich den ARP-Cache wirklich leeren, wie in "Alle Einträge aus der Tabelle löschen"? Ich möchte keine unvollständigen Einträge behalten, ich möchte, dass sie entfernt werden. Ist das möglich?

BEARBEITEN

Das ist mein System:

» 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
dangonfast
quelle
3
Was versuchst du hier zu erreichen? Oder genauer gesagt, welches Problem versuchen Sie zu lösen?
EEAA
Fehlen Ihnen die Einträge in der Arp-Tabelle? Vielleicht fragt ein Programm nach dieser IP und erneuert so diesen Eintrag. Überprüfen Sie mit wiresharkoder tcpdump.
ott--
5
@MichaelMartinez weil xy Problem . Es ist wahrscheinlich, dass die Frage nicht das eigentliche Problem ist und dass es ein zugrunde liegendes Problem gibt, an dem das OP stattdessen arbeiten sollte.
Zoredache
1
Der Grund, warum diese Informationen nicht in Frage kommen, ist, dass sie nicht relevant sind. Ich möchte einen sauberen ARP-Cache. Punkt. Du vertraust mir nicht, dass ich das will, aber das ist dein Problem, nicht meins. Ich versichere Ihnen: Ich möchte einen sauberen ARP-Cache.
Dangonfast
2
Eine ausführliche
dangonfast

Antworten:

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

Stellen Sie sicher, dass Sie alles auf einmal erledigen, damit die Netzwerkkonnektivität nicht unterbrochen wird, bevor Sie ARP wieder aktivieren können.

nyet
quelle
2
Dies muss entweder in einem Shell-Skript oder auf dem Computer erfolgen, da die Konnektivität nach dem ersten Befehl offenbar unterbrochen wird.
Louis
Ich habe es auf einer Linie, und es funktionierte: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Das sleepkann nicht notwendig sein.
Mivk
5

Ihre erste Lösung funktioniert, es dauert nur ein wenig (5 bis 10 Sekunden in meinem Kali-Test), bis von "(unvollständig)" keine Einträge mehr vorhanden sind.

Vermutlich befindet es sich auf dem Weg zur Löschung in einem Übergangszustand.

armani
quelle
Bei mir (Ubuntu 14.04) war dies nicht der Fall: Die Einträge werden lange (für immer?) Im unvollständigen Zustand gehalten. Ich werde das heute noch einmal überprüfen.
Dangonfast
Verifiziert: Auch nach einigen Minuten sind die Einträge noch vorhanden, im unvollständigen Zustand (Arp 1.88, Net-Tools 1.60)
Dangonfast
Na dann ist Ihr Problem sicherlich nicht standardmäßiges Verhalten, vielleicht speziell für Ubuntu 14.04. Die richtige Vorgehensweise unter Linux funktioniert bei Ihnen einfach nicht. Ich hoffe, Sie finden bald Ihre Antwort. Kann dieses löschen, wenn Sie möchten.
Armani
1
Nein, lass es, es gibt Informationen für andere. Aber ich denke, dass das "Standard" -Verhalten in Ubuntu zu finden ist, nicht in Kali, einer Distribution für Penetrationstests, deren Standardwerte speziell für diesen Anwendungsfall angepasst wurden.
Dangonfast
1

In bestimmten Systemen ist der ipBefehl nicht verfügbar.

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

Das ist also die Alternative der ip link set arp off dev eth0; ip link set arp on dev eth0 Befehl.

Wenn Sie mit einem einzigen Befehl alle Einträge aus der Tabelle löschen möchten, verwenden Sie for loop das folgende Beispiel.

VOR

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

ARP ENTFERNEN MIT ARP -D BEFEHL

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

NACHHER: MAC-ADRESSE MIT UNVOLLSTÄNDIGER NACHRICHT VON DEN EINTRÄGEN ENTFERNT

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

Das stimmt, indem Sie arp mit arp -dBefehl löschen , sind die arp-Einträge immer noch mit daincomplete message vorhanden.

Um dieses Problem zu lösen, verwenden Sie ifconfig ethx up/down wie folgt

VOR

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

DEAKTIVIEREN UND AKTIVIEREN SIE DIE SCHNITTSTELLEN ETH1 UND ETH2 IN EINEM EINZIGEN BEFEHL

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

TADAAA ... PROBLEM GELÖST :)

user@linux:~$ arp
user@linux:~$ 
Charlotte Russell
quelle
0

Ihre erwähnte Lösung ist der richtige und sichere Weg, um die ARP-Tabelle zu leeren:

ip neigh flush all [dev <device>]

Wenn bestimmte Einträge in ungültig geändert werden, ist dies temporär und Teil des ARP-Protokolls. Der wichtige Aspekt ist, dass die Zuordnung nicht mehr vorhanden ist. Ein als unvollständig gekennzeichneter ARP-Eintrag ist kein IP-MAC-Eintrag in der Tabelle.

Ich habe es gerade versucht und in meinem Fall hat es die Tabelle sofort gelöscht und keine unvollständigen Einträge hinterlassen.

Pedro
quelle
In einigen (unklaren) Fällen reicht ip neigh flush all nicht aus. In meinem Fall wurden mit arp -s hinzugefügte Einträge nicht gelöscht.
MappaM