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
dangonfast
fonte
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.

nyet
fonte
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.

Armani
fonte
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:~$ 
Charlotte Russell
fonte
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.

Pedro
fonte
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