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
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 casleep
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:~$
wireshark
sautcpdump
.