Oba:
sudo ip -s -s neigh flush all
Oraz:
sudo arp -d 192.168.0.102
Zamiast czyścić pamięć podręczną arp, wydają się tylko unieważniać wpisy (pojawią się jako incomplete
). Nawet po kilku minutach pamięć podręczna ARP wygląda następująco:
$ 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
(Adres MAC bramy został odświeżony – to jest ok)
Jak mogę naprawdę wyczyścić pamięć podręczną ARP, na przykład „usuń wszystkie wpisy z tabeli”? nie chcę zachować niekompletne wpisy, chcę je usunąć. Czy to możliwe?
EDYTUJ
To jest mój system:
» 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
Komentarze
Odpowiedź
Oryginalny oneliner
ip link set arp off dev eth0 ; ip link set arp on dev eth0
Pamiętaj, aby zrobić to wszystko na raz, aby nie przerywać połączenia sieciowego, zanim nie będziesz w stanie ponownie włączyć ARP.
Interfejs wykrywający polecenie kopiuj-wklej
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
Uwaga: średniki pozwalają skondensować to polecenie w oneliner, ale wygląda okropnie w bloku kodu na SO .
Przykładowe wyjście dla 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
Komentarze
- Należy albo zrobić w skrypcie powłoki lub na komputerze, ponieważ wydaje się, że przerywa połączenie po pierwszym poleceniu.
- Zrobiłem to w jednej linii i zadziałało:
dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev
.sleep
może nie być konieczne.
Odpowiedź
Twój pierwsze rozwiązanie działa, po prostu zajmuje trochę czasu (5-10 sekund w moim teście na Kali), aby przejść od „(niekompletne)” do braku wpisów.
Przypuszczalnie jest w jakimś stanie przejściowym sposób na usunięcie.
Komentarze
- W moim przypadku (Ubuntu 14.04) tak nie było: wpisy są przechowywane przez długi czas ( na zawsze?) w stanie niekompletnym. Dzisiaj jeszcze raz to sprawdzę.
- Zweryfikowano: nawet po kilku minutach wpisy wciąż tam są, w stanie niekompletnym (arp 1.88, net-tools 1.60).
- Cóż Twoim problemem jest z pewnością niestandardowe zachowanie, być może szczególnie w Ubuntu 14.04. Właściwy sposób na zrobienie tego w Linuksie po prostu nie działa. Mam nadzieję, że wkrótce znajdziesz odpowiedź. Możesz usunąć ten, jeśli ' lubisz.
- Nie, zostaw to, zawiera informacje dla innych. Ale wydaje mi się, że bardziej ” standardowe ” zachowanie można znaleźć w Ubuntu, a nie w Kali, który jest dystrybucją do testów penetracyjnych i ma wartości domyślne specjalnie dostosowane dla tego przypadku użycia.
Odpowiedź
Wspomniane rozwiązanie jest poprawne i bezpieczne podejście do opróżnienia tablicy ARP:
ip neigh flush all [dev <device>]
Jeśli pewne wpisy zostaną zmienione na nieprawidłowe, jest to tymczasowe i jest częścią ARP Ważnym aspektem jest to, że mapowanie zniknęło, wpis ARP oznaczony jako niekompletny nie jest wpisem IP-MAC w tabeli.
Właśnie to wypróbowałem iw moim przypadku natychmiast wyczyściło table i nie pozostawiły niekompletnych wpisów.
Komentarze
- W niektórych (niejasnych) przypadkach, ip neigh flush all nie wystarczy. W moim przypadku nie wyczyściło wpisów dodanych za pomocą arp -s.
- O wiele bardziej wolę to od mojej własnej odpowiedzi powyżej, z dodatkowym zastrzeżeniem dotyczącym statycznych wpisów ARP, w zależności od pożądanego zachowania.
Odpowiedź
W niektórych systemach polecenie ip
jest niedostępne.
user@linux:~$ ip -bash: ip: command not found user@linux:~$
Jest to więc alternatywa dla polecenia ip link set arp off dev eth0; ip link set arp on dev eth0
.
Jeśli chcesz usuń wszystkie wpisy z tabeli za pomocą jednego polecenia, użyj for loop
jak w poniższym przykładzie.
PRZED
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:~$
USUWANIE ARP ZA POMOCĄ POLECENIA ARP -D
user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done user@linux:~$
PO: ADRES MAC USUNIĘTY Z WPISÓW Z NIEKOMPLETNYM KOMUNIKATEM
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
To prawda, usuwając arp za pomocą polecenia arp -d
, wpisy arp są nadal tam z komunikatem incomplete
.
Aby rozwiązać ten problem, użyj ifconfig ethx up/down
w ten sposób
PRZED
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
WYŁĄCZ & WŁĄCZ INTERFEJSY ETH1 & ETH2 W JEDNYM POLECENIU
user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done user@linux:~$
TADAAA … PROBLEM ROZWIĄZANY:)
user@linux:~$ arp user@linux:~$
wireshark
lubtcpdump
.