使用mDNS发现iOS设备名称

Joh*_*ght 18 macos networking mdns ios ios7

我注意到一些更好的网络发现应用程序,如Fing for iOS和iNet for Mac能够发现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,它将无效,除非在iOS设备上运行Wi-Fi Sync或其他一些Bonjour服务,否则它无效.我不知道如何获得这个名称,但这些应用程序可靠地得到它.我在iNet发现时使用了Wireshark,我只看到所有返回0个答案的ICMP和NetBios查询.

另请注意,我已经通过广播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

Yse*_*ser 8

你试过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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

注意:请注意,设备名称可能无法可靠地检测您正在与之通信的设备

希望有所帮助.

  • “_whats-my-name”似乎不再由 macOS 设备发布 (2认同)