Bagaimana Anda menghapus cache arp di linux?

13

Kedua:

sudo ip -s -s neigh flush all

Dan:

sudo arp -d 192.168.0.102

Alih-alih membersihkan cache arp mereka tampaknya hanya membatalkan entri (mereka akan muncul sebagai incomplete). Bahkan setelah beberapa menit, cache ARP terlihat seperti:

$ 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 gateway telah di-refresh - tidak apa-apa)

Bagaimana saya bisa benar-benar menghapus cache ARP, seperti di "hapus semua entri dari tabel"? Saya tidak ingin menyimpan entri yang tidak lengkap, saya ingin mereka dihapus. Apakah ini mungkin?

EDIT

Ini adalah sistem saya:

» 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
dangonfast
sumber
3
Apa yang ingin Anda capai di sini? Atau lebih jelas, masalah apa yang Anda coba selesaikan?
EEAA
Apakah Anda kekurangan entri tabel arp? Mungkin ada program yang meminta IP itu, sehingga memperbarui entri itu. Periksa dengan wiresharkatau tcpdump.
ott--
5
@MichaelMartinez karena masalah xy . Tampaknya pertanyaan itu bukanlah masalah utama dan mungkin ada beberapa masalah mendasar yang harus ditangani OP.
Zoredache
1
Alasan mengapa informasi ini tidak ada dalam pertanyaan adalah karena tidak relevan. Saya ingin cache ARP bersih. Titik. Anda tidak percaya pada saya bahwa saya menginginkannya, tetapi itu adalah masalah Anda, bukan masalah saya. Saya yakinkan Anda: Saya ingin cache ARP bersih.
dangonfast
2
Ada penjelasan mendalam tentang mekanisme cache ARP di sini: stackoverflow.com/a/15511117/647991
dangonfast

Jawaban:

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

Pastikan untuk melakukan semuanya sekaligus, sehingga Anda tidak memutus konektivitas jaringan sebelum Anda dapat mengaktifkan kembali ARP.

nyet
sumber
2
Seseorang harus melakukannya dalam skrip shell atau di mesin, karena tampaknya memutus konektivitas setelah perintah pertama.
Louis
Saya melakukannya pada satu baris, dan berhasil: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev . The sleepmungkin tidak diperlukan.
mivk
5

Solusi pertama Anda berhasil, hanya perlu sedikit waktu (5-10 detik dalam pengujian saya di Kali) untuk beralih dari "(tidak lengkap)" ke tidak ada entri.

Agaknya ia dalam keadaan transisi dalam perjalanan untuk dihapus.

armani
sumber
Bagi saya (Ubuntu 14.04) ini tidak terjadi: entri disimpan untuk waktu yang lama (selamanya?) Dalam keadaan tidak lengkap. Saya akan periksa lagi hari ini.
dangonfast
Diverifikasi: bahkan setelah beberapa menit, entri masih ada, dalam keadaan tidak lengkap (arp 1.88, net-tools 1.60)
dangonfast
Kalau begitu masalah Anda tentu bukan perilaku standar, mungkin khusus untuk Ubuntu 14.04. Cara yang benar untuk melakukannya di Linux tidak berfungsi untuk Anda. Semoga Anda menemukan jawaban Anda segera. Dapat menghapus yang ini jika Anda mau.
armani
1
Tidak, biarkan, itu memberi info untuk orang lain. Tapi saya kira perilaku yang lebih "standar" dapat ditemukan di Ubuntu, bukan di Kali, yang merupakan distro untuk pengujian penetrasi dan memiliki nilai-nilai default yang disesuaikan untuk kasus penggunaan tersebut.
dangonfast
1

Dalam sistem tertentu, ipperintah tidak tersedia.

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

Jadi ini alternatif dari ip link set arp off dev eth0; ip link set arp on dev eth0perintah.

Jika Anda ingin menghapus semua entri dari tabel dalam satu perintah, gunakan for loop seperti contoh berikut.

SEBELUM

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

MENGHAPUS ARP DENGAN ARP -D COMMAND

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

SETELAH: ALAMAT MAC DIHAPUS DARI PENDAFTARAN DENGAN PESAN LENGKAP

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

Itu benar, dengan menghapus arp dengan arp -dperintah, entri arp masih ada dengan incompletepesan.

Untuk mengatasi masalah ini, gunakan ifconfig ethx up/downseperti ini

SEBELUM

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

Nonaktifkan & Aktifkan INTERFACE ETH1 & ETH2 DALAM PERINTAH TUNGGAL

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

TADAAA ... MASALAH ASK :)

user@linux:~$ arp
user@linux:~$ 
Charlotte Russell
sumber
0

Solusi yang Anda sebutkan adalah pendekatan yang benar dan aman untuk menyiram tabel ARP:

ip neigh flush all [dev <device>]

Jika entri tertentu diubah menjadi tidak valid, itu sementara dan merupakan bagian dari protokol ARP. Aspek penting adalah bahwa pemetaan hilang, entri ARP ditandai sebagai tidak lengkap bukan entri IP-MAC di atas meja.

Saya baru saja mencoba ini dan dalam kasus saya segera membersihkan meja dan tidak meninggalkan entri yang tidak lengkap.

Pedro
sumber
Dalam beberapa kasus (tidak jelas), ip neigh siram semua tidak cukup. Dalam kasus saya itu tidak menghapus entri yang ditambahkan dengan arp -s.
MappaM