Bonjour nasıl kullanılır?


26
  1. Birincisi, Bonjour tam olarak ne yapar (tahminleri aşağıda yazılı olarak okudum)?
    Burada Bonjour'un IP ağlarındaki bilgisayarların, cihazların ve hizmetlerin otomatik olarak bulunmasını sağladığını öğrendim. Ancak sadece "IP ağındaki cihazları keşfetme" değil, aynı zamanda Bonjour'un çalıştığı cihazlara IP adresleri atayarak bir IP ağı yarattığını düşündüm. Haklı mıyım

  2. Ve hala özü özlüyorum. Aşağıdaki şekilde çalışıyor mu? Öncelikle cihazları (örneğin dizüstü bilgisayarları) fiziksel olarak bağlarım, böylece potansiyel olarak birbirleriyle iletişim kurabilirler. Sonra, bazı dizüstü bilgisayarlarda Bonjour'un çalıştığını söyleyebilirim ve bunun sonucunda, bu dizüstü bilgisayarlar kendilerine otomatik olarak IP adresleri atar. Böylece, dizüstü bilgisayarlar (Bonjour'un çalıştığı yer) bir IP ağı kurar. Bu şekilde çalışıyor mu?

  3. Veya Bonjour çalıştıran bir bilgisayar olabilir bir hizmet olarak kabul edilmez ve sadece Bonjour bu bilgisayarda çalıştığı için kendisini yayınlamaz. Yani bilgisayarlarda çalışan uygulamaların kendilerini yayınlamak için Bonjour kullanmaları gerekiyor. Dolayısıyla, kendilerini yayınlayan uygulamalardır (bilgisayar değil) ve otomatik olarak yapılmaz (uygulamanın kendilerini açık bir şekilde yayınlaması gerekir). Doğru mu?

  4. Başvurum tam olarak kendini nasıl yayınlayabilir? Bir hizmeti kaydetmek için komut satırını kullanabilir miyim (böylece Bonjour kullanan tüm uygulamalar yeni bir servisin göründüğünü bilir)?

  5. Ayrıca, Bonjour tarafından oluşturulan IP ağını kullanan bir uygulamaya sahip olmak istiyorum. Bunun için başvurumun ağda hangi cihazların / hizmetlerin bulunduğunu bilmesi gerekiyor. Daha ayrıntılı olarak, başvurumun bir servis listesine sahip olması gerekir. Listedeki her hizmetin bir adı, çalıştığı IP adresi ve uygulama tarafından kullanılan bağlantı noktası olmalıdır. Bonjour bu bilgiyi bir şekilde sağlayabilir mi? Bu durumda, tam olarak nasıl çalışır. Programım bu bilgiyi Bonjour'dan nasıl alabilir? Programım Bonjour tarafından oluşturulan ve yukarıda belirtilen bilgileri içeren bir dosyayı okuyabilir mi? Bu bilgiyi almak için bazı komutları komut satırında kullanabilir miyim?

  6. Servisler hakkındaki bilgilere dosyalardan, ortam değişkenlerinden veya komut satırındaki komutlardan erişim konusunda özel bir ilgim var. Bu seçenekler bana en basit gibi görünüyor! Bu durumda, belirli bir programlama dilinden Bonjour ile iletişim kurmak için herhangi bir ek kitaplık kullanmam gerekmiyor.

PS Pleas, benim sorumla açık olmayan bir şey varsa sorular sorun. Sorumu daha net bir şekilde formüle etmeye çalışacağım.

PPS Windows 7 kullanıyorum .

EKLENDİ: Uygulamalarımı PHP dilinde yazmayı düşünüyorum. Her bilgisayar bir Apache web sunucusu çalıştırmalıdır. Ve bilgisayarın birbirlerini keşfetmesine yardımcı olmak için Bonjour'u kullanmak istiyorum (bilgisayarlar yerel bir ağda çalışıyor).

Yanıtlar:


