12

Apple 的 Finder.app 能够始终如一地确定使用 bonjour 的每台物理计算机的确切型号(如每个单独设备类型的唯一图标证明:iMac、MacPro、MBP 等)。他们如何做到这一点以及他们使用哪些 API?

附带说明,Bonjour 为网络上的所有服务提供名称、服务类型、域和端口 - 但我无法找到有关如何查找设备型号本身的信息。

4

2 回答 2

12

我相信这使用了_device-info._tcp。IP 地址的 mDNS 记录。你可以自己看看这个。在终端中,您可以使用dig @224.0.0.251 -p5353来执行 mDNS 请求。您可以使用dig @224.0.0.251 -p5353 Foo.local.Foo.local 来解析计算机的 IP 地址。获取该 IP 并将其重新插入dig @224.0.0.251 -p5353 -x $IP,您应该会看到如下内容:

> dig @224.0.0.251 -p5353 -x 10.0.1.1
; <<>> DiG 9.6.0-APPLE-P2 <<>> @224.0.0.251 -p5353 -x 10.0.1.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22887
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.0.10.in-addr.arpa.     IN  PTR

;; ANSWER SECTION:
1.0.0.10.in-addr.arpa.  10  IN  PTR Foo.local.

;; ADDITIONAL SECTION:
Foo._device-info._tcp.local. 10 IN TXT  "model=MacBookPro5,3"

;; Query time: 4 msec
;; SERVER: 10.0.0.1#5353(224.0.0.251)
;; WHEN: Mon Nov 29 18:00:23 2010
;; MSG SIZE  rcvd: 131

注意附加部分。

不幸的是,我不知道如何使用 Bonjour API 获取这些信息。

编辑:您也可以在单个查询中使用dig @224.0.0.251 -p5353 Foo._device-info._tcp.local. TXT.

于 2010-11-30T02:03:39.667 回答
7

如果这台机器上正在运行某些网络服务,OSX 会广播此信息。据我所知,它们是 _afpovertcp、_rfb 和 _airport(当然只有机场路由器)。您正在寻找名为 _device-info._tcp 的 bonjour 服务。问题是,它不是通过简单的

[someNSNetServiceBrowserInstance searchForServicesOfType:@"_services._dns-sd._udp." inDomain:@""];

相反,您需要开始监视您认为可以广播_device-info._tcp 的特定主机。

NSNetService *aNetService = [[NSNetService alloc]initWithDomain:@"" type:@"_device-info._tcp." name:@"MyFancyIMacWithAFPOn"];
    [aNetService setDelegate:self];
    [aNetService startMonitoring];

实现回调

- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data

这将为您提供 deviceModel 字符串。

于 2011-03-14T04:14:44.160 回答