arp --delete löscht keinen Eintrag; markiert den Eintrag lediglich als "unvollständig"


10
$ sudo arp -avn
? (10.10.7.30) at 00:cc:cc:bb:dd:86 [ether] on eth0
...

$ sudo arp --delete 10.10.7.30

$ sudo arp -avn
? (10.10.7.30) at <incomplete> [ether] on eth0

Nachdem --deleteich keinen Eintrag für erwartet hatte 10.10.7.30. Unerwartet bleibt der Eintrag erhalten und ist markiert <incomplete>.

Verwenden von Ubuntu 10.04 .

Antworten:


10

Der Eintrag wird entfernt, seien Sie einfach geduldig.

(Wenn Sie die kürzestmögliche Antwort wünschen: unvollständig == gelöscht)

Angenommen, "Löschen" ist das falsche Wort für die Aktion. Was hier wirklich passiert, ist, dass der Eintrag manuell auf den Status "Anfrage gesendet, keine Antwort" (also "unvollständiger" ARP-Prozess) gesetzt wird, als ob der Computer wirklich nicht erreichbar wäre.

Jetzt wird der Eintrag bald vollständig entfernt, es sei denn, er erhält in der Zwischenzeit eine neue gültige ARP-Antwort. In diesem Fall würde der Eintrag trotzdem wieder hinzugefügt, selbst wenn er entfernt wurde, anstatt als unvollständig markiert zu werden. Es gibt also keine wirklichen Vor- oder Nachteile für dieses Verhalten.

Aber denken Sie daran, dass es sich um einen Cache handelt. Das Löschen von Dingen aus Caches ist schwierig und teuer. Es ist viel effizienter, einen Eintrag ungültig zu machen und zu warten, bis er ersetzt wird, bevor er endgültig entfernt wird. Für das System ist es jedoch völlig egal, ob der Eintrag von der Liste gestrichen oder nur als unvollständig markiert wurde.


Und es gibt keine Möglichkeit, es wirklich zu löschen, sodass eine nachfolgende Notwendigkeit, das Ziel zu kennen, eine "neue" ARP-Abfrage auslösen würde?
Skaperen

1
Aber genau das ist hier der Fall. Wenn ein Eintrag mit der Aufschrift "unvollständig" nachgeschlagen wird, wird eine neue ARP-Anfrage gesendet. Wenn es beantwortet wird, wird der Eintrag aktualisiert und ist nicht mehr "unvollständig". Wenn keine Antwort zurückgegeben wird, wird der Eintrag nach einiger Zeit aus der Liste entfernt. (Deshalb halte ich es für ziemlich nutzlos, einen Eintrag manuell zu "löschen". Wenn die Maschine lebt, wird der Eintrag aktualisiert. Wenn er wirklich weg ist, warum den Eintrag dann trotzdem manuell "löschen"?)
Karma Sicherungskasten

... Ich denke, dass Sie die ARP-Adresse für eine IP-Adresse "ändern" möchten. In diesem speziellen Fall können Sie manuell "--delete" und die nächste ARP-Anforderung die neue Adresse zurückgeben lassen. In diesem Szenario spielt es jedoch keine Rolle, ob der Eintrag sichtbar aus der Liste entfernt oder als "unvollständig" markiert wird. Für die beteiligten Techniker ist es dasselbe.
Karma Fusebox

@KarmaFusebox wissen Sie, wo dieser Cache existiert? Ist es im Prozessspeicher? Wenn ja, welcher Prozess? oder wird es vom Kernel gepflegt? In einer Datei auf der Festplatte? anderswo?
JamesThomasMoon1979

@ KarmaFusebox Das Löschen eines Eintrags ist sinnvoll, wenn die Einträge auch manuell hinzugefügt wurden (und daher das permanente Flag gesetzt ist)
cha5on

7

Um alle anderen Antworten zu ergänzen, fand ich diesen Link sehr nützlich .

In einigen Fällen ist die Verwendung ipgeeigneter, wie der Befehl:

# ip -s -s neigh flush all

Die Ergebnisse können von Ihrem Linux-Kernel abhängen.


Das hat bei mir perfekt funktioniert. Jeder, der Probleme mit anderen Antworten hat, sollte es versuchen.
Jackgu1988

3

Neben den anderen guten Antworten ist zu erwähnen, dass es möglich ist, den Arp-Cache durch Entfernen vollständig zu löschen. Eine der weniger schmerzhaften Möglichkeiten ist:

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

Dies sollte alle Einträge entfernen, egal in welchem ​​Zustand.

Alternative Methoden umfassen das Herunterfahren und Erhöhen der Benutzeroberfläche und ähnliche Methoden, um den Arp-Cache vollständig zu entfernen und neu zu erstellen.


1
Dies ist die richtige Antwort. Ich brauchte genau das. Nicht nur einen Eintrag als "unvollständig" oder "seit einiger Zeit nicht mehr erreicht" markieren. Vielen Dank.
John Hamilton

0

Ich weiß, dass dies offensichtlich klingen könnte, aber für diejenigen, die nicht mit der Shell arbeiten, ist dies mein Vorschlag:

Ausgehend von der Antwort von @KarmaFusebox, warum nicht einfach die Ergebnisse erfassen ...? ::

arp -a | grep "incomplet" -i -v

Es werden nur die vorhandenen / aktiven Cache-Einträge angezeigt.
Ich denke, es ist weiterhin ein POSIX-kompatibler Befehl. Und es ist eine skriptfähige Methode, wenn Sie diese benötigen.


Ich suche nach einer vernünftigen Erklärung, warum ich mich so arpverhalte. Es scheint eigenartig. Könnte tangential arpgezwungen werden, die <incomplete>Einträge zu entfernen ?
JamesThomasMoon1979

Nun, @ JamesThomasMoon1979, ich würde eher sagen, dass auf Systemen, die sich nicht so zu verhalten scheinen (dh: Windows-Konsole), dies wirklich der Fall ist. Der einzige Unterschied besteht darin, dass keine incompleteEinträge im Befehl arp cache list angezeigt werden.
Sopalajo de Arrierez
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.