오리지널 원라이너

오리지널 원라이너

둘 다:

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

관련 정보