54
  1. Evet. IETF ZeroConf çalışma grubunun eş başkanlığını da yapan ve Apple’daki Rendezvous / Bonjour’un öncülüğünü yapan ve Zero Configuration Networking’e O'Reilly kitabını yazan Stuart Cheshire, Bonjour’u “üç - bacaklı taburede bacakların:

    1. IPv4 (ve IPv6) yerel bağlantı adresleme
    2. Çok Noktaya Yayın Adı Çözünürlüğü (mDNS)
    3. DNS Servis Keşfi (DNS-SD)

    IETF ZeroConf çalışma grubu ve Apple hem yerel bağlantı adreslemesini, hem de IPv4 yerel bağlantı adresini ( 169.254.0.0/16adresleri) ZeroConf / Bonjour’un bir parçası olarak kabul ederler;

    Windows'un zaten Apple'ın Bonjour for Windows yazılımı yüklü olmasa bile otomatik yerel bağlantı adreslemeyi desteklediğinden, birçok Windows kullanıcısının IPv4 yerel bağlantı adreslemesinin Bonjour / ZeroConf'un bir parçası olduğunu düşünmediğini unutmayın.

  2. Evet. Mac'ler ve Windows makineleri, varsayılan olarak, DHCP için yapılandırılmışlarsa, ancak DHCP sunucusu yoksa, IPv4 yerel bağlantı adreslemesi yapar. Avahi (veya muhtemelen diğer ZeroConf uygulamaları) yüklü Linux ve BSD makineleri de bunu yapacak.

  3. Bir bilgisayar Bonjour kullanıyorsa, ana bilgisayar adı LAN'da mDNS aracılığıyla yayınlanır. Makinenizin adı “Alice” ise, Alice.localmDNS yoluyla olacaktır . Aynı yerel ağdaki başka bir bilgisayardan (buna “Bob” diyelim) (özellikle, aynı yerel bağlantı yayını etki alanındaki etki alanında), basitçe yazabilmelisiniz ping Alice.localve Bob, Alice.localAlice'in IP adresini bulmak için bir mDNS araması yapmalıdır ( es) ve geri aldığı adres (ler) den ping (biri).

    Ancak Bonjour'un ana bilgisayar adları ve hizmet adları arasında ayrım yaptığını unutmayın. Örneğin, iki ayrı USB yazıcınız varsa, diyelim ki Alice'e bağlı “HP” ve “Canon” ve Alice, lprher ikisi için de bir baskı sunucusu olarak davranıyorsa , her biri kendi hizmetleri olarak görünebilir. , hangi Alice.localana bilgisayar olarak geri eşler .

    Hizmet adları, kullanıcıya Alice'ten bahsetmeden “HP” ve “Canon” olarak görünür. Sahnelerin arkasında, bunlar olarak bilinir HP._printer._tcp.localve Canon._printer._tcp.localbu hizmet adlarına ilişkin DNS-SD aramaları, bu hizmetlerin Alice.localiki farklı TCP bağlantı noktasında kullanılabileceğini gösterir.

    Bu yüzden evet, başvurular Bonjour arka planını ( mDNSResponderApple'ın uygulamasında adı verilen ) reklam vermek istedikleri hizmetlere sahip olduklarını bildirmelidir. macOS, yerel olarak Bonjour’un farkında olmayan eski servisler için servis reklamlarını otomatik olarak işleyebilecek mekanizmalara sahiptir. Örneğin, macOS'lar sshddoğrudan Bonjour'u desteklemeyen OpenSSH'dir, ancak macOS sshhizmeti yalnızca ssh username@Alice.localLAN üzerindeki diğer makinelerden alabilmeniz için Bonjour üzerinden reklam vermeye özen gösterir .

  4. MacOS'ta, bu sözdizimini kullanarak bir hizmeti kaydedebilen bir "dns-sd" komut satırı aracı vardır:

    dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]  
    # (Register a service)
    

    Yani örneğin:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Windows için Bonjour'a veya Windows için Bonjour SDK'ya dahil edilmişse veya Windows için Apple'ın mDNSResponder açık kaynaklı projesinden derleyebilirseniz şaşırmam . Googling dns-sd.exe, böyle bir şey var görüyorum. Bunun için sadece bir ikili dosya indirebileceğimden emin değilim. Bunun yerine, yukarıda belirtilen paketlerden birinden almaya çalışacağım ya da kendimi mDNSResponder proje kaynaklarından derleyeceğim.

  5. dns-sdKomut satırı aracını servislere göz atmak ve aramak için de kullanabilirsiniz . Yerel bir web servisine bakmanın bir örneği:

    Şununla yerel web servislerine göz atın -B:

    $ dns-sd -B _http._tcp local  
    Browsing for _http._tcp.local  
    Timestamp     A/R Flags if Domain                    Service Type              Instance Name  
    16:30:59.870  Add     3  6 local.                    _http._tcp.               My Cool Web App  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               Someone Else's Web Service  
    16:30:59.871  Add     3  6 local.                    _http._tcp.               A Third One  
    ^C
    

    İstediğim şeye, "Cool Web Uygulamam" bölümüne bakınız -L:

    $ dns-sd -L "My Cool Web App" _http._tcp local  
    Lookup My Cool Web App._http._tcp.local  
    16:31:52.678  My\032Cool\032Web\032App._http._tcp.local. can be reached at MyWebServer.local.:80 (interface 6)  
    ^C  
    

    MyWebServer.local için IP adreslerini sorgulayın -Q:

    $ dns-sd -Q MyWebServer.local  
    Timestamp     A/R Flags if Name                             T   C Rdata  
    16:32:40.786  Add     2  6 MyWebServer.local.               1   1 169.254.45.209  
    ^C  
    

    Bu örneklerde Ctrl-C, dns-sdaletten çıkmanız gerektiğini unutmayın . Aksi taktirde sonsuza kadar açık kalacaktır, sürekli olarak ağı izlemekte ve yayınladığınız sorgunun sonuçlarındaki herhangi bir değişikliği rapor etmektedir (bir -Bgöz atma sorgusu açıkken otururken ağa gelen ve giden web sunucuları gibi ). Bunun ve diğer nedenlerden dolayı, dns-sdaracın bir komut dosyasından çağrılmak için uygun olmadığını buldum . ZeroConf'un tercih ettiğiniz dil için neleri kütüphanelediğine bakmak isteyebilirsiniz.

