Bagaimana cara menggunakan Bonjour?

26
  1. Pertama, apa yang dilakukan Bonjour (permohonan membaca tebakan saya di bawah)?
    Di sini saya menemukan bahwa Bonjour memungkinkan penemuan otomatis komputer, perangkat, dan layanan pada jaringan IP. Tapi saya pikir itu tidak hanya "menemukan perangkat di jaringan IP" tetapi juga membuat jaringan IP dengan menetapkan alamat IP ke perangkat tempat Bonjour berjalan. Apakah saya benar?

  2. Dan saya masih merindukan esensinya. Apakah ini bekerja dengan cara berikut? Pertama saya menghubungkan perangkat (misalnya laptop) secara fisik sehingga mereka berpotensi dapat berkomunikasi satu sama lain. Kemudian, katakanlah, pada beberapa laptop saya menjalankan Bonjour dan kemudian, sebagai konsekuensinya, laptop ini memberikan alamat IP kepada mereka secara otomatis. Jadi, laptop (tempat Bonjour berjalan) membangun jaringan IP. Apakah ini bekerja dengan cara ini?

  3. Atau mungkin komputer yang menjalankan Bonjour tidak dianggap sebagai layanan dan tidak disiarkan sendiri hanya karena Bonjour berjalan di komputer ini. Maksud saya aplikasi yang berjalan di komputer harus menggunakan Bonjour untuk menyiarkannya sendiri. Jadi, itu adalah aplikasi yang menyiarkan sendiri (bukan komputer) dan itu tidak dilakukan secara otomatis (aplikasi perlu menyiarkan sendiri secara eksplisit). Apakah tepat?

  4. Bagaimana tepatnya aplikasi saya dapat menyiarkannya sendiri? Dapatkah saya menggunakan baris perintah untuk mendaftarkan layanan (sehingga semua aplikasi menggunakan Bonjour tahu bahwa layanan baru muncul)?

  5. Lebih lanjut, saya ingin memiliki aplikasi yang menggunakan jaringan IP yang dibuat oleh Bonjour. Untuk itu aplikasi saya perlu tahu perangkat / layanan mana yang ada dalam jaringan. Secara lebih rinci, aplikasi saya perlu memiliki daftar layanan. Setiap layanan dalam daftar harus memiliki nama, alamat IP di mana ia berjalan dan port yang digunakan oleh aplikasi. Bisakah Bonjour memberikan informasi ini dengan cara tertentu? Jika ini masalahnya, bagaimana tepatnya kerjanya. Bagaimana program saya bisa mendapatkan informasi ini dari Bonjour? Bisakah program saya membaca beberapa file yang dibuat oleh Bonjour dan berisi informasi yang disebutkan di atas? Bisakah saya menggunakan beberapa perintah di baris perintah untuk mengambil informasi ini?

  6. Saya memiliki minat khusus dalam mengakses informasi tentang layanan dari file, variabel lingkungan atau perintah di baris perintah. Menurut saya, opsi-opsi ini adalah yang paling sederhana! Karena dalam hal ini saya tidak perlu menggunakan perpustakaan tambahan untuk berkomunikasi dengan Bonjour dari bahasa pemrograman tertentu.

PS Pleas mengajukan pertanyaan jika ada sesuatu yang tidak jelas dalam pertanyaan saya. Saya akan mencoba merumuskan pertanyaan saya dengan cara yang lebih jelas.

PPS saya menggunakan Windows 7 .

TAMBAH: Saya berencana untuk menulis aplikasi saya di PHP. Setiap komputer harus menjalankan server web Apache. Dan saya ingin menggunakan Bonjour untuk membantu komputer menemukan satu sama lain (komputer bekerja di jaringan lokal).

Roma
sumber

Jawaban:

