Hvordan rydder du arp-cachen på Linux?

Begge:

sudo ip -s -s neigh flush all 

Og:

sudo arp -d 192.168.0.102 

I stedet for at rydde arp-cachen ser de ud til kun at ugyldiggøre poster (de vises som incomplete). Selv efter nogle minutter ser ARP-cachen sådan ud:

$ 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 er blevet opdateret – det er ok)

Hvordan kan jeg virkelig rydde ARP-cachen, som i “slette alle poster fra tabellen”? Jeg vil ikke beholde ufuldstændige poster, jeg vil have dem fjernet. Er dette muligt?

REDIGER

Dette er mit 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

  • Hvad prøver du at opnå her? Eller mere klart, hvilket problem forsøger du at løse?
  • Har du ingen arp-tabelindgange? Måske er der ‘ et program, der beder om den IP, og dermed fornyes denne post. Tjek med wireshark eller tcpdump.
  • @MichaelMartinez fordi xy-problem . Det forekommer sandsynligt, at spørgsmålet ikke er ‘ t rodproblemet, og der kan være noget underliggende problem, som OPen skulle arbejde på i stedet.
  • Årsagen til, at disse oplysninger er ikke i spørgsmålet, fordi det ikke er relevant. Jeg vil have en ren ARP-cache. Fuldt stop. Du stoler ikke på mig, at jeg vil have det, men det er dit problem, ikke mit. Jeg kan forsikre dig: Jeg vil have en ren ARP-cache.
  • Der er en dybtgående forklaring på ARP-cache-mekanismen her: stackoverflow.com/a/ 15511117/647991

Svar

Original oneliner

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

Sørg for at gøre det hele på én gang, så du ikke bryder netværksforbindelsen, før du” er i stand til at tænde ARP igen.

Interface, der opdager kopi-indsæt kommando

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 

Bemærk: Semikolonerne giver dig mulighed for at kondensere denne kommando til en oneliner, men det ser forfærdeligt ud i en kodeblok 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 skal enten gør det i et shell-script eller på maskinen, da det ser ud til at bryde forbindelsen efter den første kommando.
  • Jeg gjorde det på en linje, og det fungerede: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. sleep er muligvis ikke nødvendigt.

Svar

Dit første løsning virker, det tager bare lidt tid (5-10 sekunder i min test på Kali) at gå fra “(ufuldstændig)” til ingen poster.

Formentlig er den i en eller anden form for overgangsstatus på sin måde at blive slettet.

Kommentarer

  • For mig (Ubuntu 14.04) var dette ikke tilfældet: posterne opbevares i lang tid ( for evigt?) i ufuldstændig tilstand. Jeg vil kontrollere dette igen i dag.
  • Bekræftet: selv efter nogle minutter er posterne stadig der, i ufuldstændig tilstand (arp 1.88, net-tools 1.60)
  • Nå så er dit problem bestemt ikke-standardadfærd, måske specielt for Ubuntu 14.04. Den korrekte måde at gøre det på Linux fungerer bare ikke for dig. Håber du finder dit svar snart. Kan slette denne, hvis du ‘ kan lide det.
  • Nej, lad det være, det giver information til andre. Men jeg antager, at jo mere ” standard ” adfærd findes i Ubuntu, ikke i Kali, hvilket er en distro til penetrationstest og har standardværdier, der specifikt er tilpasset til denne brugssag.

Svar

Din nævnte løsning er den rigtige og sikre tilgang til at skylle ARP-tabellen:

ip neigh flush all [dev <device>]

Hvis visse poster ændres til ugyldige, er det midlertidigt og en del af ARP Det vigtige aspekt er, at kortlægningen er væk, en ARP-post markeret som ufuldstændig er ikke en IP-MAC-post på bordet.

Jeg har lige prøvet dette og i mit tilfælde ryddede det straks tabellen og efterlod ingen ufuldstændige poster.

Kommentarer

  • I nogle (uklare) tilfælde er ip neigh flush all ikke tilstrækkelig. I mit tilfælde slettede det ikke poster tilføjet med arp -s.
  • Jeg foretrækker dette meget frem for mit eget svar ovenfor med den ekstra advarsel angående statiske ARP-poster afhængigt af den ønskede adfærd.

Svar

I visse systemer er kommandoen ip ikke tilgængelig.

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

Så dette er alternativet til ip link set arp off dev eth0; ip link set arp on dev eth0 -kommandoen.

Hvis du vil slet alle poster fra tabellen i en enkelt kommando, brug for loop som det 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:~$ 

FJERNELSE AF 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-ADRESSE FJERNET FRA INDGANGER MED UFULLT MEDDELELSE

user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$ 

Det er sandt, ved at slette arp med arp -d kommando, er arp-indgangene stadig der med incomplete besked.

For at løse dette problem skal du bruge ifconfig ethx up/down sådan

FØR

user@linux:~$ arp ? (10.0.0.1) at <incomplete> on eth1 ? (172.168.0.3) at <incomplete> on eth2 user@linux:~$ 

Deaktiveret & AKTIVER INTERFACES 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 … LØSET PROBLEM 🙂

user@linux:~$ arp user@linux:~$ 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *