2010-11-30 16 views
12

Apple's Finder.app, bonjour kullanan her bir fiziksel bilgisayarın kesin modelini tutarlı bir şekilde belirleyebilir (her bir cihaz türü için benzersiz olan simgelerin kanıtladığı gibi: iMac, MacPro, MBP, vb.). Bunu nasıl yapıyorlar ve hangi API'ları kullanıyorlar?Ağa bağlı bir aygıt için "model adını" nasıl edinebilirim (potansiyel olarak Bonjour'u kullanıyor)?

Bir yan notta, Bonjour ağdaki tüm hizmetler için Ad, Hizmet Türü, Etki Alanı ve Bağlantı Noktası sağlar - ancak aygıt modelinin kendisini nasıl bulacağına dair bilgi bulamadım.

cevap

12

Bunun, _device-info._tcp dosyasını kullandığına inanıyorum. IP adresi için mDNS kaydı. Bunu kendin görebilirsin. Terminalde, mDNS isteklerini gerçekleştirmek için dig @224.0.0.251 -p5353'u kullanabilirsiniz. Foo.local bilgisayarının IP adresini çözmek için dig @224.0.0.251 -p5353 Foo.local.'u kullanabilirsiniz. O IP'yi al ve dig @224.0.0.251 -p5353 -x $IP geri takın ve aşağıdaki gibi bir şey göreceksiniz:

> 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 

Bildirimi EK BÖLÜM.

Ne yazık ki, Bonjour API'lerini kullanarak bu bilgilere nasıl ulaşacağımı bilmiyorum.

Düzenle: Ayrıca bu bilgiyi dig @224.0.0.251 -p5353 Foo._device-info._tcp.local. TXT ile tek bir sorguda alabilirsiniz.

+0

teşekkürler bu çok güzel! Bir başkasının aynı sorunu olması durumunda, modeli şu şekilde kullanabilirsiniz: dig @ 224.0.0.251 -p5353 BigMac._device-info._tcp.local. TXT | grep modeli | awk '{print $ 5}' | sed -e 's/"model = //; s /" //' Eğer birisi Apple'ın API'lerini kullanarak bunu nasıl yapacağını biliyorsa, hala bununla ilgileniyorum. –

+0

bu, ağımdaki tüm Apple donanımları için iyi çalışıyor, ancak _printer._tcp altında kendisini duyuran bir "Brother DCP-8085DN" yazıcısı için çalışıyor. "Bağlantı zaman aşımına uğradı, sunucuya ulaşılamıyor" - lütfen işe ne zaman çalışmayı beklemem gerekir? Teşekkürler!!! –

+0

Apple dişli için çalışmasını beklemelisiniz. Büyük olasılıkla başka bir cihaz bunu desteklemez, ancak bu gerçekten cihaza bağlıdır. Görünen o ki, bu model gibi ekstra veriler yerine, yazıcı bilgilerinin (yazıcı ikonunu görüntülemek için kullanılan) uygun bonjour servisi için TXT kaydının bir parçası olarak verildiğini hayal ediyorum. –

7

OSX bu makinede belirli ağ hizmetleri çalışıyorsa bu bilgiyi yayınlıyor. Benim bilgi için bunlar _afpovertcp, _rfb ve _airport (sadece havaalanı yönlendiricisi). _device-info._tcp adlı bir bonjour hizmetini arıyorsunuz. Sorun şu Yerine size _device-info._tcp yayın düşünüyorum belirli bir ana bilgisayar izleme başlamak gerekir basit

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

aracılığıyla görünmüyorsa olmasıdır.

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

size devicemodel dize verecektir geri arama

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

uygulamak.

İlgili konular