54
  1. Iya nih. Stuart Cheshire, yang merupakan pencipta dan merupakan pemelihara utama Rendezvous / Bonjour di Apple, yang juga ikut memimpin kelompok kerja IETF ZeroConf, dan menulis buku O'Reilly tentang Zero Configuration Networking, menggambarkan Bonjour sebagai "tiga- kursi berkaki ”di mana kaki berada:

    1. Pengalamatan tautan-lokal IPv4 (dan IPv6)
    2. Resolusi Nama Multicast (mDNS)
    3. Penemuan Layanan DNS (DNS-SD)

    Kelompok kerja IETF ZeroConf dan Apple keduanya menganggap pengalamatan tautan-lokal, terutama pengalamatan tautan-lokal IPv4 ( 169.254.0.0/16alamat) sebagai bagian dari ZeroConf / Bonjour, meskipun pengalamatan tautan-lokal dikirim bertahun-tahun sebelum dua “kaki tinja” lainnya.

    Perhatikan bahwa karena Windows sudah mendukung pengalamatan tautan-lokal otomatis bahkan tanpa Bonjour untuk perangkat lunak Windows diinstal, banyak pengguna Windows tidak menganggap pengalamatan tautan-lokal IPv4 sebagai bagian dari Bonjour / ZeroConf.

  2. Iya nih. Mesin Mac dan Windows, secara default, melakukan pengalamatan tautan-lokal IPv4 jika dikonfigurasi untuk DHCP tetapi tidak ada server DHCP yang tersedia. Mesin Linux dan BSD dengan Avahi (atau mungkin implementasi ZeroConf lainnya) yang diinstal juga akan melakukan ini.

  3. Jika komputer menjalankan Bonjour, nama hostnya dipublikasikan di LAN melalui mDNS. Jika nama mesin Anda adalah "Alice", itu akan Alice.localmelalui mDNS. Dari komputer lain (sebut saja "Bob") pada LAN yang sama (khususnya, pada domain multicast tautan-lokal yang sama), Anda harus dapat mengetik ping Alice.local, dan Bob harus melakukan pencarian mDNS Alice.localuntuk menemukan alamat IP Alice ( es), dan ping (salah satu) alamat itu kembali.

    Perhatikan, bagaimanapun, bahwa Bonjour membedakan antara nama host dan nama layanan. Misalnya, jika Anda memiliki dua printer USB yang terpisah, katakanlah "HP" dan "Canon", terhubung ke Alice, dan Alice bertindak sebagai, katakanlah, lprserver cetak untuk keduanya, mereka masing-masing dapat muncul sebagai layanan mereka sendiri , yang memetakan kembali Alice.localsebagai tuan rumah.

    Nama layanan mereka akan ditampilkan kepada pengguna sebagai "HP" dan "Canon" tanpa menyebutkan Alice. Di belakang layar, mereka akan dikenal sebagai HP._printer._tcp.localdan Canon._printer._tcp.local, dan pencarian DNS-SD pada nama-nama layanan akan menunjukkan bahwa layanan tersebut tersedia Alice.localpada dua port TCP yang berbeda.

    Jadi ya, aplikasi harus memberi tahu Daemon Bonjour (dipanggil mDNSResponderdalam implementasi Apple) bahwa mereka memiliki layanan yang ingin mereka iklankan. macOS memiliki mekanisme untuk secara otomatis menangani iklan layanan untuk layanan lawas yang tidak sadar Bonjour. Sebagai contoh, macOS's sshdadalah OpenSSH, yang tidak mendukung Bonjour secara langsung, tetapi macOS menangani pengiklanan sshlayanan melalui Bonjour sehingga Anda dapat hanya ssh [email protected]dari komputer lain di LAN.

  4. Di macOS, ada alat baris perintah "dns-sd" yang dapat mendaftarkan layanan menggunakan sintaks ini:

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

    Jadi misalnya:

    dns-sd -R MyWebsite _http._tcp local 80
    

    Saya tidak akan terkejut jika disertakan dalam Bonjour untuk Windows, atau Bonjour SDK untuk Windows, atau jika Anda dapat mengompilasinya untuk Windows dari proyek open-source mDNSResponder Apple . Googling dns-sd.exe, saya melihat hal seperti itu ada. Saya tidak yakin saya hanya akan mengunduh biner untuk itu. Sebaliknya saya akan mencoba untuk mendapatkannya dari salah satu paket yang disebutkan di atas, atau kompilasi sendiri dari sumber proyek mDNSResponder.

  5. Anda juga dapat menggunakan dns-sdalat baris perintah untuk menelusuri layanan dan mencarinya. Berikut adalah contoh mencari layanan web lokal:

    Jelajahi layanan web lokal dengan -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
    

    Cari yang saya inginkan, "My Web Cool App", dengan -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  
    

    Permintaan alamat IP untuk MyWebServer.local, dengan -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  
    

    Perhatikan dalam contoh ini bahwa Anda harus Ctrl-Ckeluar dari dns-sdalat. Jika tidak, ia akan tetap terbuka selamanya, terus-menerus menonton jaringan dan melaporkan setiap perubahan dalam hasil kueri yang Anda keluarkan (seperti server web datang dan pergi di jaringan, saat Anda duduk dengan -Bpermintaan jelajah terbuka). Saya telah menemukan bahwa untuk alasan ini dan lainnya, dns-sdalat ini tidak cocok untuk dipanggil dari skrip. Anda mungkin ingin melihat apa yang perpustakaan ZeroConf untuk bahasa pilihan Anda setelah semua.

