【发布时间】:2013-09-19 00:18:31
【问题描述】:
我注意到一些更好的网络发现应用程序(例如 iOS 版 Fing 和 Mac 版 iNet)能够发现 iOS 设备和 Mac 设备的设备名称,即使它们没有宣传 Bonjour 服务(例如 iTunes Wi-Fi Sync)。这是怎么做的?我知道如何进行反向 mDNS 查询https://serverfault.com/questions/143184/how-do-i-get-the-machine-name-from-an-ip-via-multicast-dns。但是,虽然反向 mDNS 查找(至少通过 dig 命令dig -x the.ip @224.0.0.251 -p 5353 完成)将适用于没有以其他方式广播任何 Bonjour 服务的 Mac,但除非正在运行 Wi-Fi 同步或其他一些 Bonjour 服务,否则它不起作用在 iOS 设备上。我不知道如何获得名称,但这些应用程序可靠地获得它。我在 iNet 发现时使用了 Wireshark,我只看到 ICMP 和 NetBios 查询都返回 0 个答案。
另外请注意,我已经通过广播 ping 然后解析 ARP 表获得了设备的 IP 地址。我想通过获取设备名称并查找字符串“iPhone”或“iPad”来发现以这种方式发现的哪些设备是 iOS 设备。
另请注意,iNet 应用程序网站提供了以下有关他们如何进行反向 IP 查找的信息。我认为这意味着他们对每个 IP 进行反向 DNS 查找和反向 mDNS 查找。
Reverse IP lookups (hostnames) are performed as unicast and multicast queries for every IP found.-http://www.bananaglue.de/inet/index_e.php
【问题讨论】:
-
我假设您正在寻找 bash 解决方案,对吧?我会尝试使用 bonjour 的 dns-sd 工具查找任何服务,并使用 wireshark 查找发送的查询。之后,我会尝试使用 bash-tools 重建查询。要测试的命令:
dns-sd -B _smb._tcp和dns-sd -B _afpovertcp._tcp。注意:不要直接在 bash 脚本中使用 dns-sd 工具。 -
@John Wright 您是否将代码与您正在寻找的内容相关联?我也想解析主机名。我尝试使用“gethostbyaddr”POSIX 调用,但它返回 nil。我问了here..你能帮忙吗?
标签: ios macos networking ios7 mdns