12

Apple の Finder.app は、bonjour を使用する各物理コンピューターの正確なモデルを一貫して判別できます (個々のデバイス タイプ (iMac、MacPro、MBP など) ごとに固有のアイコンによって証明されます)。彼らはこれをどのように行い、どの API を使用していますか?

余談ですが、Bonjour はネットワーク上のすべてのサービスの名前、サービス タイプ、ドメイン、およびポートを提供しますが、デバイス モデル自体を見つける方法に関する情報を見つけることができませんでした。

4

2 に答える 2

12

これは_device-info._tcpを使用していると思います。IP アドレスの mDNS レコード。これは自分の目で確かめてください。ターミナルでは、dig @224.0.0.251 -p5353mDNS リクエストを実行するために使用できます。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 に答える