Untuk menjawab salah satu pertanyaan Anda yang lain, saya tidak mengetahui adanya implementasi ZeroConf yang memungkinkan Anda melakukan kueri dan mendapatkan hasil hanya dengan membaca / menulis file. Sebagian besar aplikasi yang menggunakan Bonjour melakukannya dengan memanggil API, baik secara langsung (C / C ++ / Obj-C / Swift apps) atau melalui pustaka khusus untuk bahasa (bahasa yang ditafsirkan / dituliskan).

Spiff
sumber
Penjelasan terbaik tentang Bonjour / Zeroconf yang pernah saya lihat. Anda harus berkontribusi pada artikel wikipedia :)
Kamil Kisiel
Ini cukup lengkap, tetapi jika Anda ingin memperluas tentang bagaimana catatan DNS digunakan, jangan ragu untuk mencuri dari serverfault.com/questions/18565/…
andrewtj
4

Pertama, apa yang dilakukan Bonjour (permohonan membaca tebakan saya di bawah)? Di sini saya menemukan bahwa Bonjour memungkinkan penemuan otomatis komputer, perangkat, dan layanan pada jaringan IP. Tapi saya pikir itu tidak hanya "menemukan perangkat di jaringan IP" tetapi juga membuat jaringan IP dengan menetapkan alamat IP ke perangkat tempat Bonjour berjalan. Apakah saya benar?

Tidak terlalu; seperti yang ditunjukkan Jon, DHCP (biasanya) digunakan untuk mengalokasikan alamat IP. Dalam banyak cara yang sama seperti DNS biasa menerjemahkan nama domain ke alamat IP, Bonjour digunakan untuk menerjemahkan nama domain sementara (dalam jaringan lokal) ke alamat IP yang menyediakannya.

Dan saya masih merindukan esensinya. Apakah ini bekerja dengan cara berikut? Pertama saya menghubungkan perangkat (misalnya laptop) secara fisik sehingga mereka berpotensi dapat berkomunikasi satu sama lain. Kemudian, katakanlah, pada beberapa laptop saya menjalankan Bonjour dan kemudian, sebagai konsekuensinya, laptop ini memberikan alamat IP kepada mereka secara otomatis. Jadi, laptop (tempat Bonjour berjalan) membangun jaringan IP. Apakah ini bekerja dengan cara ini?

Nggak; laptop sebagian besar kemungkinan mendapatkan alamat IP mereka dari server DHCP lokal. Bonjour hanya membantu mereka mencari tahu layanan apa yang masing-masing dapat berikan kepada yang lain.

Atau mungkin komputer yang menjalankan Bonjour tidak dianggap sebagai layanan dan tidak disiarkan sendiri hanya karena Bonjour berjalan di komputer ini. Maksud saya aplikasi yang berjalan di komputer harus menggunakan Bonjour untuk menyiarkannya sendiri. Jadi, itu adalah aplikasi yang menyiarkan sendiri (bukan komputer) dan itu tidak dilakukan secara otomatis (aplikasi perlu menyiarkan sendiri secara eksplisit). Apakah tepat?

