Hur rensar du arp-cache på Linux?

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

  • Vad försöker du åstadkomma här? Eller tydligare, vilket problem försöker du lösa?
  • Har du inga arp-tabellposter? Kanske finns det ’ ett program som frågar efter IP-adressen och därmed förnyas den posten. Kontrollera med wireshark eller tcpdump.
  • @MichaelMartinez eftersom xy-problem . Det verkar troligt att frågan inte är ’ t rotproblemet och det kan finnas något bakomliggande problem som OP bör arbeta med istället.
  • Anledningen till att denna information är inte i frågan beror på att det inte är relevant. Jag vill ha en ren ARP-cache. Punkt. Du litar inte på mig att jag vill ha det, men det är ditt problem, inte mitt. Jag försäkrar dig: Jag vill ha en ren ARP-cache.
  • Det finns en djupförklaring av ARP-cache-mekanismen här: stackoverflow.com/a/ 15511117/647991

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:~$ 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *