Jak wyczyścić pamięć podręczną ARP w systemie Linux?

13

Obie:

sudo ip -s -s neigh flush all

I:

sudo arp -d 192.168.0.102

Zamiast wyczyścić pamięć podręczną arp wydają się one po prostu 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

(MAC bramy został odświeżony - to dobrze)

Jak mogę naprawdę wyczyścić pamięć podręczną ARP, np. „Usuń wszystkie wpisy z tabeli”? I nie chcą zachować niekompletne dane, chcę je usunąć. czy to możliwe?

EDYTOWAĆ

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
Dangonfast
źródło
3
Co próbujesz tutaj osiągnąć? Lub, bardziej precyzyjnie, jaki problem próbujesz rozwiązać?
EEAA
Czy brakuje Ci wpisów w tabeli arp? Może jest jakiś program, który prosi o ten adres IP, odnawiając ten wpis. Sprawdź za pomocą wiresharklub tcpdump.
ott--
5
@MichaelMartinez, ponieważ problem xy . Wydaje się prawdopodobne, że pytanie nie jest głównym problemem i może istnieć jakiś podstawowy problem, nad którym zamiast tego powinien działać PO.
Zoredache,
1
Powodem, dla którego informacje te nie są zawarte w pytaniu, jest to, że nie są one istotne. Chcę czystej pamięci podręcznej ARP. Kropka. Nie ufasz mi, że tego chcę, ale to twój problem, nie mój. Zapewniam cię: chcę czystą pamięć podręczną ARP.
dangonfast
2
Dokładne

Odpowiedzi:

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

Zrób to wszystko naraz, aby nie przerywać łączności sieciowej, zanim nie będziesz mógł ponownie włączyć ARP.

nyet
źródło
2
Trzeba to zrobić albo w skrypcie powłoki, albo na komputerze, ponieważ wydaje się, że po pierwszym poleceniu zrywa połączenie.
Louis,
Zrobiłem to w jednej linii, i to działało: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. sleepMoże nie być konieczne.
mivk
5

Twoje pierwsze rozwiązanie działa, zajmuje tylko trochę czasu (5-10 sekund w moim teście na Kali), aby przejść z „(niekompletne)” do braku wpisów.

Przypuszczalnie jest w stanie przejściowym na drodze do usunięcia.

Armani
źródło
Dla mnie (Ubuntu 14.04) tak nie było: wpisy są przechowywane przez długi czas (na zawsze?) W stanie niepełnym. Jeszcze raz to sprawdzę.
dangonfast
Zweryfikowano: nawet po kilku minutach wpisy są nadal w stanie niepełnym (arp 1.88, net-tools 1.60)
Dangonfast
Cóż, więc twój problem jest z pewnością niestandardowym zachowaniem, być może szczególnie dotyczy Ubuntu 14.04. Właściwy sposób na zrobienie tego w Linuksie po prostu nie działa. Mam nadzieję, że wkrótce znajdziesz swoją odpowiedź. Możesz go usunąć, jeśli chcesz.
armani
1
Nie, zostaw to, daje informacje innym. Ale wydaje mi się, że bardziej „standardowe” zachowanie można znaleźć w Ubuntu, a nie w Kali, która jest dystrybucją testowania penetracji i ma domyślne wartości specjalnie dostosowane dla tego przypadku użycia.
Dangonfast
1

W niektórych systemach ippolecenie jest niedostępne.

user@linux:~$ ip
-bash: ip: command not found
user@linux:~$

To jest alternatywa dla ip link set arp off dev eth0; ip link set arp on dev eth0polecenia.

Jeśli chcesz usunąć wszystkie wpisy z tabeli za pomocą jednego polecenia, skorzystaj for loopz następującego przykładu.

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Ą 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 WEJŚĆ 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ą arp -dpolecenia, wpisy arp nadal są wyświetlane z incompletekomunikatem.

Aby rozwiązać ten problem, użyj ifconfig ethx up/downtego 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 i WŁĄCZ INTERFEJSY ETH1 i 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:~$ 
Charlotte Russell
źródło
0

Wspomniane rozwiązanie to prawidłowe i bezpieczne podejście do spłukiwania tabeli ARP:

ip neigh flush all [dev <device>]

Jeśli niektóre wpisy zostaną zmienione na nieprawidłowe, będzie to tymczasowe i będzie częścią protokołu 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 próbowałem tego i w moim przypadku natychmiast wyczyściło tabelę i nie pozostawiło niekompletnych wpisów.

Pedro
źródło
W niektórych (niejasnych) przypadkach ip neigh flush wszystko nie jest wystarczające. W moim przypadku nie wyczyściło wpisów dodanych przez arp -s.
MappaM