如何获取联网设备的"型号名称"(可能使用Bonjour)?

Mar*_*amn 12 macos networking bonjour

Apple的Finder.app能够始终如一地确定使用bonjour的每台物理计算机的确切模型(每个设备类型的图标都是独一无二的:iMac,MacPro,MBP等).他们如何做到这一点以及他们使用什么API?

另外,Bonjour为网络上的所有服务提供名称,服务类型,域和端口 - 但我无法找到有关如何查找设备模型本身的信息.

Lil*_*ard 12

我相信这会使用_device-info._tcp.mDNS记录IP地址.你可以自己看看.在终端中,您可以使用它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
Run Code Online (Sandbox Code Playgroud)

请注意附加部分.

不幸的是,我不知道如何使用Bonjour API获取此信息.

编辑:您也可以在一个查询中获取此信息dig @224.0.0.251 -p5353 Foo._device-info._tcp.local. TXT.


Mon*_*ono 7

如果在此计算机上运行某些网络服务,OSX将广播此信息.据我所知,这些是_afpovertcp,_rfb和_airport(当然只有机场路由器).您正在寻找名为_device-info._tcp的bonjour服务.麻烦的是,它并没有通过简单的方式显示出来

[someNSNetServiceBrowserInstance searchForServicesOfType:@"_services._dns-sd._udp." inDomain:@""];
Run Code Online (Sandbox Code Playgroud)

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

NSNetService *aNetService = [[NSNetService alloc]initWithDomain:@"" type:@"_device-info._tcp." name:@"MyFancyIMacWithAFPOn"];
    [aNetService setDelegate:self];
    [aNetService startMonitoring];
Run Code Online (Sandbox Code Playgroud)

实现回调

- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data
Run Code Online (Sandbox Code Playgroud)

哪个会给你deviceModel字符串.