Как очистить кэш 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
dangonfast
источник
3
Что вы пытаетесь достичь здесь? Или, если быть более понятным, какую проблему вы пытаетесь решить?
EEAA
Вам не хватает записей таблицы ARP? Может быть, есть программа, запрашивающая этот IP, обновляющая эту запись. Проверьте с помощью wiresharkили tcpdump.
ot--
5
@MichaelMartinez, потому что проблема ху . Кажется вероятным, что вопрос не является коренной проблемой, и может быть некоторая основная проблема, над которой вместо этого должен работать OP.
Зоредаче
1
Причина, по которой эта информация не рассматривается, заключается в том, что она не актуальна. Я хочу чистый кеш ARP. Полная остановка. Ты не веришь мне, что я этого хочу, но это твоя проблема, а не моя. Уверяю вас: я хочу чистый ARP-кеш.
Дангонфаст
2
Здесь
подробно объясняется

Ответы:

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

Обязательно сделайте все сразу, чтобы не нарушить сетевое подключение, прежде чем вы сможете снова включить ARP.

Nyet
источник
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 в таблице.

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

Pedro
источник
В некоторых (непонятных) случаях ipigh flush все не достаточно. В моем случае он не очищал записи, добавленные с помощью arp -s.
MappaM