Diğer sorularınızdan birini yanıtlamak için, sadece dosyaları okuyarak / yazarak sorgulama yapmanıza ve sonuç almanıza izin veren herhangi bir ZeroConf uygulamasının farkında değilim. Bonjour kullanan çoğu uygulama bunu doğrudan API'leri (C / C ++ / Obj-C / Swift uygulamaları) ya da dile özgü bir kitaplık (tercüman / komut dosyası dilleri) kullanarak yapar.


Bonjour / Zeroconf'un en iyi açıklaması gördüm. Wikipedia makalesine bazı katkılarda bulunmalısın :)
Kamil Kisiel

Bu kadar güzel tamamlandığında ancak DNS kayıtları nasıl kullanıldığına genişletmek istiyorsanız çalmaya çekinmeyin serverfault.com/questions/18565/...
andrewtj

4

Birincisi, Bonjour tam olarak ne yapar (tahminleri aşağıda yazılı olarak okudum)? Burada Bonjour'un IP ağlarındaki bilgisayarların, cihazların ve hizmetlerin otomatik olarak bulunmasını sağladığını öğrendim. Ancak sadece "IP ağındaki cihazları keşfetme" değil, aynı zamanda Bonjour'un çalıştığı cihazlara IP adresleri atayarak bir IP ağı yarattığını düşündüm. Haklı mıyım

Tam değil; Jon'un işaret ettiği gibi, DHCP (genellikle) IP adreslerini tahsis etmek için kullanılır. Sıradan DNS'nin alan adlarını IP adreslerine çevirdiği gibi, Bonjour geçici alan adlarını (yerel ağ içinde) bunları sağlayan IP adreslerine çevirmek için kullanılır.

Ve hala özü özlüyorum. Aşağıdaki şekilde çalışıyor mu? Öncelikle cihazları (örneğin dizüstü bilgisayarları) fiziksel olarak bağladım, böylece potansiyel olarak birbirleriyle iletişim kurabilirler. Sonra, bazı dizüstü bilgisayarlarda Bonjour'un çalıştığını söyleyebilirim ve bunun sonucunda, bu dizüstü bilgisayarlar kendilerine otomatik olarak IP adresleri atar. Böylece, dizüstü bilgisayarlar (Bonjour'un çalıştığı yer) bir IP ağı kurar. Bu şekilde çalışıyor mu?

Hayır; dizüstü bilgisayarlar çoğunlukla IP adreslerini yerel bir DHCP sunucusundan alıyorlar. Bonjour, her birinin diğerlerine ne gibi hizmetler sağlayabileceklerini anlamalarına yardımcı olur.

Veya Bonjour çalıştıran bir bilgisayar olabilir bir hizmet olarak kabul edilmez ve sadece Bonjour bu bilgisayarda çalıştığı için kendisini yayınlamaz. Yani bilgisayarlarda çalışan uygulamaların kendilerini yayınlamak için Bonjour kullanmaları gerekiyor. Dolayısıyla, kendilerini yayınlayan uygulamalardır (bilgisayar değil) ve otomatik olarak yapılmaz (uygulamanın kendilerini açık bir şekilde yayınlaması gerekir). Doğru mu?

