Estou com uma situação bem típica em que quero conectar um telefone (android) a um notebook linux na mesma rede (wifi) usando ssh. Os IP's são atribuídos pelo DHCP então eu conheço apenas o do cliente com antecedência. Conhecendo o IP do cliente, eu poderia, em princípio, executar um comando ssh em todos os IPs possíveis na mesma rede para ver se um servidor está escutando lá. No entanto, isso parece altamente ineficiente. Então, como posso descobrir o IP do meu host (sabendo seu endereço MAC) para poder conectar-me a ele usando ssh? Eu conheço outro software que consegue algo assim, então deve ser possível. Relacionado: posso atribuir dinamicamente um nome de host a este IP no cliente (supondo que seja Linux) para poder usar uma entrada estática no arquivo de configuração ssh?
Responder1
Você pode fazer isso nas duas etapas a seguir:
Passo 1:
Faça uma varredura em sua sub-rede para preencher o cache ARP. Existem métodos, mas eu sugiro fping. Instale-o no Ubuntu executando o comando abaixo em um terminal:
apt-get install fping
... então verifique sua rede (por exemplo, sub-rede 192.168.10.0/24):
fping -g 192.168.10.0/24
Agora o cache ARP está preenchido com os endereços MAC dos dispositivos em sua sub-rede.
Passo 2
Aplique um filtro apropriado em seu cache ARP para ver apenas o dispositivo de destino. Basta usar o seguinte comando (onde aa:bb:cc:dd:ee:ffestá 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.
EDITAR1:
O endereço MAC de exemplo foi alterado para letras minúsculas porque o Linux o mostra dessa maneira (ao contrário do Microsoft Windows que usa letras maiúsculas)
EDITAR2:
Seguindo o script bash, adicione uma entrada ao arquivo hosts ( /etc/hosts) com o nomecelularpara que você possa acessar seu dispositivo com nomecelular. Para atualizar o endereço IP associado, basta executá-lo novamente. Altere namee para macos subnetvalores 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
Responder2
Zeroconfpode 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-daemone libnss-mdns), os hosts anunciarão seus nomes de host e você poderá resolvê-los com <hostname>.local.
Responder3
Parece que o seu problema é que você está conectando algo à rede e deseja saber qual IP ele receberá.
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? Nesse caso, você provavelmente poderia fazer uma de duas coisas:
- Verifique os logs para ver qual IP o MAC fornecido foi alocado.
- Configure um mapa estático.


