Como detectar o IP de um determinado dispositivo na mesma rede

4

Eu tenho uma situação muito típica na qual eu quero conectar um telefone (android) a um notebook linux na mesma rede (wifi) usando o ssh. Os IP's são atribuídos pelo DHCP, então eu conheço apenas o do cliente antecipadamente. Conhecendo o IP do cliente, eu poderia, em princípio, fazer o loop de um comando ssh sobre todos os IPs possíveis na mesma rede para ver se um servidor está escutando. No entanto, isso parece altamente ineficiente. Então, como posso descobrir o IP do meu host (sabendo que é o endereço MAC) para que eu possa me conectar a ele usando o ssh? Eu sei sobre outro software que atinge algo assim, então deve ser possível. Relacionados: posso atribuir dinamicamente um nome de host a esse IP no cliente (supondo que seja Linux) para que eu possa usar uma entrada estática no arquivo de configuração ssh?

    
por highsciguy 16.10.2013 / 10:58

3 respostas

5

Você pode fazer isso nas duas etapas a seguir:

Passo 1:

Analise sua sub-rede para preencher seu cache de ARP. Existem métodos, mas sugiro fping . Instale-o no Ubuntu executando o comando abaixo em um terminal:

apt-get install fping

... depois escaneie sua rede (por exemplo, sub-rede 192.168.10.0/24):

fping -g 192.168.10.0/24

Agora, o cache do ARP é preenchido com o endereço MAC dos dispositivos na sua sub-rede.

Step2

Aplique um filtro apropriado no seu cache ARP para ver apenas o dispositivo alvo. Basta usar o seguinte comando (onde aa:bb:cc:dd:ee:ff é o MAC do dispositivo):

arp -n | grep -i aa:bb:cc:dd:ee:ff | cut -c-15

A saída é o endereço IP do dispositivo de destino.

EDIT1:

O endereço MAC de exemplo foi alterado para minúsculas porque o Linux mostra isso dessa maneira (diferente do Microsoft Windows usando letras maiúsculas)

EDIT2:

Após o script bash, adicione uma entrada ao arquivo hosts ( /etc/hosts ) com o nome cellphone para que você possa acessar seu dispositivo com o nome cellphone . Para atualizar o endereço IP associado, basta executá-lo novamente. Altere name , mac e subnet para os valores desejados.

#!/bin/sh
name="cellphone"
mac=aa:bb:cc:dd:ee:ff
subnet=192.168.10.0/24
fping -g ${subnet}
ip="$(arp -n | grep -i ${mac} | cut -c-15)"
sed -i".bak" '/'${name}'/d' /etc/hosts
if [ -z "$ip" ]; then
    echo "Device not found!"
else
    echo "${ip}\t${name}" >> /etc/hosts
fi
    
por 18.10.2013 / 21:27
3

Zeroconf pode ser uma solução aqui. É um protocolo para descobrir serviços na rede e estabelecer um link entre dois hosts.

Se você configurar o avahi mDNS (pacotes avahi-daemon e libnss-mdns ), os hosts anunciarão seus nomes de host e você poderá resolvê-los com <hostname>.local .

    
por 16.10.2013 / 11:16
2

Parece que o seu problema é que você está conectando algo na rede e quer saber qual IP obterá.

Com base nisso, parece que a solução mais simples possível é configurar seu servidor DHCP para fornecer um IP estático para o endereço MAC apropriado.

Você tem controle sobre o servidor DHCP? Se assim você provavelmente poderia fazer uma das duas coisas:

  • Verifique os logs para ver qual IP o MAC fornecido foi alocado.
  • Configurar um mapa estático.
por 16.10.2013 / 11:10