Frases

terça-feira, 27 de julho de 2010

Potocolo ARP - Tips



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 arptcpdump: 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 arptcpdump: 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

Um comentário:

Anônimo disse...

Nice idea