Begge:
sudo ip -s -s neigh flush all
Og:
sudo arp -d 192.168.0.102
I stedet for å tømme arp-cachen ser det ut til at de bare ugyldiggjør oppføringene (de vil vises som incomplete
). Selv etter noen minutter ser ARP-cachen ut som:
$ 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 av gatewayen er oppdatert – det er ok)
Hvordan kan jeg virkelig tømme ARP-hurtigbufferen, som i «slette alle oppføringene fra tabellen»? Jeg vil ikke beholde ufullstendige oppføringer, jeg vil at de skal fjernes. Er dette mulig?
EDIT
Dette er systemet mitt:
» 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
Kommentarer
Svar
Original oneliner
ip link set arp off dev eth0 ; ip link set arp on dev eth0
Sørg for å gjøre alt på en gang, slik at du ikke bryter nettverkstilkoblingen før du» kan slå ARP på igjen.
Grensesnitt som oppdager kommandoen kopier og lim inn
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
Merk: Semikolonene lar deg kondensere denne kommandoen til en oneliner, men det ser forferdelig ut i en kodeblokk på SO .
Eksempel på 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
Kommentarer
- Man må enten gjør i et skallskript eller på maskinen, da det ser ut til å bryte tilkoblingen etter den første kommandoen.
- Jeg gjorde det på en linje, og det fungerte:
dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev
.sleep
er kanskje ikke nødvendig.
Svar
Din første løsningen fungerer, tar det bare litt tid (5-10 sekunder i testen min på Kali) å gå fra «(ufullstendig)» til ingen oppføringer.
Antagelig er den i en slags overgangstilstand på veien til å bli slettet.
Kommentarer
- For meg (Ubuntu 14.04) var dette ikke tilfelle: oppføringene holdes lenge ( for alltid?) i ufullstendig tilstand. Jeg vil sjekke dette igjen i dag.
- Bekreftet: selv etter noen minutter er oppføringene fortsatt der, i ufullstendig tilstand (arp 1.88, nettverktøy 1.60)
- Vel så er problemet ditt absolutt ikke-standard oppførsel, kanskje spesielt for Ubuntu 14.04. Den riktige måten å gjøre det på Linux fungerer bare ikke for deg. Håper du finner svaret ditt snart. Kan slette denne hvis du ‘ liker.
- Nei, la den være, den gir informasjon til andre. Men jeg antar at jo mer » standard » oppførsel er å finne i Ubuntu, ikke i Kali, som er en distro for penetrasjonstesting og har standardverdier som er spesielt justert for den aktuelle saken.
Svar
Den nevnte løsningen er den riktige og trygge tilnærming for å skylle ARP-tabellen:
ip neigh flush all [dev <device>]
Hvis visse oppføringer endres til ugyldige, er det midlertidig og en del av ARP protokollen. Det viktige aspektet er at kartleggingen er borte, en ARP-oppføring som er merket som ufullstendig er ikke en IP-MAC-oppføring på bordet.
Jeg har nettopp prøvd dette og i mitt tilfelle ryddet det umiddelbart tabellen og etterlot ingen ufullstendige oppføringer.
Kommentarer
- I noen (uklare) tilfeller er ip neigh flush all ikke tilstrekkelig. I mitt tilfelle fjernet det ikke oppføringer lagt til med arp -s.
- Jeg foretrekker dette mye fremfor mitt eget svar ovenfor, med den ekstra advarselen angående statiske ARP-oppføringer, avhengig av ønsket oppførsel.
Svar
I visse systemer er ip
-kommandoen ikke tilgjengelig.
user@linux:~$ ip -bash: ip: command not found user@linux:~$
Så dette er alternativet for ip link set arp off dev eth0; ip link set arp on dev eth0
-kommandoen.
Hvis du vil slett alle oppføringene fra tabellen i en enkelt kommando, bruk for loop
som følgende eksempel.
FØR
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:~$
FJERNER ARP MED ARP -D KOMMANDO
user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done user@linux:~$
ETTER: MAC-ADRESSE FJERNET FRA INNGANGENE MED KOMPLETT MELDING
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
Det er sant, ved å slette arp med arp -d
-kommandoen, er arp-oppføringene fremdeles der med incomplete
-melding.
For å løse dette problemet, bruk ifconfig ethx up/down
slik
FØR
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
UTKOBLET & AKTIVERE GRENSESNITTENE ETH1 & ETH2 I EN ENKELT KOMMANDO
user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done user@linux:~$
TADAAA … PROBLEM LØST:)
user@linux:~$ arp user@linux:~$
wireshark
ellertcpdump
.