Como obtenho o nome da máquina de um IP via DNS Multicast?

17

Eu tenho uma lista de endereços IP em uma rede e a maioria deles suporta DNS multicast. Gostaria de resolver o nome do servidor em vez de apenas ter o endereço IP.

ping computer.local
64 bytes from 192.168.0.52: icmp_seq=1 ttl=64 time=5.510 ms
64 bytes from 192.168.0.52: icmp_seq=2 ttl=64 time=5.396 ms
64 bytes from 192.168.0.52: icmp_seq=3 ttl=64 time=5.273 ms

Funciona, mas eu gostaria de poder determinar esse nome pelo IP. Além disso, os dispositivos não transmitem necessariamente nenhum serviço, mas definitivamente suportam a transmissão mDNS. Portanto, analisar os serviços não funcionará.

Adão
fonte
1
Qual sistema operacional você está usando? O mdns-scan parece ser uma opção no linux.
Zoredache
1
OS X, mas se eu conseguir uma solução linux, tenho certeza de que posso encontrar um analógico no mundo mac. O mdns-scan procura serviços transmitidos, para que não funcione. Alguns dos dispositivos não transmitem nenhum serviço, mas resolvem o endereço quando consultados pelo nome.
19410 Adam

Respostas:

23

Como você já conhece os endereços IP, pode procurar a entrada reversa de cada endereço IP para obter o endereço de encaminhamento associado:

$ dig -x 10.0.0.200 @224.0.0.251 -p 5353

; <<>> DiG 9.6.0-APPLE-P2 <<>> -x 10.0.0.200 @224.0.0.251 -p 5353
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54300
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;200.0.0.10.in-addr.arpa.   IN  PTR

;; ANSWER SECTION:
200.0.0.10.in-addr.arpa. 10 IN  PTR atj-mbp.local.

;; ADDITIONAL SECTION:
atj-mbp._device-info._tcp.local. 10 IN  TXT "model=MacBookPro3,1"

;; Query time: 2 msec
;; SERVER: 10.0.0.200#5353(224.0.0.251)
;; WHEN: Sat Jun 26 07:53:44 2010
;; MSG SIZE  rcvd: 126

Para uma saída mais amigável ao script de shell, use '+ short':

$ dig +short -x 10.0.0.200 @224.0.0.251 -p 5353
atj-mbp.local.

Dependendo do caso de uso pretendido, pode haver um método mais apropriado de executar a consulta. Não hesite em contactar-me se precisar de mais informações.

andrewtj
fonte
2
Alguma idéia de por que isso pode falhar em um dispositivo iOS que não esteja executando nenhum serviço Bonjour? Funciona em um Mac que não está executando nenhum serviço Bonjour.
John Wright
Vale ressaltar que você também pode descobrir quais endereços IP estão na rede usando arp-scaninstalado a partir de homebrew ou macports. Ou, se você só quer começar uma sensação para os anfitriões na rede, você pode olhar para a tabela ARP atual usando um comando já no OS X: arp. Especificamente, você pode usar o comando arp -n -i <interface> -l -a, onde <interface>deve estar o nome da interface de rede que lhe interessa (por exemplo en0).
Tiro parta
5

No Linux, você pode usar o comando getent da libc:

getent hosts 192.168.0.52

Ou instale o avahi-utils e execute

avahi-resolve-address 192.168.0.52
Tobu
fonte
O pacote é avahi-toolsno Fedora e é a única coisa sobre esta página que trabalhou :)
Navin
-1

Bem, eu fiz um pouco mais de pesquisa sobre este e, olhando o mDNDS e o protocolo, parece que isso não é realmente possível. Há uma solicitação de pesquisa no protocolo para recuperação de nomes; portanto, quando você solicita um nome, o cliente apropriado responde, mas não há uma solicitação de pesquisa para um IP. Também não há armazenamento central para endereços.

Espero que isso ajude outra pessoa, já que passei muito tempo rastreando isso.

Se alguém tiver outras idéias sobre essas questões, eu adoraria ouvi-las.

Adão
fonte