Complementando o
post que eu fiz para o how2ubuntu dias atrás, neste post irei postar mais algumas dicas, e curiosidades sobre o protocolo ARP que encontrei na internet.
Todos os créditos dos respectivos sites estão postados juntamente com o seu conteúdo.
[...] a tabela de cache arp pode ser manipulada pelos comandos ip neighbor e arp.
Exemplo de uma conversa capturada com o tcpdump
[root@charlespito]#
tcpdump -ennqti eth0 \( arp or icmp \)
tcpdump: listening on eth0
1- 0:80:c8:f8:4a:51 ff:ff:ff:ff:ff:ff 42: arp who-has 192.168.99.254 tell 192.168.99.35
2- 0:80:c8:f8:5c:73 0:80:c8:f8:4a:51 60: arp reply 192.168.99.254 is-at 0:80:c8:f8:5c:73
3- 0:80:c8:f8:4a:51 0:80:c8:f8:5c:73 98: 192.168.99.35 > 192.168.99.254: icmp: echo request (DF)
4- 0:80:c8:f8:5c:73 0:80:c8:f8:4a:51 98: 192.168.99.254 > 192.168.99.35: icmp: echo reply
Na primeira linha, um pacote do tipo broadcast ff:ff:ff:ff:ff:ff contendo uma requisição arp, pergunta quem tem o ip 192.168.99.254 avise 192.168.99.35.
Na segunda linha, um pacote do tipo arp reply é enviado pelo host dono do ip 192.168.99.254, dizendo: 192.168.99.254 está em
0:80:c8:f8:5c:73
Exemplo de Arp Gratuito
[root@tristan]#
arping -q -c 3 -A -I eth0 192.168.99.35
[root@masq-gw]#
tcpdump -c 3 -nni eth2 arp
tcpdump: listening on eth2
06:02:50.626330 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51)
06:02:51.622727 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51)
06:02:52.620954 arp reply 192.168.99.35 is-at 0:80:c8:f8:4a:51 (0:80:c8:f8:4a:51)
ARP não solicitados
[root@tristan]#
arping -q -c 3 -U -I eth0 192.168.99.35
[root@masq-gw]#
tcpdump -c 3 -nni eth2 arp
tcpdump: listening on eth2
06:28:23.172068 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell 192.168.99.35
06:28:24.167290 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell 192.168.99.35
06:28:25.167250 arp who-has 192.168.99.35 (ff:ff:ff:ff:ff:ff) tell 192.168.99.35
Eliminando entradas
sudo arp -d 192.168.1.1 // entrada específica
ou
sudo arp -d * // todas entradas
Ip Neighbor
$ sudo ip neighbor show 192.168.99.7
192.168.99.7 dev eth0 lladdr 00:80:c8:e8:1e:fc nud reachable
$ sudo ip neighbor show 192.168.99.7
192.168.99.7 dev eth0 lladdr 00:80:c8:e8:1e:fc nud stale
$ sudo ip neighbor show 192.168.99.7
192.168.99.7 dev eth0 lladdr 00:80:c8:e8:1e:fc nud delay
$ sudo ip neighbor show 192.168.99.7
192.168.99.7 dev eth0 lladdr 00:80:c8e8:1e:fc nud probe
$ sudo ip neighbor show 192.168.99.7
192.168.99.7 dev eth0 nud incomplete
Créditos:
http://linux-ip.net/html/ether-arp.html
1. permanent: é um registro noarp, mas apenas o administrador pode remover o registro da tabela de vizinhos.
2. noarp: o vizinho é válido. Nenhuma tentativa para checar o registro será feita.
3. reachable: o vizinho é válido e aparentemente alcançável.
4. stale: o vizinho é válido, mas provavelmente não pode ser alcançado. O kernel vai tentar checá-lo na primeira transmissão.
5. delay: o pacote foi enviado para o vizinho envelhecido (stale) e o kernel está aguardando uma confirmação.
6. probe: o timer de retardo expirou, mas nenhuma confirmação foi recebida. O kernel começou a testar o vizinho com mensagens ARP/NDISC.
7. incomplete: o vizinho está no processo de resolução.
8. failed: a resolução falhou.
. none: o estado do vizinho é void.
Créditos:
http://www.numaboa.com/informatica/linux/configuracoes/704-iproute2?start=12
--
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
• arp_filter
A variável arp_filter conta ao kernel se um endereço IP deve ser ligado com um
endereço ARP específico ou não. O kernel decide, se responde para um pacote
específico entrando numa interface, se ele envia a resposta pelo mesmo
endereço da interface ou não. Se o arp_filter é verdadeiro (1) isso é o que
acontece. O valor default é falso (0).
• rp_filter
Esta variável atribui o filtro de caminho reverso (reverse path - rp) para uma
interface. O RP serve para validar que o atual endereço de origem usados por
alguns pacotes estejam correlacionados com uma tabela de rotas e que pacotes
com este IP de origem são supostamente respondidos através da mesma
interface. (Verificar os comportamentos na RFC 1812).
Fonte: Construindo Roteadores com Linux