Como você limpa o cache do arp no linux?


13

Ambos:

sudo ip -s -s neigh flush all

E:

sudo arp -d 192.168.0.102

Em vez de limpar o cache do arp, eles parecem apenas invalidar as entradas (elas aparecerão como incomplete). Mesmo depois de alguns minutos, o cache do ARP se parece com:

$ 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

(O MAC do gateway foi atualizado - tudo bem)

Como posso realmente limpar o cache do ARP, como em "excluir todas as entradas da tabela"? Eu não quero manter entradas incompletas, eu quero que eles removido. Isso é possível?

EDITAR

Este é o meu sistema:

» 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
O que você está tentando realizar aqui? Ou, mais claramente, que problema você está tentando resolver?
— EEAA

Você está com falta de entradas da tabela arp? Talvez haja um programa solicitando esse IP, renovando essa entrada. Verifique com wiresharkou tcpdump.
— ott--

5
@MichaelMartinez porque xy problem . Parece provável que a questão não seja o problema principal e que possa haver algum problema subjacente no qual o OP esteja trabalhando.
— Zoredache

1
A razão pela qual essas informações não estão em questão é porque não são relevantes. Eu quero um cache ARP limpo. Ponto final. Você não confia em mim que eu quero isso, mas esse é seu problema, não meu. Garanto-lhe: quero um cache ARP limpo.
— dangonfast

2
Há uma explicação profunda do mecanismo de cache ARP aqui: stackoverflow.com/a/15511117/647991
— dangonfast

Respostas:


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

Certifique-se de fazer tudo de uma só vez, para não interromper a conectividade de rede antes de poder ativar o ARP novamente.


2
É preciso executar um script de shell ou na máquina, pois parece interromper a conectividade após o primeiro comando.
— Louis

Eu fiz isso em uma linha, e funcionou: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. O sleeppode não ser necessário.
— mivk

5

Sua primeira solução funciona, leva apenas um pouco de tempo (5 a 10 segundos no meu teste no Kali) para passar de "(incompleto)" para nenhuma entrada.

Presumivelmente, ele está em algum tipo de estado de transição a caminho de ser excluído.


Para mim (Ubuntu 14.04), esse não foi o caso: as entradas são mantidas por um longo tempo (para sempre?) No estado incompleto. Vou verificar novamente hoje.
— dangonfast

Verificada: mesmo depois de alguns minutos, as entradas ainda existem, no estado incompleto (1,88 arp, net-ferramentas 1.60)
— dangonfast

Bem, então seu problema é certamente um comportamento não padrão, talvez particular no Ubuntu 14.04. A maneira correta de fazer isso no Linux simplesmente não está funcionando para você. Espero que você encontre sua resposta em breve. Pode excluir este, se desejar.
— Armani

1
Não, deixe, ele fornece informações para os outros. Mas acho que o comportamento mais "padrão" pode ser encontrado no Ubuntu, não no Kali, que é uma distribuição dos testes de penetração e possui valores padrão especificamente ajustados para esse caso de uso.
— dangonfast

1

Em determinado sistema, o ipcomando não está disponível.

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

Portanto, esta é a alternativa do ip link set arp off dev eth0; ip link set arp on dev eth0comando.

Se você deseja excluir todas as entradas da tabela em um único comando, use for loopcomo no exemplo a seguir.

ANTES

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

REMOVER ARP COM ARP -D COMMAND

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

DEPOIS: ENDEREÇO ​​MAC REMOVIDO DOS ENTRADAS COM MENSAGEM INCOMPLETA

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

Isso é verdade, ao excluir o arp com o arp -dcomando, as entradas do arp ainda estão lá com a incompletemensagem.

Para resolver esse problema, use ifconfig ethx up/downassim

ANTES

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

DESATIVAR E ATIVAR AS INTERFACES ETH1 E ETH2 EM UM ÚNICO COMANDO

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

TADAAA ... PROBLEMA RESOLVIDO :)

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

0

Sua solução mencionada é a abordagem correta e segura para liberar a tabela ARP:

ip neigh flush all [dev <device>]

Se determinadas entradas forem alteradas para inválidas, isso é temporário e faz parte do protocolo ARP. O aspecto importante é que o mapeamento se foi; uma entrada ARP sinalizada como incompleta não é uma entrada IP-MAC na tabela.

Eu apenas tentei isso e, no meu caso, ele imediatamente limpou a tabela e não deixou entradas incompletas.


Em alguns casos (pouco claros), o ip neigh flush nem tudo é suficiente. No meu caso, não limpou as entradas adicionadas com arp -s.
— MappaM 13/02/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.