como detectar que a máquina especificada está presente na rede local

1

como eu posso detectar - usando o bash se possível - aquela máquina específica (ou seja, nome ou endereço mac) apareceu na rede local? Endereços IP são atribuídos dinamicamente, então não posso confiar em ping "tradicional".

    
por ts01 18.02.2013 / 20:23

3 respostas

2

Se você souber o endereço MAC, poderá fazer o ping com arping

    
por jgm 18.02.2013 / 20:46
1

A solução mais fácil é verificar os registros do servidor DHCP, se você tiver acesso a eles.

Caso contrário, você pode usar o comando ping tradicional para transmitir o ping na LAN local e procurar na tabela ARP local do seu sistema para ver se o host de destino respondeu. Isso não requer o conhecimento do endereço IP do alvo, apenas seu MAC. Exemplo:

ping='which ping'
iface=eth0 # MAYBE CHANGE THIS
bcast='ip a ls $iface | awk '/inet? /{ print  ; exit }''
cmd="$ping -bnrc1 $bcast"
target_mac='00:11:22:33:44:55' # DEFINITELY CHANGE THIS
if [[ -u $ping ]] ; then $cmd ; else sudo $cmd ; fi
grep $target_mac /proc/net/arp

Isso é semelhante a 'arping', pois deve acionar uma resposta ARP, só que é mais ruidoso. Por esta razão, adicione '-r' para limitá-lo à LAN local, use o endereço de broadcast direcionado (aquele snippet awk o agarra, mas você pode precisar ajustar 'iface') ao invés de '255.255.255.255', e enviar somente uma solicitação de eco ICMP com '-c1'. Desligue a resolução de DNS inversa com '-n'.

'ping' somente honrará a opção de transmissão '-b' se ela for setuid root ou se você tiver privilégios de root, então eu coloquei em um if / else para capturar isso.

    
por al-x 18.02.2013 / 22:15
0

Você precisa monitorar ativamente o tráfego para fazer isso. Olhe para arpalert ou arpwatch. arping também é uma opção, mas não funcionará nesse caso, pois precisa do endereço IP de destino.

    
por roadmr 18.02.2013 / 20:48