![如何通过多播 DNS 从 IP 获取机器名称?](https://linux22.com/image/513963/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%A4%9A%E6%92%AD%20DNS%20%E4%BB%8E%20IP%20%E8%8E%B7%E5%8F%96%E6%9C%BA%E5%99%A8%E5%90%8D%E7%A7%B0%EF%BC%9F.png)
我有网络上的 IP 地址列表,其中大多数都支持多播 DNS。我希望能够解析服务器名称,而不仅仅是 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
可以,但我希望能够根据 IP 确定该名称。此外,设备不一定广播任何服务,但肯定支持 mDNS 广播。因此查看服务不起作用。
答案1
由于您已经知道 IP 地址,因此您可以查找每个 IP 地址的反向条目以获取相关的正向地址:
$ 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
为了获得更加适合 Shell 脚本的输出,请使用“+short”:
$ dig +short -x 10.0.0.200 @224.0.0.251 -p 5353
atj-mbp.local.
根据您的预期用例,可能会有更合适的方法来执行查询。如果您需要任何进一步的信息,请随时联系我。
答案2
在 Linux 上,您可以使用 libc 中的 getent 命令:
getent hosts 192.168.0.52
或者安装 avahi-utils,然后运行
avahi-resolve-address 192.168.0.52
答案3
答案4
好吧,我对此做了更多研究,查看了 mDNDS 和协议,似乎这实际上是不可能的。协议上有一个用于名称检索的查找请求,因此当您请求名称时,相应的客户端会响应,但没有查找 IP 的请求。也没有地址的中央存储。
希望这能对其他人有所帮助,因为我花了太多时间来追踪这一点。
如果有人对这个问题有其他想法,我很乐意听到。