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

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 werden als incomplete angezeigt). Selbst nach einigen Minuten sieht der ARP-Cache folgendermaßen 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 löschen, wie unter „Alle Einträge aus der Tabelle löschen“? Ich möchte nicht unvollständige Einträge behalten, ich möchte, dass sie entfernt werden. Ist das möglich?

BEARBEITEN

Dies 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 

Kommentare

  • Was versuchst du hier zu erreichen? Oder klarer, welches Problem versuchen Sie zu lösen?
  • Fehlen Ihnen die Arp-Tabelleneinträge? Möglicherweise gibt es ‚ ein Programm, das nach dieser IP fragt und somit diesen Eintrag erneuert. Überprüfen Sie dies mit wireshark oder tcpdump.
  • @MichaelMartinez, weil xy Problem . Es ist wahrscheinlich, dass die Frage nicht ‚ das Grundproblem ist und es möglicherweise ein zugrunde liegendes Problem gibt, an dem das OP stattdessen arbeiten sollte.
  • Der Grund, warum diese Informationen ist nicht in der Frage ist, weil es nicht relevant ist. 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.
  • Hier finden Sie eine ausführliche Erklärung des ARP-Cache-Mechanismus: stackoverflow.com/a/ 15511117/647991

Antwort

Ursprünglicher Oneliner

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

Stellen Sie sicher, dass Sie alles auf einmal ausführen, damit Sie die Netzwerkverbindung nicht unterbrechen, bevor Sie ARP wieder einschalten können.

Schnittstelle zum Erkennen des Befehls zum Kopieren und Einfügen

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 

Hinweis: Mit den Semikolons können Sie diesen Befehl zu einem Oneliner zusammenfassen, aber in einem Codeblock auf SO sieht er schrecklich aus .

Beispielausgabe auf 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 

Kommentare

  • Man muss auch Tun Sie dies in einem Shell-Skript oder auf dem Computer, da es die Konnektivität nach dem ersten Befehl zu unterbrechen scheint.
  • Ich habe es in einer Zeile ausgeführt und es hat funktioniert: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Die sleep ist möglicherweise nicht erforderlich.

Antwort

Ihre Die erste Lösung funktioniert, es dauert nur ein wenig (5-10 Sekunden in meinem Test auf Kali), um von „(unvollständig)“ zu keinen Einträgen zu gelangen.

Vermutlich befindet sie sich in einem Übergangszustand Der Weg zum Löschen.

Kommentare

  • Für mich (Ubuntu 14.04) war dies nicht der Fall: Die Einträge werden lange aufbewahrt ( für immer?) im unvollständigen Zustand. Ich werde dies heute noch einmal überprüfen.
  • Verifiziert: Auch nach einigen Minuten sind die Einträge im unvollständigen Zustand noch vorhanden (arp 1.88, net-tools 1.60).
  • Nun dann ist Ihr Problem sicherlich nicht standardmäßiges Verhalten, möglicherweise speziell für Ubuntu 14.04. Der richtige Weg, dies unter Linux zu tun, funktioniert bei Ihnen einfach nicht. Ich hoffe, Sie finden Ihre Antwort bald. Kann dieses löschen, wenn Sie ‚ möchten.
  • Nein, lassen Sie es, es gibt Informationen für andere. Aber ich denke, dass das mehr “ Standardverhalten “ in Ubuntu zu finden ist, nicht in Kali, einer Distribution für Penetrationstests und hat Standardwerte, die speziell für diesen Anwendungsfall angepasst wurden.

Antwort

Ihre erwähnte Lösung ist die richtige und sichere Ansatz zum Löschen der ARP-Tabelle:

ip neigh flush all [dev <device>]

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

Ich habe dies gerade versucht und in meinem Fall wurde der sofort gelöscht Tabelle und hinterließ keine unvollständigen Einträge.

Kommentare

  • In einigen (unklaren) Fällen ist IP Nigh Flush All nicht ausreichend. In meinem Fall wurden die mit arp -s hinzugefügten Einträge nicht gelöscht.
  • Ich ziehe dies meiner obigen Antwort sehr vor, mit der zusätzlichen Einschränkung bezüglich statischer ARP-Einträge, abhängig vom gewünschten Verhalten.

Antwort

In bestimmten Systemen ist der Befehl ip nicht verfügbar.

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

Dies ist also die Alternative zum Befehl ip link set arp off dev eth0; ip link set arp on dev eth0.

Wenn Sie möchten Löschen Sie alle Einträge mit einem einzigen Befehl aus der Tabelle. Verwenden Sie for loop wie im folgenden 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 MIT ARP -D-BEFEHL ENTFERNEN

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

NACH: MAC-ADRESSE MIT UNVOLLSTÄNDIGER NACHRICHT AUS 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, wenn Sie arp mit dem Befehl arp -d löschen, sind die arp-Einträge immer noch mit der Nachricht incomplete 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 & AKTIVIEREN DER SCHNITTSTELLEN ETH1 & ETH2 IN EINEM EINZELNEN 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:~$ 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.