web-dev-qa-db-ja.com

arp --deleteはエントリを削除しません。エントリを「不完全」としてマークするだけです

$ 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

--delete10.10.7.30。予期せず、エントリが残り、<incomplete>

buntu 10.04を使用します。

10

エントリは削除されます。しばらくお待ちください。

(可能な限り短い答えが必要な場合:不完全==削除)

「削除」がアクションの間違った単語であるとしましょう。ここで実際に起こっていることは、エントリが手動で状態に設定されていることです"要求が送信されました、応答がありません"(したがって、 "不完全な" ARPプロセス)。

さて、その間に新しい有効なARP応答を受信しない限り、エントリはすぐに完全に削除されます。その場合、不完全とマークされる代わりに削除されても、エントリはとにかく再追加されます。したがって、この動作に対する実際の賛否はありません。

ただし、ここではキャッシュについて説明していることに注意してください。キャッシュからの削除は困難でコストがかかります。エントリを無効にし、置き換えられるまで待ってから最終的に削除する方が効率的です。しかし、システムの場合、エントリがリストから削除されたか、単に不完全とマークされても、まったく違いはありません。

10
Karma Fusebox

他のすべての回答を補足するために、 私はこのリンクが非常に便利であることがわかりました

次のコマンドのように、ipを使用する方が適切な場合があります。

# ip -s -s neigh flush all

結果はLinuxカーネルによって異なる場合があります。

7
Saulo Gomes

他の細かい答えとは別に、arpキャッシュを削除することで完全に消去することが可能であることは言及する価値があります。それほど痛くない方法の1つは、次のとおりです。

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

これにより、どのような状態であっても、すべてのエントリが削除されます。

別の方法には、インターフェースのダウンとアップ、およびarpキャッシュを完全に削除して再作成する同様の方法が含まれます。

3
grin

これは明白に聞こえるかもしれませんが、シェルでの作業に慣れていない人のために、これは私の提案です:

@KarmaFuseboxの回答から始めて、なぜsimply結果をgrepしませんか? :

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

既存/アクティブなキャッシュエントリのみが表示されます。
POSIX準拠コマンドであり続けると思います。そして、必要な場合はscriptableメソッドです。