如何通过多播 DNS 从 IP 获取机器名称?

Ada*_*dam 17 mdns

我有一个网络上的 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
Run Code Online (Sandbox Code Playgroud)

有效,但我希望能够从 IP 中确定该名称。此外,设备不一定广播任何服务,但肯定支持 mDNS 广播。所以查看服务是行不通的。

小智 25

由于您已经知道 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
Run Code Online (Sandbox Code Playgroud)

要获得对 shell 脚本更友好的输出,请使用“+short”:

$ dig +short -x 10.0.0.200 @224.0.0.251 -p 5353
atj-mbp.local.
Run Code Online (Sandbox Code Playgroud)

根据您的预期用例,可能有更合适的方法来执行查询。如果您需要任何进一步的信息,请随时与我联系。

  • 知道为什么这可能会在未运行任何 Bonjour 服务的 iOS 设备上失败吗?它适用于未运行任何 Bonjour 服务的 Mac。 (2认同)

Tob*_*obu 6

在 Linux 上,您可以使用 libc 中的 getent 命令:

getent hosts 192.168.0.52
Run Code Online (Sandbox Code Playgroud)

或者安装 avahi-utils,然后运行

avahi-resolve-address 192.168.0.52
Run Code Online (Sandbox Code Playgroud)