Як очистити кеш-пам'ять арпу на Linux?


13

Обидва:

sudo ip -s -s neigh flush all

І:

sudo arp -d 192.168.0.102

Замість очищення кеш-пам'яті arp вони здаються просто недійсними записами (вони з'являться як incomplete). Навіть через кілька хвилин кеш ARP виглядає так:

$ 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 шлюзу оновлено - це нормально)

Як я можу дійсно очистити кеш-пам'ять ARP, наприклад, "видалити всі записи з таблиці"? Я не хочу зберігати неповні записи, я хочу їх видалити. Чи можливо це?

EDIT

Це моя система:

» 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

3
Що ви намагаєтеся досягти тут? Або, більш чітко, яку проблему ви намагаєтеся вирішити?
ЄЕАА

Чи не вистачає вам записів таблиці arp? Можливо, є програма, яка запитує цей IP, таким чином оновивши цей запис. Зверніться до wiresharkабо tcpdump.
ott--

5
@MichaelMartinez, оскільки проблема xy . Здається, це питання не є основною проблемою, і може бути якась основна проблема, над якою повинна працювати над ОП.
Зоредаче

1
Причина, по якій ця інформація не підлягає питанню, полягає в тому, що вона не є актуальною. Я хочу чистий кеш ARP. Повна зупинка. Ви мені не довіряєте, що я цього хочу, але це ваша проблема, а не моя. Я запевняю вас: я хочу чистий кеш ARP.
dangonfast

2
Існує в-глибоке пояснення механізму кешу ARP тут: stackoverflow.com/a/15511117/647991
dangonfast

Відповіді:


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

Не забудьте зробити це все одразу, щоб ви не порушили мережеве підключення, перш ніж ви зможете ввімкнути ARP.


2
Потрібно це робити або в сценарії оболонки, або на машині, оскільки, здається, порушується зв'язок після першої команди.
Луї,

Я зробив це на одній лінії, і це спрацювало: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. sleepНе може бути необхідним.
mivk

5

Ваше перше рішення працює, просто потрібно трохи часу (5-10 секунд у моєму тесті на Калі), щоб перейти від "(неповного)" до записів.

Імовірно, він перебуває у певному перехідному стані на шляху до видалення.


Для мене (Ubuntu 14.04) це було не так: записи зберігаються тривалий час (назавжди?) У неповному стані. Я сьогодні ще раз перевірю це.
dangonfast

Перевірено: навіть через декілька хвилин записи залишаються там, у неповному стані (арп. 1,88, чисті інструменти 1,60)
dangonfast

Ну, тоді ваше питання, безумовно, нестандартне поведінка, можливо, особливо для Ubuntu 14.04. Правильний спосіб зробити це в Linux просто не працює для вас. Сподіваюсь, ви скоро знайдете свою відповідь. Ви можете видалити цю, якщо хочете.
армані

1
Ні, залиште це, воно дає інформацію для інших. Але я здогадуюсь, що більш "стандартну" поведінку можна знайти в Ubuntu, а не в Kali, який є дистрибутивом для проникнення і має значення за замовчуванням, спеціально налаштовані для цього випадку використання.
dangonfast

1

У певній системі ipкоманда недоступна.

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

Так що це альтернатива ip link set arp off dev eth0; ip link set arp on dev eth0команді.

Якщо ви хочете видалити всі записи з таблиці в одній команді, використовуйте for loopтакий приклад.

ПЕРЕД

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

ВИДАЛЕННЯ ARP З КОМАНДОЮ ARP -D

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

ПІСЛЯ: АДРЕСА МАКУВАННЯ ВІД ВПРИЄМНИЦТВ З НЕПОЛАГНІМИ ПОВІДОМЛЕННЯМ

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

Це правда, видаливши арп з arp -dкомандою, записи арп все ще є з incompleteповідомленням.

Щоб вирішити цю проблему, використовуйте ifconfig ethx up/downтак

ПЕРЕД

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

ВИМКНЕННЯ І ПОДАЧАЙТЕ ІНТЕРФЕЙСИ ETH1 та ETH2 В ЄДИННІЙ КОМАНДІ

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

TADAAA ... ПРОБЛЕМА РЕШЕНА :)

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

0

Ваше згадане рішення - це правильний та безпечний підхід до очищення таблиці ARP:

ip neigh flush all [dev <device>]

Якщо певні записи змінені на недійсні, це тимчасовий характер і є частиною протоколу ARP. Важливим аспектом є те, що відображення відсутнє, запис ARP, позначений як неповний, не є записом IP-MAC на столі.

Я тільки що спробував це, і в моєму випадку він негайно очистив таблицю і не залишив неповних записів.


У деяких (незрозумілих) випадках, все це недостатньо. У моєму випадку він не очистив записи, додані з arp -s.
MappaM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.