Evet - genel olarak, başvurunuzun varlığının açıkça ilan edilmesi gerekir. Bu genellikle sistem tarafından sağlanan kütüphaneler (OS X'te ortak) veya özel kütüphaneler (örneğin perl's Net :: Bonjour) kullanılarak yapılabilir.

Başvurum tam olarak kendini nasıl yayınlayabilir? Bir hizmeti kaydetmek için komut satırını kullanabilir miyim (böylece Bonjour kullanan tüm uygulamalar yeni bir servisin göründüğünü bilir)

Bunu yapan bir komut satırı aracından haberdar değilim, ancak birçok büyük programlama dilinde bunu yapabilmek için kütüphaneler var.

Ayrıca, Bonjour tarafından oluşturulan IP ağını kullanan bir uygulamaya sahip olmak istiyorum. Bunun için başvurumun ağda hangi cihazların / hizmetlerin bulunduğunu bilmesi gerekiyor. Daha ayrıntılı olarak, başvurumun bir servis listesine sahip olması gerekir. Listedeki her hizmetin bir adı, çalıştığı IP adresi ve uygulama tarafından kullanılan bağlantı noktası olmalıdır. Bonjour bu bilgiyi bir şekilde sağlayabilir mi?

Bonjour kütüphanelerinin çoğu bunu sizin için yapabilmelidir; http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm adresindeki ilk örneğe bakın

Bu durumda, tam olarak nasıl çalışır. Programım bu bilgiyi Bonjour'dan nasıl alabilir? Programım Bonjour tarafından oluşturulan ve yukarıda belirtilen bilgileri içeren bir dosyayı okuyabilir mi? Bu bilgiyi almak için bazı komutları komut satırında kullanabilir miyim?

Uygun kütüphaneleri kullanarak, program, yerel ağınızdaki diğer tüm bilgisayarlara hangi hizmetlere sahip olduklarını söylemelerini istemek için Bonjour protokolünü kullanır. Bu kütüphane daha sonra cevapları ayrıştırır ve size daha yararlı bir biçimde sunar.

Servisler hakkındaki bilgilere dosyalardan, ortam değişkenlerinden veya komut satırındaki komutlardan erişim konusunda özel bir ilgim var. Bu seçenekler bana en basit gibi görünüyor! Bu durumda, belirli bir programlama dilinden Bonjour ile iletişim kurmak için herhangi bir ek kitaplık kullanmam gerekmiyor.

Bunu yapan bir aracın farkında değilim, ancak mevcut olabilir.

PS Pleas, benim sorumla açık olmayan bir şey varsa sorular sorun. Sorumu daha net bir şekilde formüle etmeye çalışacağım.

Yazdığınız programın ne yapacağı ve hangi dilde yazdığınız hakkında daha fazla bilgi yardımcı olmanızı kolaylaştıracaktır.

Daha fazla tanıtım bilgisi için ikisini de deneyin:


caelyx, asıl sorumun sonuna sizin tarafınızdan istenen bilgileri ekledim.
Roman

caelyx, Bonjour'un IP adresleri tahsis etmediğini yazdınız: "DHCP (genellikle) IP adreslerini tahsis etmek için kullanılır". Ancak Bonjour, ZeroConf protokolünü uygular ve ZeroConf protokolünün temel teknolojilerinden biri (wikipedia'ya göre) "Ağa bağlı cihazlar için sayısal ağ adreslerinin atanması (yerel bağlantı adresi otomatik yapılandırma)" dır.
Roman

DHCP / BootP sunucusu olmayan IPv4 ağlarında, ana bilgisayarlar kendilerini 168. * adresleri atayacaklardır. Bonjour bu adreslerle doğru çalışıyor. Ya bu ya da IPv6 Link-Local adreslerine gönderme yapıyor
jdizzle

3

Bonjour IP adresleri atamaz - bu bir keşif protokolü - çalışması için hala DHCP / Statik / Link-Yerel (APIPA) IP adreslerine ihtiyacınız var.

Hangi ana makinenin kendisi ile aynı yayın etki alanında bulunduğunu bulmak için çok noktaya yayın DNS (mDNS) kullanır ve esasen kendi DNS sunucusu olur.

Aşağı indirme için Bonjour & Zeroconf'a bakınız .

Uygulamanız bir ev / yönetilmeyen ağ için değilse, yerel bir DNS sunucusundan yoksun olmanız yeterli değildir.


ZeroConf IP adresi atamıyor mu?
Gobliins,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.