Как очистить кэш arp в 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, как в «удалить все записи из таблицы»? Я не хочу хранить неполные записи, я хочу, чтобы они были удалены. Это возможно?

РЕДАКТИРОВАТЬ

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

» 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
Что вы пытаетесь достичь здесь? Или, если быть более понятным, какую проблему вы пытаетесь решить?
— EEAA

Вам не хватает записей таблицы ARP? Может быть, есть программа, запрашивающая этот IP, обновляющая эту запись. Проверьте с помощью wiresharkили tcpdump.
— ot--

5
@MichaelMartinez, потому что проблема ху . Кажется вероятным, что вопрос не является коренной проблемой, и может быть некоторая основная проблема, над которой вместо этого должен работать OP.
— Зоредаче

1
Причина, по которой эта информация не рассматривается, заключается в том, что она не актуальна. Я хочу чистый кеш ARP. Полная остановка. Ты не веришь мне, что я этого хочу, но это твоя проблема, а не моя. Уверяю вас: я хочу чистый ARP-кеш.
— Дангонфаст

Ответы:


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 секунд в моем тесте на Kali), чтобы перейти от "(неполного)" до отсутствия записей.

Предположительно, он находится в каком-то переходном состоянии на пути к удалению.


Для меня (Ubuntu 14.04) это было не так: записи хранятся в течение длительного времени (навсегда?) В неполном состоянии. Я проверю это снова сегодня.
— Дангонфаст

Проверено: даже через несколько минут записи все еще там, в неполном состоянии (arp 1.88, net-tools 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:~$

ПОСЛЕ: MAC-АДРЕС УДАЛЕН ИЗ ВХОДОВ С НЕПРАВИЛЬНЫМ СООБЩЕНИЕМ

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

Это правда, удалив arp с arp -dкомандой, записи arp все еще остаются с 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:~$ 

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

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

0

Ваше упомянутое решение является правильным и безопасным подходом для очистки таблицы ARP:

ip neigh flush all [dev <device>]

Если некоторые записи заменяются недействительными, это временно и является частью протокола ARP. Важным аспектом является то, что сопоставление исчезло, запись ARP, помеченная как неполная, не является записью IP-MAC в таблице.

Я только что попробовал это, и в моем случае это немедленно очистило таблицу и не оставило неполных записей.


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