Båda:
sudo ip -s -s neigh flush all
Och:
sudo arp -d 192.168.0.102
Istället för att rensa arp-cache verkar de bara ogiltiga poster (de kommer att visas som incomplete
). Även efter några minuter ser ARP-cache 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
(Gatewayens MAC har uppdaterats – det är ok)
Hur kan jag verkligen rensa ARP-cache, som i ”ta bort alla poster från tabellen”? Jag vill inte behålla ofullständiga poster, jag vill att de ska tas bort. Är det möjligt?
REDIGERA
Detta är mitt 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
Kommentarer
Svar
Original oneliner
ip link set arp off dev eth0 ; ip link set arp on dev eth0
Var noga med att göra allt på en gång så att du inte bryter nätverksanslutningen innan du kan aktivera ARP igen.
Gränssnitt som upptäcker kommandot copy-paste
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
Obs: Semikolonerna låter dig kondensera detta kommando till en oneliner, men det ser hemskt ut i ett kodblock på SO .
Exempel 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åste antingen gör i ett skalskript eller vid maskinen, eftersom det verkar bryta anslutningen efter det första kommandot.
- Jag gjorde det på en rad och det fungerade:
dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev
.sleep
kanske inte är nödvändigt.
Svar
Din första lösningen fungerar, det tar bara lite tid (5-10 sekunder i mitt test på Kali) att gå från ”(ofullständig)” till inga poster.
Förmodligen är den i någon form av övergångstillstånd på sättet att tas bort.
Kommentarer
- För mig (Ubuntu 14.04) var detta inte fallet: posterna sparas länge ( för alltid?) i ofullständigt tillstånd. Jag kommer att kontrollera det igen idag.
- Verifierat: även efter några minuter finns posterna kvar, i ofullständigt tillstånd (arp 1.88, net-tools 1.60)
- Tja då är ditt problem verkligen icke-standardiserat beteende, kanske särskilt för Ubuntu 14.04. Det rätta sättet att göra det i Linux fungerar bara inte för dig. Hoppas du hittar ditt svar snart. Kan ta bort den här om du ’ gillar.
- Nej, lämna den, den ger information för andra. Men jag antar att det mer ” standard ” beteendet finns i Ubuntu, inte i Kali, vilket är en distro för penetrationstest och har standardvärden specifikt justerade för det användningsfallet.
Svar
Din nämnda lösning är rätt och säker metod för att spola ARP-tabellen:
ip neigh flush all [dev <device>]
Om vissa poster ändras till ogiltiga är det tillfälligt och en del av ARP Den viktiga aspekten är att kartläggningen är borta, en ARP-post som flaggas som ofullständig är inte en IP-MAC-post på bordet.
Jag har just provat detta och i mitt fall rensade det omedelbart tabellen och lämnade inga ofullständiga poster.
Kommentarer
- I vissa (oklara) fall räcker inte ip grannskap allt. I mitt fall rensade det inte poster som lagts till med arp -s.
- Jag föredrar detta mycket framför mitt eget svar ovan, med den tillagda varningen angående statiska ARP-poster, beroende på önskat beteende.
Svar
I vissa system är ip
-kommandot inte tillgängligt.
user@linux:~$ ip -bash: ip: command not found user@linux:~$
Så detta är alternativet för ip link set arp off dev eth0; ip link set arp on dev eth0
-kommandot.
Om du vill ta bort alla poster från tabellen i ett enda kommando, använd for loop
som i följande exempel.
FÖRE
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:~$
TA BORT 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:~$
EFTER: MAC-ADRESS BORTTAGAD FRÅN INRÄTTNINGARNA MED KOMPETENT MEDDELANDE
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
Det är sant, genom att radera arp med arp -d
-kommandot finns arp-posterna fortfarande kvar med incomplete
meddelande.
Lös problemet genom att använda ifconfig ethx up/down
så här
FÖRE
user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$
INAKTIV & AKTIVERA GRÄNSSNITTEN ETH1 & ETH2 I EN ENKEL 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
.