Cum ștergeți cache-ul arp de pe Linux?

Ambele:

sudo ip -s -s neigh flush all 

Și:

sudo arp -d 192.168.0.102 

În loc să șteargă memoria cache arp, par să doar invalideze intrările (vor apărea ca incomplete). Chiar și după câteva minute, memoria cache ARP arată ca:

$ 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-ul gateway-ului a fost reîmprospătat – este ok)

Cum pot într-adevăr șterge memoria cache ARP, ca în „șterge toate intrările din tabel”? Nu nu vreau să păstrez intrări incomplete, vreau să fie eliminate. Este posibil acest lucru?

EDIT

Acesta este sistemul meu:

» 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 

Comentarii

  • Ce încercați să realizați aici? Sau mai clar, ce problemă încercați să rezolvați?
  • Vă lipsesc intrările din tabelul ARP? Poate că există ‘ un program care solicită acel IP, reînnoind astfel acea intrare. Verificați cu wireshark sau tcpdump.
  • @MichaelMartinez deoarece xy problem . Se pare că această întrebare nu este ‘ t problema rădăcină și ar putea exista o problemă de bază pe care OP ar trebui să lucreze.
  • Motivul pentru care aceste informații nu este în întrebare este pentru că nu este relevant. Vreau un cache ARP curat. Punct. Nu aveți încredere în mine că vreau asta, dar asta este problema voastră, nu a mea. Vă asigur: vreau un cache ARP curat.
  • Există o explicație profundă a mecanismului cache ARP aici: stackoverflow.com/a/ 15511117/647991

Răspuns

Oneliner original

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

Asigurați-vă că faceți totul dintr-o dată, astfel încât să nu întrerupeți conectivitatea la rețea înainte de a putea reactiva ARP.

Interfața descoperă comanda copiere-lipire

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 

Notă: Punctele și virgulele vă permit să condensați această comandă într-un oneliner, dar arată teribil într-un bloc de cod de pe SO .

Exemplu de ieșire pe 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 

Comentarii

  • Trebuie fie faceți într-un script shell sau la mașină, deoarece pare să rupă conectivitatea după prima comandă.
  • Am făcut-o pe o singură linie și a funcționat: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Este posibil ca sleep să nu fie necesar.

Răspuns

prima soluție funcționează, este nevoie de puțin timp (5-10 secunde în testul meu pe Kali) pentru a trece de la „(incomplet)” la nici o intrare.

Probabil că se află într-un fel de stare de tranziție pe drumul său de a fi șters.

Comentarii

  • Pentru mine (Ubuntu 14.04) nu a fost cazul: intrările sunt păstrate mult timp ( pentru totdeauna?) în stare incompletă. Voi verifica din nou astăzi din nou.
  • Verificat: chiar și după câteva minute, intrările sunt încă acolo, în stare incompletă (arp 1.88, net-tools 1.60)
  • Ei bine atunci problema dvs. este cu siguranță un comportament nestandard, poate particular pentru Ubuntu 14.04. Modul corect de a face acest lucru în Linux pur și simplu nu funcționează pentru dvs. Sper că veți găsi răspunsul în curând. Îl puteți șterge dacă doriți ‘.
  • Nu, lăsați-l, oferă informații pentru alții. Dar cred că comportamentul mai ” standard ” se găsește în Ubuntu, nu în Kali, care este o distribuție pentru testarea penetrării și are valori implicite modificate în mod specific pentru acest caz de utilizare.

Răspuns

Soluția dvs. menționată este corectă și sigură abordare pentru a spăla tabelul ARP:

ip neigh flush all [dev <device>]

Dacă anumite intrări sunt schimbate în invalide, acesta este temporar și face parte din ARP protocol. Aspectul important este că maparea a dispărut, o intrare ARP semnalată ca incompletă nu este o intrare IP-MAC pe masă.

Tocmai am încercat acest lucru și în cazul meu am șters imediat tabel și nu a lăsat nicio intrare incompletă.

Comentarii

  • În unele cazuri (neclare), toate acestea nu sunt suficiente. În cazul meu, nu a șters intrările adăugate cu arp -s.
  • Prefer mult acest lucru decât răspunsul meu de mai sus, cu avertismentul adăugat privind intrările ARP statice, în funcție de comportamentul dorit.

Răspuns

În anumite sisteme, comanda ip nu este disponibilă.

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

Deci, aceasta este alternativa comenzii ip link set arp off dev eth0; ip link set arp on dev eth0.

Dacă doriți să ștergeți toate intrările din tabel într-o singură comandă, utilizați for loop ca în exemplul următor.

ÎNAINTE de

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

ELIMINAREA ARP CU COMANDA ARP -D

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

DUPĂ: ADRESA MAC ELIMINATĂ DE LA INTRĂRILE CU MESAJ INCOMPLET

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

Este adevărat, ștergând arp cu comanda arp -d, intrările arp sunt încă acolo cu mesajul incomplete.

Pentru a rezolva această problemă, utilizați ifconfig ethx up/down astfel

ÎNAINTE de

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

DEZACTIVAT & ACTIVAȚI INTERFAȚELE ETH1 & ETH2 într-o singură comandă

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

TADAAA … PROBLEMA REZOLVATĂ:)

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *