Hoe wis je de arp-cache op linux?

Beide:

sudo ip -s -s neigh flush all 

En:

sudo arp -d 192.168.0.102 

In plaats van het arp-cachegeheugen leeg te maken, lijken ze alleen de invoer ongeldig te maken (ze zullen verschijnen als incomplete). Zelfs na enkele minuten ziet de ARP-cache er als volgt uit:

$ 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 

(De MAC van de gateway is vernieuwd – dat is oké)

Hoe kan ik echt de ARP-cache wissen, zoals in “verwijder alle vermeldingen uit de tabel”? Ik wil geen onvolledige vermeldingen behouden, ik wil dat ze worden verwijderd. Is dit mogelijk?

BEWERK

Dit is mijn systeem:

» 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 

Reacties

  • Wat probeer je hier te bereiken? Of nog duidelijker, welk probleem probeer je op te lossen?
  • Komt u te weinig arp-tabelvermeldingen? Misschien is er ‘ een programma dat om dat IP-adres vraagt en dus dat item vernieuwt. Controleer met wireshark of tcpdump.
  • @MichaelMartinez omdat xy probleem . Het lijkt waarschijnlijk dat de vraag niet het hoofdprobleem is ‘ en dat er misschien een onderliggend probleem is waaraan het OP zou moeten werken.
  • De reden waarom deze informatie is niet in de vraag is omdat het niet relevant is. Ik wil een schone ARP-cache. Punt. Je vertrouwt me niet dat ik dat wil, maar dat is jouw probleem, niet het mijne. Ik verzeker je: ik wil een schone ARP-cache.
  • Er is hier een diepgaande uitleg van het ARP-cachemechanisme: stackoverflow.com/a/ 15511117/647991

Antwoord

Originele oneliner

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

Zorg ervoor dat u alles tegelijk doet, zodat u de netwerkverbinding niet verbreekt voordat u ARP weer kunt inschakelen.

Interface ontdekt kopieer-plakopdracht

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 

Opmerking: Met de puntkommas kunt u dit commando in een oneliner samenvatten, maar het ziet er vreselijk uit in een codeblok op SO .

Voorbeelduitvoer op 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 

Reacties

  • Men moet ofwel doe in een shellscript of op de machine, omdat het de connectiviteit lijkt te verbreken na het eerste commando.
  • Ik deed het op één regel, en het werkte: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. De sleep is misschien niet nodig.

Antwoord

Uw eerste oplossing werkt, het kost slechts een korte tijd (5-10 seconden in mijn test op Kali) om van “(onvolledig)” naar geen invoer te gaan.

Vermoedelijk bevindt het zich in een soort overgangsstatus op zijn manier om te worden verwijderd.

Reacties

  • Voor mij (Ubuntu 14.04) was dit niet het geval: de vermeldingen worden lang bewaard ( voor altijd?) in de onvolledige staat. Ik zal dit vandaag opnieuw controleren.
  • Geverifieerd: zelfs na enkele minuten zijn de inzendingen nog steeds aanwezig, in de onvolledige staat (arp 1.88, net-tools 1.60)
  • Nou dan is uw probleem zeker niet-standaardgedrag, misschien specifiek voor Ubuntu 14.04. De juiste manier om het onder Linux te doen, werkt gewoon niet voor jou. Ik hoop dat je snel je antwoord vindt. Kan deze verwijderen als je ‘ wilt.
  • Nee, laat het staan, het geeft informatie voor anderen. Maar ik denk dat het meer ” standaard ” gedrag te vinden is in Ubuntu, niet in Kali, wat een distro is voor penetratietesten en heeft standaardwaarden die specifiek zijn aangepast voor dat gebruik.

Answer

Uw genoemde oplossing is de juiste en veilige benadering om de ARP-tabel leeg te maken:

ip neigh flush all [dev <device>]

Als bepaalde invoer ongeldig wordt, is dat tijdelijk en maakt deel uit van de ARP protocol. Het belangrijke aspect is dat de mapping is verdwenen, een ARP-item dat als onvolledig is gemarkeerd, is geen IP-MAC-item op de tafel.

Ik heb dit net geprobeerd en in mijn geval wist het onmiddellijk de tabel en liet geen onvolledige items achter.

Reacties

  • In sommige (onduidelijke) gevallen is ip neigh flush all niet voldoende. In mijn geval heeft het geen invoer gewist die zijn toegevoegd met arp -s.
  • Ik geef de voorkeur aan dit boven mijn eigen antwoord hierboven, met het toegevoegde voorbehoud met betrekking tot statische ARP-invoer, afhankelijk van het gewenste gedrag.

Antwoord

In bepaalde systemen is het ip commando niet beschikbaar.

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

Dus dit is het alternatief van het ip link set arp off dev eth0; ip link set arp on dev eth0 commando.

Als je wilt verwijder alle items uit de tabel in een enkele opdracht, gebruik for loop zoals in het volgende voorbeeld.

VOOR

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

ARP VERWIJDEREN MET ARP -D COMMAND

user@linux:~$ for i in 10.0.0.1 172.168.0.3; do sudo arp -d $i; done user@linux:~$ 

NA: MAC-ADRES VERWIJDERD UIT DE INVOER MET ONVOLLEDIG BERICHT

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

Dat is waar, door arp te verwijderen met het arp -d commando, zijn de arp-ingangen nog steeds aanwezig met incomplete bericht.

Om dit probleem op te lossen, gebruikt u ifconfig ethx up/down op deze manier

VOORDAT

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

UITSCHAKELEN & SCHAKEL DE INTERFACES IN ETH1 & ETH2 IN EEN ENKELE COMMANDO

user@linux:~$ for i in 1 2; do sudo ifconfig eth$i down; sudo ifconfig eth$i up; done user@linux:~$ 

TADAAA … PROBLEEM OPGELOST 🙂

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *