Fundo
Tenho um dispositivo conectado ao meu PC com Windows via Ethernet. O dispositivo está executando um serviço mDNS e possui seu próprio nome de host ( gp800-49d1a
).
Da WSL, posso ping gp800-49d1a
com sucesso, e posso nslookup gp800-49d1a
com o seguinte resultado:
Server: 172.30.176.1
Address: 172.30.176.1#53
Non-authoritative answer:
Name: gp800-49d1a.local
Address: 169.254.93.130
Name: gp800-49d1a.local
Address: fe80::e700:63f:1807:adf2
Posso obter o endereço IP 169.254.93.130
. A conexão neste endereço funciona. Tudo está correto até este ponto.
Problema
Quando executo nslookup gp800-49d1a
no prompt de comando do Windows, obtenho o seguinte resultado:
Server: dns.google
Address: 8.8.8.8
*** dns.google can't find gp800-49d1a: Non-existent domain
Quando executo ping gp800-49d1a
no prompt de comando do Windows, funciona bem.
Então, por algum motivo, o nslookup do WSL está OK, mas o nslookup do Windows não.
Informação adicional
Posso acessar meu dispositivo no Google Chrome usando o nome do host. Parece que tanto o Chrome quanto o WSL sabem como encontrar a entrada mDNS, mas o nslookup no prompt de comando do Windows não.
Pergunta
Como o nslookup não encontra meu dispositivo no prompt de comando do Windows, o que mais posso usar para obter o endereço IP do meu dispositivo no Windows?
nslookup
é exclusivamente um cliente DNS, não um cliente mDNS nem uma ferramenta genérica de pesquisa de nome de host. Ele ignora completamente todo o sistema de "pesquisa de nome de host" que o sistema operacional possui, em vez disso, envia manualmente pacotes DNS para um servidor (o primeiro servidor encontrado na lista fornecida pelo sistema operacional).A única razão pela qual funciona no WSL é porque você está se comunicando com o serviço DNS ('Dnscache') em execução no host do Windows, que então faz proxy de consultas para todos os mecanismos que suporta (incluindo mDNS que é tratado por 'Dnscache' no Windows) .
Mesmo neste caso, entretanto, o nslookup do Linux ainda ignora a pesquisa normal de nome de host do Linux, em vez de fazer o DNS manualmente, e ainda pensa que está falando apenas de DNS unicast para um servidor específico que encontra em /etc/resolv.conf – isso só acontece que esse servidor execute esta tradução sem o conhecimento do nslookup.
Quando você o executa diretamente no Windows, entretanto, isso não acontece – o nslookup se comunica com o servidor DNS em 8.8.8.8, e esse servidor não tem ideia sobre seus nomes de host mDNS .local.
Conforme mencionado na resposta de u1686_grawity , o nslookup do prompt de comando do Windows não funciona com mDNS.
Para obter o endereço IP de um dispositivo você pode usar o comando PowerShell
Resolve-DnsName <hostname>
.