Ya - umumnya, aplikasi Anda perlu mengiklankan keberadaannya secara eksplisit. Ini sering dapat dilakukan dengan menggunakan pustaka yang disediakan sistem (umum pada OS X) atau pustaka kustom (mis. Perl's Net :: Bonjour).

Bagaimana tepatnya aplikasi saya dapat menyiarkannya sendiri? Dapatkah saya menggunakan baris perintah untuk mendaftarkan layanan (sehingga semua aplikasi menggunakan Bonjour tahu bahwa layanan baru muncul)

Saya tidak mengetahui alat baris perintah yang melakukan ini, tetapi banyak bahasa pemrograman utama memiliki perpustakaan yang tersedia untuk melakukan ini.

Lebih lanjut, saya ingin memiliki aplikasi yang menggunakan jaringan IP yang dibuat oleh Bonjour. Untuk itu aplikasi saya perlu tahu perangkat / layanan mana yang ada dalam jaringan. Secara lebih rinci, aplikasi saya perlu memiliki daftar layanan. Setiap layanan dalam daftar harus memiliki nama, alamat IP di mana ia berjalan dan port yang digunakan oleh aplikasi. Bisakah Bonjour memberikan informasi ini dengan cara tertentu?

Sebagian besar perpustakaan Bonjour harus dapat melakukan ini untuk Anda; lihat contoh pertama di http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm

Jika demikian, bagaimana tepatnya kerjanya. Bagaimana program saya bisa mendapatkan informasi ini dari Bonjour? Bisakah program saya membaca beberapa file yang dibuat oleh Bonjour dan berisi informasi yang disebutkan di atas? Bisakah saya menggunakan beberapa perintah di baris perintah untuk mengambil informasi ini?

Menggunakan perpustakaan yang sesuai, program ini menggunakan protokol Bonjour untuk meminta semua komputer lain di jaringan lokal Anda untuk memberi tahu layanan apa yang mereka miliki. Pustaka itu kemudian akan mem-parsing respons dan menyajikannya kepada Anda dalam format yang lebih berguna.

Saya memiliki minat khusus dalam mengakses informasi tentang layanan dari file, variabel lingkungan atau perintah di baris perintah. Menurut saya, opsi-opsi ini adalah yang paling sederhana! Karena dalam hal ini saya tidak perlu menggunakan perpustakaan tambahan untuk berkomunikasi dengan Bonjour dari bahasa pemrograman tertentu.

Saya tidak mengetahui alat yang melakukan ini, tetapi mungkin ada.

PS Pleas mengajukan pertanyaan jika ada sesuatu yang tidak jelas dalam pertanyaan saya. Saya akan mencoba merumuskan pertanyaan saya dengan cara yang lebih jelas.

Beberapa informasi lebih lanjut tentang program apa yang Anda tulis akan lakukan, dan bahasa apa yang Anda tulis, akan membuatnya lebih mudah untuk membantu.

Untuk informasi lebih lanjut, coba keduanya:

Caelyx
sumber
Caelyx, saya menambahkan informasi yang diperlukan oleh Anda ke akhir pertanyaan awal saya.
Roman
caelyx, Anda menulis bahwa Bonjour tidak menetapkan alamat IP: "DHCP (biasanya) digunakan untuk mengalokasikan alamat IP". Tetapi Bonjour mengimplementasikan protokol ZeroConf dan salah satu teknologi inti dari protokol ZeroConf (menurut wikipedia) adalah "Penugasan alamat jaringan numerik untuk perangkat jaringan (konfigurasi alamat lokal autoconfiguration)".
Roman
Pada jaringan IPv4 tanpa server DHCP / BootP, host akan menetapkan sendiri alamat 168. *. Bonjour bekerja dengan benar dengan alamat-alamat itu. Entah itu atau itu merujuk ke alamat IPv6 Link-Local.
jdizzle
3

Bonjour tidak menetapkan alamat IP - ini adalah protokol penemuan - Anda masih memerlukan alamat IP DHCP / Static / Link-Local (APIPA) agar dapat berfungsi.

Ia menggunakan multicast DNS (mDNS) untuk menemukan host apa yang berada pada domain broadcast yang sama seperti dirinya dan pada dasarnya ia menjadi server DNS sendiri.

Lihat Bonjour & Zeroconf untuk mengetahui lowdown.

Kecuali jika aplikasi Anda untuk jaringan rumah / tidak terkelola, artinya, tidak memiliki server DNS lokal Anda hanya tidak memerlukannya.

Jon Rhoades
sumber
ZeroConf tidak menetapkan alamat IP?
Gobliins