리눅스에서 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


답변

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

한 번에 모두 수행해야 ARP를 다시 켜기 전에 네트워크 연결을 끊을 수 있습니다.


답변

첫 번째 솔루션이 작동하면 “(불완전한)”에서 항목이없는 데까지 약간의 시간 (Kali 테스트에서 5-10 초)이 걸립니다.

아마도 삭제되는 도중에 일종의 과도기 상태에있을 것입니다.


답변

특정 시스템에서는 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 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:~$

TADAAA … 문제 해결 🙂

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

답변

언급 한 솔루션은 ARP 테이블을 플러시하는 정확하고 안전한 방법입니다.

ip neigh flush all [dev <device>]

특정 항목이 유효하지 않은 항목으로 변경되면 일시적이며 ARP 프로토콜의 일부입니다. 중요한 점은 매핑이 사라졌고, 불완전한 것으로 표시된 ARP 항목이 테이블의 IP-MAC 항목이 아니라는 것입니다.

방금 이것을 시도했으며 내 경우에는 즉시 테이블을 지우고 불완전한 항목을 남기지 않았습니다.