Linux에서 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 

댓글

  • 여기서 무엇을 성취하려고합니까? 또는 더 명확하게, 어떤 문제를 해결하려고합니까?
  • ARP 테이블 항목이 부족합니까? 해당 IP를 요청하는 프로그램이 '있을 수 있으므로 해당 항목을 갱신합니다. wireshark 또는 tcpdump로 확인하세요.
  • @MichaelMartinez (왜냐하면 ) xy 문제 . 질문은 ' 근본 문제가 아닌 것으로 보이며 대신 OP가 작업해야하는 근본적인 문제가있을 수 있습니다.
  • 이 정보가 표시되는 이유 관련이 없기 때문입니다. 깨끗한 ARP 캐시를 원합니다. 마침표. 당신은 내가 그것을 원한다고 믿지 않지만 그것은 당신의 문제입니다. 확신합니다 : 깨끗한 ARP 캐시를 원합니다.
  • 여기에 ARP 캐시 메커니즘에 대한 자세한 설명이 있습니다. stackoverflow.com/a/ 15511117/647991

답변

원래 oneliner

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 

댓글

  • 하나는 첫 번째 명령 후 연결이 끊어진 것처럼 보이기 때문에 셸 스크립트 또는 컴퓨터에서 수행합니다.
  • 한 줄로 수행했고 작동했습니다. 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)
  • 음 그렇다면 귀하의 문제는 확실히 비표준 동작이며, 아마도 Ubuntu 14.04에만 해당됩니다. Linux에서 올바른 방법은 작동하지 않습니다. 곧 답변을 찾길 바랍니다. 원하는 경우이 항목을 삭제할 수 있습니다. '
  • 아니요, 그대로 두세요. 다른 사용자에게 정보를 제공합니다. 하지만 더 많은 " 표준 " 동작은 침투 테스트 배포판 인 Kali가 아닌 Ubuntu에서 찾을 수 있습니다. 해당 사용 사례에 맞게 특별히 조정 된 기본값이 있습니다.

답변

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

ip neigh flush all [dev <device>]

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

나는 방금 이것을 시도했고 제 경우에는 즉시 삭제했습니다. 불완전한 항목을 남기지 않았습니다.

코멘트

  • 일부 (불분명 한) 경우에 ip neigh flush all이 충분하지 않습니다. 제 경우에는 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 명령의 대안입니다.

원하는 경우 단일 명령으로 테이블에서 모든 항목을 삭제하려면 다음 예와 같이 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 사용

BEFORE

user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$ 

사용 안함 & 단일 명령으로 ETH1 인터페이스 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:~$ 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다