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

両方:

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 

コメント

  • ここで何を達成しようとしていますか?または、より明確に、どのような問題を解決しようとしていますか?
  • arpテーブルエントリが不足していますか?たぶん'そのIPを要求するプログラムがあり、そのエントリを更新します。 wiresharkまたはtcpdumpで確認してください。
  • @MichaelMartinez xy問題。質問は'根本的な問題ではない可能性があり、代わりにOPが取り組む必要のある根本的な問題がある可能性があります。
  • この情報の理由問題ではないのは、関係がないからです。クリーンなARPキャッシュが必要です。終止符。あなたは私がそれを望んでいると私を信じていませんが、それはあなたの問題であり、私の問題ではありません。確かに:クリーンなARPキャッシュが必要です。
  • ARPキャッシュメカニズムの詳細な説明は次のとおりです: stackoverflow.com/a/ 15511117/647991

回答

元のワンライナー

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

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

インターフェイス検出コピーアンドペーストコマンド

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 

注:セミコロンを使用すると、このコマンドを1つのライナーに凝縮できますが、SOのコードブロックではひどいように見えます。

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 

コメント

  • どちらか一方が必要です最初のコマンドの後で接続が切断されるように見えるため、シェルスクリプトまたはマシンで実行します。
  • 1行で実行しましたが、機能しました:dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $devsleepは必要ない場合があります。

回答

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

おそらく、次のような遷移状態にあります。削除されるまでの道のり。

コメント

  • 私(Ubuntu 14.04)の場合、そうではありませんでした。エントリは長期間保持されます(永遠に?)不完全な状態で。今日もこれを再確認します。
  • 確認済み:数分後でも、エントリは不完全な状態で残っています(arp 1.88、net-tools 1.60)
  • まああなたの問題は確かに非標準的な振る舞いであり、おそらくUbuntu14.04に特有のものです。 Linuxでそれを行う正しい方法はあなたのために働いていないだけです。あなたがすぐにあなたの答えを見つけることを願っています。 '必要に応じてこれを削除できます。
  • いいえ、そのままにしておきます。他の人に情報を提供します。しかし、より多くの"標準"の動作は、侵入テストのディストリビューションであるKaliではなくUbuntuで見られると思います。

回答

言及された解決策は正しく安全ですARPテーブルをフラッシュする方法:

ip neigh flush all [dev <device>]

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

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

コメント

  • 場合によっては、ip neigh flushallでは不十分です。私の場合、arp-sで追加されたエントリはクリアされませんでした。
  • 目的の動作に応じて、静的ARPエントリに関する警告が追加されていますが、上記の自分の回答よりもこれを優先します。

回答

特定のシステムでは、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コマンドの代替手段です。

必要に応じて1つのコマンドでテーブルからすべてのエントリを削除し、次の例のようにfor loopを使用します。

BEFORE

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を使用します

BEFORE

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です