両方:
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
コメント
回答
元のワンライナー
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 $dev
。sleep
は必要ない場合があります。
回答
最初の解決策は機能します。「(不完全)」からエントリがない状態になるまでに少し時間がかかります(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:~$
wireshark
またはtcpdump
で確認してください。