使用 mDNS 发现 iOS 设备名称



我注意到一些更好的网络发现应用程序,如 Fing for iOS 和 iNet for Mac,即使它们没有宣传 iTunes Wi-Fi Sync 等 Bonjour 服务,也能发现 iOS 设备和 Mac 设备的设备名称。 这是怎么做到的? 我知道如何 https://serverfault.com/questions/143184/how-do-i-get-the-machine-name-from-an-ip-via-multicast-dns 执行反向 mDNS 查询。 但是,虽然反向 mDNS 查找(至少由 dig 命令 dig -x the.ip @224.0.0.251 -p 5353 完成)将适用于不广播任何 Bonjour 服务的 Mac,但除非 Wi-Fi Sync 正在运行或 iOS 设备上的其他 Bonjour 服务,否则它不起作用。 我不确定如何以其他方式获取名称,但这些应用程序可靠地获取它。 我在iNet发现时使用Wireshark,我只看到ICMP和NetBios查询所有返回0个答案。

另请注意,我已经通过执行广播ping然后解析ARP表获得了设备的IP地址。我想通过获取其设备名称并查找字符串"iPhone"或"iPad"来发现以这种方式发现的哪些设备是iOS设备。

另请注意,iNet 应用程序网站提供了有关如何进行反向 IP 查找的以下内容。 我认为这意味着他们为每个IP进行反向DNS查找和反向mDNS查找。

Reverse IP lookups (host­names) are per­formed as unicast and mul­ti­cast queries for every IP found. -http://www.bananaglue.de/inet/index_e.php

你试过dns-sd命令行工具吗?

如果键入 dns-sd -B _services._dns-sd._udp 以获取所有可用服务,则会看到有可用的_whats-my-name服务。

$ dns-sd -B _services._dns-sd._udp
Browsing for _services._dns-sd._udp
DATE: ---Tue 16 Dec 2014---
14:38:30.746  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
14:38:30.747  Add        3   5 .                    _tcp.local.          _nfs
14:38:30.747  Add        3   5 .                    _tcp.local.          _afpovertcp
14:38:30.747  Add        3   5 .                    _tcp.local.          _smb
14:38:30.747  Add        2   0 .                    _tcp.local.          _whats-my-name
14:38:31.330  Add        3  10 .                    _tcp.local.          _nfs
14:38:31.330  Add        3  10 .                    _tcp.local.          _afpovertcp
14:38:31.330  Add        2  10 .                    _tcp.local.          _smb

之后,我们可以查询此服务,它输出以下内容:

$ dns-sd -B _whats-my-name._tcp
Browsing for _whats-my-name._tcp
DATE: ---Tue 16 Dec 2014---
14:40:20.738  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
14:40:20.742  Add        2   0 local.               _whats-my-name._tcp. Blub MacBook Pro

Instance Name是这里有趣的部分。我假设_whats-my-name服务在每台运行 bonjour 的计算机上都可用。也许您可以查找发送的查询并使用基本的 bash 工具重建它,如果您无法在每种情况下都访问 dns-sd。此外,您不应该在脚本中使用dns-sd。相反,您应该为您的编程语言使用协议的特定实现。

注意:请注意,设备名称可能不可靠,无法检测您正在与哪个设备通信

希望有帮助。

最新更新