LinuxでARPキャッシュをクリアするにはどうすればよいですか?


13

どちらも:

sudo ip -s -s neigh flush all

そして:

sudo arp -d 192.168.0.102

arpキャッシュをクリアする代わりに、単にエントリを無効にしているように見えます(それらはとして表示されますincomplete)。数分後でも、ARPキャッシュは次のようになります。

$ 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

(ゲートウェイのMACが更新されました-それは大丈夫です)

「テーブルからすべてのエントリを削除する」のように、どうすればARPキャッシュを本当にクリアできますか?私はしていない、私はそれらを削除したい、不完全なエントリを維持したいです。これは可能ですか?

編集

これは私のシステムです:

» 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
ここで何を達成しようとしていますか?または、より明確に、どのような問題を解決しようとしていますか?
EEAA

arpテーブルエントリが不足していますか?たぶん、そのIPを要求するプログラムがあるので、そのエントリを更新します。wiresharkまたはで確認しtcpdumpます。
-ott--

5
@MichaelMartinezなぜならxy問題。質問は根本的な問題ではなく、OPが代わりに取り組むべき根本的な問題があるかもしれません。
ゾレダチェ

1
この情報が問題にならないのは、関連性がないためです。きれいなARPキャッシュが必要です。完全停止。あなたは私がそれを望んでいるとは信じませんが、それはあなたの問題であり、私の問題ではありません。保証します。きれいなARPキャッシュが必要です。
ダンゴンファスト

2
ここにARPキャッシュメカニズムの詳細な説明があります:stackoverflow.com/a/15511117/647991
dangonfast

回答:


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

ARPをオンに戻す前に、ネットワーク接続を切断しないように、一度にすべてを実行してください。


2
最初のコマンドの後、接続が切断されるように見えるため、シェルスクリプトまたはマシンで行う必要があります。
ルイ

私はそれを1行で行いましたが、うまくいきましたdev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $devsleep必要ではないかもしれません。
mivk

5

最初の解決策は機能します。「(不完全)」からエントリなしに移行するのに少し時間がかかります(カリでのテストでは5〜10秒)。

おそらく、削除される途中の何らかの遷移状態にあると思われます。


私(Ubuntu 14.04)にとってはそうではありませんでした。エントリは不完全な状態で長期間(永久に)保持されます。今日もこれを再確認します。
ダンゴンファスト

確認済み:数分後でも、エントリは不完全な状態(arp 1.88、net-tools 1.60)で
残っています-dangonfast

さて、あなたの問題は確かに非標準的な振る舞いであり、Ubuntu 14.04に特有のものでしょう。Linuxでそれを行う正しい方法は、単にあなたのために機能しないことです。あなたの答えがすぐに見つかることを願っています。必要に応じてこれを削除できます。
アルマーニ

1
いいえ、そのままにして、他の人に情報を提供します。しかし、より「標準的な」動作は、侵入テストのディストリビューションであり、そのユースケースに合わせて調整されたデフォルト値を持つKaliではなく、Ubuntuで見られると思います。
ダンゴンファスト

1

特定のシステムでは、ipコマンドは使用できません。

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

したがって、これはip link set arp off dev eth0; ip link set arp on dev eth0コマンドの代替です。

単一のコマンドでテーブルからすべてのエントリを削除する場合はfor loop、次の例のように使用します。

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 -Dコマンドを使用したARPの削除

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

その後:不完全なメッセージのエントリから削除されたMACアドレス

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

arp -dコマンドを使用してarp を削除しても、arpエントリはincompleteメッセージとともに残っています。

この問題を解決するには、次を使用します ifconfig ethx up/downよう

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

単一コマンドでインターフェースETH1およびETH2を無効および有効にする

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

TADAAA ...問題が解決しました:)

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

0

上記の解決策は、ARPテーブルをフラッシュするための正しい安全なアプローチです。

ip neigh flush all [dev <device>]

特定のエントリが無効に変更された場合、それは一時的なものであり、ARPプロトコルの一部です。重要な側面は、マッピングがなくなっていることです。不完全としてフラグが付けられたARPエントリは、テーブル上のIP-MACエントリではありません。

私はこれを試しましたが、私の場合はすぐにテーブルをクリアし、不完全なエントリを残しませんでした。


一部の(不明な)場合、ip neigh flush allでは不十分です。私の場合、arp -sで追加されたエントリは消去されませんでした。
MappaM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.