Como você limpa o cache arp no linux?

Ambos:

sudo ip -s -s neigh flush all 

E:

sudo arp -d 192.168.0.102 

Em vez de limpar o cache arp, eles parecem apenas invalidar as entradas (aparecerão como incomplete). Mesmo depois de alguns minutos, o cache 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 – está tudo bem)

Como posso realmente limpar o cache ARP, como em “excluir todas as entradas da tabela”? Eu não quero manter as entradas incompletas, quero que sejam removidas. 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 

Comentários

  • O que você está tentando realizar aqui? Ou, mais claramente, que problema você está tentando resolver?
  • Você tem poucas entradas na tabela ARP? Talvez haja ‘ s um programa solicitando esse IP, renovando assim essa entrada. Verifique com wireshark ou tcpdump.
  • @MichaelMartinez porque problema xy . Parece provável que a questão não seja ‘ a raiz do problema e pode haver algum problema subjacente no qual o OP deveria estar trabalhando.
  • O motivo desta informação não está em questão é porque não é relevante. Quero um cache ARP limpo. Ponto final. Você não acredita que eu quero isso, mas isso é problema seu, não meu. Garanto-lhe: quero um cache ARP limpo.
  • Há uma explicação detalhada do mecanismo de cache ARP aqui: stackoverflow.com/a/ 15511117/647991

Resposta

Oneliner original

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

Certifique-se de fazer tudo de uma vez, para não interromper a conectividade da rede antes de poder reativar o ARP.

Interface descobrindo o comando copiar e colar

interfaces=$( arp -n | awk " NR == 1 {next} {interfaces[$5]+=1} END {for (interface in interfaces){print(interface)}} " ); for interface in $interfaces; do echo "Clearing ARP cache for $interface"; sudo ip link set arp off dev $interface; sudo ip link set arp on dev $interface; done 

Nota: Os pontos-e-vírgulas permitem que você condense este comando em um oneliner, mas parece terrível em um bloco de código no SO .

Exemplo de saída em Raspbian

pi@raspberrypi:~ $ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.0.1 ether 58:19:f8:0d:57:aa C wlan0 10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0 pi@raspberrypi:~ $ interfaces=$( arp -n | awk " NR == 1 {next} {interfaces[$5]+=1} END {for (interface in interfaces){print(interface)}} "); for interface in $interfaces; do echo "Clearing ARP cache for $interface"; sudo ip link set arp off dev $interface; sudo ip link set arp on dev $interface; done Clearing ARP cache for wlan0 pi@raspberrypi:~ $ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.0.159 ether 88:e9:fe:84:82:c8 C wlan0 

Comentários

  • Deve-se faça em um script de shell ou na máquina, pois parece interromper a conectividade após o primeiro comando.
  • Fiz em uma linha e funcionou: dev=eth2; ip link set arp off dev $dev; sleep 1; ip link set arp on dev $dev. A sleep pode não ser necessária.

Resposta

Seu a primeira solução funciona, só leva um pouco de tempo (5-10 segundos no meu teste em Kali) para ir de “(incompleto)” para nenhuma entrada.

Presumivelmente, está em algum tipo de estado de transição em sua maneira de ser excluído.

Comentários

  • Para mim (Ubuntu 14.04) este não foi o caso: as entradas são mantidas por um longo tempo ( para sempre?) no estado incompleto. Vou verificar novamente hoje.
  • Verificado: mesmo depois de alguns minutos, as entradas ainda estão lá, no estado incompleto (arp 1.88, net-tools 1.60)
  • Bem então o seu problema é certamente um comportamento fora do padrão, talvez específico do 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 você ‘ desejar.
  • Não, deixe, fornece informações para os outros. Mas eu acho que o comportamento mais ” padrão ” pode ser encontrado no Ubuntu, não em Kali, que é uma distro para teste de penetração e tem valores padrão ajustados especificamente para esse caso de uso.

Resposta

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

ip neigh flush all [dev <device>]

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

Acabei de tentar isso e, no meu caso, limpou imediatamente o tabela e não deixou entradas incompletas.

Comentários

  • Em alguns casos (pouco claros), ip neigh flush all não é suficiente. No meu caso, não apagou as entradas adicionadas com arp -s.
  • Prefiro muito mais isso do que a minha própria resposta acima, com a advertência adicionada a respeito das entradas ARP estáticas, dependendo do comportamento desejado.

Resposta

Em certos sistemas, o comando ip não está disponível.

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

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

Se você quiser exclua todas as entradas da tabela em um único comando, use for loop como 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:~$ 

REMOVENDO ARP COM O COMANDO ARP -D

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

APÓS: ENDEREÇO MAC REMOVIDO DAS 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 arp com o comando arp -d, as entradas arp ainda estão lá com a mensagem incomplete.

Para resolver este problema, use ifconfig ethx up/down como este

ANTES

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

DESATIVAR & ATIVA AS INTERFACES ETH1 & 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:~$ 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *