2010-11-30 9 views
12

ऐप्पल का Finder.app लगातार भौतिक कंप्यूटर का सटीक मॉडल निर्धारित करने में सक्षम है जो बोनजोर का उपयोग करता है (जैसा कि प्रत्येक व्यक्तिगत डिवाइस प्रकार के लिए अद्वितीय होने वाले आइकन द्वारा प्रमाणित किया गया है: iMac, MacPro, MBP, आदि)। वे यह कैसे करते हैं और वे किस एपीआई का उपयोग करते हैं?मैं नेटवर्क किए गए डिवाइस (संभावित रूप से बोनजोर का उपयोग करके) के लिए "मॉडल नाम" कैसे प्राप्त करूं?

एक तरफ ध्यान दें, बोनजोर नेटवर्क पर सभी सेवाओं के लिए नाम, सेवा प्रकार, डोमेन और पोर्ट प्रदान करता है - लेकिन मैं डिवाइस मॉडल को कैसे ढूंढूं इस बारे में जानकारी नहीं पा रहा हूं।

उत्तर

12

मेरा मानना ​​है कि यह _device-info._tcp का उपयोग करता है। आईपी ​​पते के लिए एमडीएनएस रिकॉर्ड। आप इसे अपने लिए देख सकते हैं। टर्मिनल में, आप एमडीएनएस अनुरोध करने के लिए dig @224.0.0.251 -p5353 का उपयोग कर सकते हैं। आप Foo.local कंप्यूटर के आईपी पते को हल करने के लिए dig @224.0.0.251 -p5353 Foo.local. का उपयोग कर सकते हैं। कि आईपी ले लो और उसे वापस प्लग 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 Foo._device-info._tcp.local. TXT के साथ एक ही क्वेरी में भी प्राप्त कर सकते हैं।

+0

धन्यवाद कि बहुत अच्छा है! अगर किसी और के पास एक ही समस्या है, तो आप इसका उपयोग कर मॉडल चुन सकते हैं: dig @ 224.0.0.251 -p5353 BigMac._device-info._tcp.local। TXT | grep मॉडल | awk '{print $ 5}' | sed -e's/"model = //; s /" // ' अगर कोई जानता है कि ऐप्पल के एपीआई का उपयोग करके इसे कैसे किया जाए तो मुझे अभी भी इसमें दिलचस्पी है। –

+0

यह मेरे नेटवर्क पर सभी ऐप्पल गियर के लिए ठीक काम करता है, लेकिन "ब्रदर डीसीपी -8085 डीएन" प्रिंटर के लिए _printer._tcp के तहत खुद को घोषित करता है। मुझे "कनेक्शन का समय समाप्त हो गया है, कोई सर्वर नहीं पहुंचा जा सकता" - क्या आप कृपया कुछ जानकारी प्रदान कर सकते हैं कि मुझे कब काम करने की उम्मीद करनी चाहिए? धन्यवाद!!! –

+0

आपको ऐप्पल गियर के लिए काम करने की उम्मीद करनी चाहिए। अधिकतर कोई अन्य डिवाइस इसका समर्थन नहीं करता है, लेकिन यह वास्तव में डिवाइस पर निर्भर है। मुझे लगता है कि इस मॉडल की तरह अतिरिक्त डेटा स्पष्ट रूप से है, इसके बजाय प्रिंटर जानकारी (प्रिंटर आइकन प्रदर्शित करने के लिए प्रयुक्त) उचित बोनौर सेवा के लिए TXT रिकॉर्ड के हिस्से के रूप में दिया जाता है। –

7

ओएसएक्स इस जानकारी को प्रसारित कर रहा है अगर इस मशीन पर कुछ नेटवर्क सेवाएं चल रही हैं। मेरे ज्ञान के लिए ये _afpovertcp, _rfb और _airport (केवल पाठ्यक्रम राउटर) हैं। आप _device-info._tcp नामक एक बोनजोर सेवा की तलाश में हैं। मुसीबत यह है कि यह एक सरल

[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 स्ट्रिंग दे देंगे को लागू करें।

संबंधित मुद्दे

 संबंधित मुद्दे