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
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žkasleep
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:~$
wireshark
nebotcpdump
.