둘 다:
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
노트:세미콜론을 사용하면 이 명령을 한 줄로 압축할 수 있지만 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:~$