オリジナルワンライナー

オリジナルワンライナー

両方:

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

答え1

オリジナルワンライナー

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

答え2

最初のソリューションは機能し、「(不完全)」からアイテムなしに移動するのにしばらく(Kaliを使用したテストで5〜10秒)かかります。

おそらく削除されるための一種のトランジェント状態にあるようです。

答え3

上記の解決策は、ARPテーブルを更新する正確で安全な方法です。

ip neigh flush all [dev <device>]

一部のエントリが無効に変更された場合、これは一時的であり、ARPプロトコルの一部です。重要なことは、マッピングが消えて不完全であるとマークされたARPエントリがテーブルのIP-MACエントリではないということです。

私はこれを試しましたが、私の場合、フォームはすぐに消去され、不完全な項目は残りませんでした。

答え4

一部のシステムでは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:~$ 

チャジャン...問題が解決しました:)

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

関連情報