Hvordan tømmer du arp-hurtigbufferen på Linux?

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

  • Hva prøver du å oppnå her? Eller tydeligere, hvilket problem prøver du å løse?
  • Mangler du arp-tabelloppføringer? Kanskje er det ‘ et program som ber om IP-en, og dermed fornyes oppføringen. Sjekk med wireshark eller tcpdump.
  • @MichaelMartinez fordi xy-problem . Det virker sannsynlig at spørsmålet ikke er ‘ t rotproblemet, og det kan være noe underliggende problem som OP-en burde jobbe med i stedet.
  • Årsaken til at denne informasjonen er ikke i spørsmålet er fordi det ikke er relevant. Jeg vil ha en ren ARP-cache. Full stopp. Du stoler ikke på meg at jeg vil ha det, men det er problemet ditt, ikke mitt. Jeg forsikrer deg: Jeg vil ha en ren ARP-cache.
  • Det er en grundig 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 å 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:~$ 

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *