Macos 我如何获得;型号名称“;对于联网设备(可能使用Bonjour)?

Macos 我如何获得;型号名称“;对于联网设备(可能使用Bonjour)?,macos,networking,bonjour,Macos,Networking,Bonjour,苹果的Finder.app能够始终如一地确定使用bonjour的每台物理计算机的确切型号(每个设备类型的图标都是唯一的:iMac、MacPro、MBP等)。他们是如何做到这一点的?他们使用什么API 另一方面,Bonjour为网络上的所有服务提供名称、服务类型、域和端口,但我无法找到有关如何查找设备型号本身的信息。我相信这使用了_device-info.\u tcp。IP地址的mDNS记录。你可以亲自看看。在终端中,您可以使用dig@224.0.0.251-p5353执行mDNS请求。您可以使用

苹果的Finder.app能够始终如一地确定使用bonjour的每台物理计算机的确切型号(每个设备类型的图标都是唯一的:iMac、MacPro、MBP等)。他们是如何做到这一点的?他们使用什么API


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

我相信这使用了_device-info.\u 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
>dig@224.0.0.251-p5353-x10.0.1.1
;  挖掘9.6.0-APPLE-P2@224.0.0.251-p5353-x10.0.1.1
; (找到1台服务器)
;; 全局选项:+cmd
;; 得到答案:

;; ->>HEADEROSX正在广播此信息,如果此计算机上正在运行某些网络服务。据我所知,这些是_afpovertcp、_rfb和_airport(当然仅限于机场路由器)。您正在寻找一个名为_device-info._tcp的“你好”服务。问题是,它不是通过一个简单的

[someNSNetServiceBrowserInstance searchForServicesOfType:@"_services._dns-sd._udp." inDomain:@""];
相反,您需要开始监视您认为可以广播设备信息的特定主机

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

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

这将为您提供设备模型字符串。

谢谢,太酷了!如果其他人有同样的问题,您可以使用:dig@224.0.0.251-p5353 BigMac.\u device-info.\u tcp.local来选择模型。TXT | grep model | awk{print$5}| sed-e's/“model=/;s/”/“如果有人知道如何使用苹果的API来实现这一点,我仍然对此感兴趣。这对我网络上的所有苹果设备都很好,但对于在| u printer |下宣布自己的“Brother DCP-8085DN”打印机。我得到“连接超时;无法连接到服务器”-您能提供一些我希望dig什么时候工作的信息吗?谢谢你应该期待它能为Apple gear工作。很可能没有其他设备支持它,但这取决于设备。我想象打印机信息(用于显示打印机图标)是作为相应bonjour服务的TXT记录的一部分提供的,而不是像这种型号的额外数据。macOS Sierra似乎没有给出任何
\u device-info
bonjour条目,即使服务已打开。@adib我刚刚在运行OS X 10.12.3(16D32)的笔记本电脑上进行了测试,我仍然看到它:
Kefka.\u device-info.\u tcp.local。10英寸TXT“model=MacBookPro11,4”osxvers=16”