둘 다 :
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
댓글
답변
원래 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:~$
wireshark
또는tcpdump
로 확인하세요.