Jak vymažete mezipaměť ARP v systému Linux?

Oba:

sudo ip -s -s neigh flush all 

A:

sudo arp -d 192.168.0.102 

Namísto vymazání mezipaměti arp se zdá, že pouze zneplatňují položky (budou vypadat jako incomplete). I po několika minutách vypadá mezipaměť ARP takto:

$ 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 brány byl obnoven – to je v pořádku)

Jak mohu skutečně vymazat mezipaměť ARP, například v části „odstranit všechny položky z tabulky“? Nechci uchovat neúplné položky, chci je odstranit. Je to možné?

UPRAVIT

Toto je můj systém:

» 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 

Komentáře

  • Co se zde snažíte dosáhnout? Nebo jasněji, jaký problém se snažíte vyřešit?
  • Chybí vám položky arp tabulky? Možná existuje ‚ program, který požaduje tuto IP adresu, čímž obnoví tuto položku. Zkontrolujte u wireshark nebo tcpdump.
  • @MichaelMartinez, protože xy problém . Je pravděpodobné, že otázka není ‚ t kořenovým problémem a může existovat nějaký základní problém, na kterém by OP měl místo toho pracovat.
  • Důvod, proč tyto informace není v otázce, protože to není relevantní. Chci čistou mezipaměť ARP. Tečka. Nevěříš mi, že to chci, ale to je tvůj problém, ne můj. Ujišťuji vás: Chci čistou mezipaměť ARP.
  • Zde je podrobné vysvětlení mechanismu mezipaměti ARP: stackoverflow.com/a/ 15511117/647991

Odpověď

Originální oneliner

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

Ujistěte se, že to děláte najednou, takže nezrušíte připojení k síti, než budete moci ARP znovu zapnout.

Rozhraní objevující příkaz copy-paste

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 

Poznámka: středníky vám umožní zkondenzovat tento příkaz do jednoho řádku, ale vypadá to hrozně v bloku kódu na SO .

Ukázkový výstup na 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 

Komentáře

  • Jeden musí buď dělat ve skořápce skriptu nebo na stroji, protože se zdá, že po prvním příkazu došlo k přerušení připojení.
  • Udělal jsem to na jednom řádku a fungovalo to: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. Položka sleep nemusí být nutná.

Odpověď

Vaše první řešení funguje, jen trvá trochu času (5–10 sekund v mém testu na Kali) přejít z „(neúplné)“ na žádné položky.

Pravděpodobně je v nějakém přechodném stavu na jeho způsob, jak být smazán.

Komentáře

  • U mě (Ubuntu 14.04) tomu tak nebylo: položky jsou uchovávány po dlouhou dobu ( navždy?) v neúplném stavu. Dnes to znovu zkontroluji.
  • Ověřeno: i po několika minutách jsou záznamy stále v neúplném stavu (arp 1.88, net-tools 1.60)
  • No pak je vaším problémem určitě nestandardní chování, možná zejména u Ubuntu 14.04. Správný způsob, jak to udělat v systému Linux, pro vás prostě nefunguje. Doufám, že brzy najdete odpověď. Tuto můžete odstranit, pokud se vám ‚ líbí.
  • Ne, nechte to, poskytne informace ostatním. Ale myslím, že více “ standardního “ chování lze najít v Ubuntu, ne v Kali, což je distro pro testování penetrace a má výchozí hodnoty speciálně upravené pro daný případ použití.

Odpověď

Vaše zmíněné řešení je správné a bezpečné přístup k vyprázdnění tabulky ARP:

ip neigh flush all [dev <device>]

Pokud jsou některé položky změněny na neplatné, je to dočasná a část ARP Důležitým aspektem je, že mapování je pryč, položka ARP označená jako neúplná není položkou IP-MAC v tabulce.

Právě jsem to zkusil a v mém případě to okamžitě vymazalo tabulka a nezanechal žádné neúplné položky.

Komentáře

  • V některých (nejasných) případech není ip sousední flush dostačující. V mém případě to nevymazalo položky přidané pomocí arp -s.
  • Hodně to dávám přednost mé vlastní odpovědi výše, s přidanou výhradou týkající se statických položek ARP, v závislosti na požadovaném chování.

Odpověď

V některých systémech není příkaz ip k dispozici.

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

Takže toto je alternativa příkazu ip link set arp off dev eth0; ip link set arp on dev eth0.

Pokud chcete smažte všechny položky z tabulky v jediném příkazu, použijte for loop jako v následujícím příkladu.

PŘED

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

ODSTRANĚNÍ ARP POMOCÍ ARP -D

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

PO: MAC ADRESA ODSTRANĚNA Z PŘIHLÁŠEK S NEÚPLNOU ZPRÁVOU

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

To je pravda, odstraněním arp pomocí příkazu arp -d zůstanou položky arp stále se zprávou incomplete.

Chcete-li tento problém vyřešit, použijte ifconfig ethx up/down takto

PŘED

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

ZAKÁZAT & POVOLIT ROZHRANÍ ETH1 & ETH2 V JEDNOM PŘÍKAZU

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

TADAAA … ŘEŠENÍ PROBLÉMU 🙂

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *