बोनजॉर का उपयोग कैसे करें?


26
  1. सबसे पहले, बॉनजोर क्या करता है (दलीलों ने मेरे अनुमानों को लिखित बोला पढ़ा)?
    यहां मुझे पता चला कि बोन्जौर आईपी नेटवर्क पर कंप्यूटर, डिवाइस और सेवाओं की स्वचालित खोज में सक्षम बनाता है। लेकिन मैंने सोचा कि यह न केवल "आईपी नेटवर्क पर उपकरणों को रोकता है" यह उन डिवाइसों को आईपी पते असाइन करके एक आईपी नेटवर्क भी बनाता है जहां बोनजॉर चल रहा है। क्या मैं सही हू?

  2. और मैं अभी भी सार को याद करता हूं। क्या यह निम्नलिखित तरीके से काम करता है? पहले मैं उपकरणों (उदाहरण के लिए लैपटॉप) को शारीरिक रूप से जोड़ता हूं ताकि वे संभावित रूप से एक दूसरे के साथ संवाद कर सकें। फिर, कुछ लैपटॉप पर बोन्जौर चल रहा है और फिर, परिणाम के रूप में, ये लैपटॉप स्वचालित रूप से स्वयं को आईपी पते प्रदान करते हैं। इसलिए, लैपटॉप (जहां बोनजोर चल रहा है) एक आईपी नेटवर्क का निर्माण करता है। क्या यह इस तरह से काम करता है?

  3. या हो सकता है कि एक कंप्यूटर जो चल रहा हो बोंजोर को एक सेवा के रूप में नहीं माना जाता है और यह केवल खुद को प्रसारित नहीं करता है क्योंकि बोंजौर इस कंप्यूटर पर चल रहा है। मेरा मतलब है कि कंप्यूटर पर चल रहे एप्लिकेशन को अपने आप को प्रसारित करने के लिए बोनजोर का उपयोग करने की आवश्यकता है। तो, यह ऐसे एप्लिकेशन हैं जो स्वयं को प्रसारित करते हैं (कंप्यूटर नहीं) और यह स्वचालित रूप से नहीं किया जाता है (एप्लिकेशन को स्पष्ट रूप से प्रसारित करने की आवश्यकता है)। क्या यह सही है?

  4. वास्तव में मेरा आवेदन खुद को कैसे प्रसारित कर सकता है? क्या मैं किसी सेवा को पंजीकृत करने के लिए कमांड लाइन का उपयोग कर सकता हूं (ताकि बोन्जौर का उपयोग करने वाले सभी एप्लिकेशन जानते हों कि एक नई सेवा दिखाई दी)?

  5. इसके अलावा, मैं एक आवेदन करना चाहता हूं जो बोंजौर द्वारा बनाए गए आईपी नेटवर्क का उपयोग करें। उसके लिए मेरे एप्लिकेशन को यह जानना होगा कि नेटवर्क में कौन से उपकरण / सेवाएं मौजूद हैं। अधिक जानकारी के लिए, मेरे आवेदन में सेवाओं की एक सूची होनी चाहिए। सूची में प्रत्येक सेवा का एक नाम, आईपी पता होना चाहिए जहां वह चल रहा है और पोर्ट जिसका उपयोग एप्लिकेशन द्वारा किया जाता है। क्या बोनजोर किसी तरह से यह जानकारी प्रदान कर सकता है? यदि यह मामला है, तो यह कैसे काम करता है। मेरे कार्यक्रम बोंजौर से यह जानकारी कैसे मिल सकती है? क्या मेरा कार्यक्रम बोंजौर द्वारा बनाई गई कुछ फ़ाइल पढ़ सकता है और उपर्युक्त जानकारी युक्त हो सकता है? क्या मैं इस जानकारी को पुनः प्राप्त करने के लिए कमांड लाइन में कुछ कमांड का उपयोग कर सकता हूं?

  6. मुझे कमांड लाइन में फाइलों, पर्यावरण चर या आदेशों से सेवाओं के बारे में जानकारी प्राप्त करने में विशेष रुचि है। ये विकल्प मुझे सबसे सरल लगते हैं! चूंकि इन मामलों में मुझे किसी विशेष प्रोग्रामिंग भाषा से बोन्जौर के साथ संवाद करने के लिए किसी भी अतिरिक्त पुस्तकालयों का उपयोग करने की आवश्यकता नहीं है।

पीएस प्लीस सवाल पूछते हैं कि क्या मेरे सवाल में कुछ स्पष्ट नहीं है। मैं अपने प्रश्न को अधिक स्पष्ट तरीके से तैयार करने का प्रयास करूंगा।

PPS I विंडोज 7 का उपयोग करता है

जोड़ा: मैं PHP में अपने आवेदन लिखने की योजना है। प्रत्येक कंप्यूटर को एक अपाचे वेब सर्वर चलाना चाहिए। और मैं एक दूसरे को खोजने में कंप्यूटर की मदद करने के लिए बोंजोर का उपयोग करना चाहता हूं (कंप्यूटर एक स्थानीय नेटवर्क में काम कर रहे हैं)।

जवाबों:


54
  1. हाँ। स्टुअर्ट चेशायर, जो निर्माता थे और Apple पर रेंडेज़वस / बोनजोर के एक प्राथमिक अनुचर हैं, जिन्होंने IETF ZeroConf वर्किंग ग्रुप की सह-अध्यक्षता की, और उन्होंने जीरो कॉन्फ़िगरेशन नेटवर्किंग में ओ'रिली किताब लिखी, ने बोनजॉर को "तीन-" के रूप में वर्णित किया है। पैर का मल ”जहाँ पैर हैं:

    1. IPv4 (और IPv6) लिंक-लोकल एड्रेसिंग
    2. मल्टीकास्ट नाम संकल्प (mDNS)
    3. DNS सेवा डिस्कवरी (DNS-SD)

    IETF ZeroConf वर्किंग ग्रुप और Apple दोनों लिंक-लोकल एड्रेसिंग पर विचार करते हैं, विशेष रूप से IPv4 लिंक-लोकल एड्रेसिंग ( 169.254.0.0/16पतों) को ZeroConf / Bonjour का हिस्सा बनने के लिए, भले ही लिंक-लोकल एड्रेसिंग अन्य दो "स्टूल के पैर" से पहले भेज दिया हो।

    ध्यान दें कि चूंकि विंडोज पहले से ही Apple के बोनजौर के बिना विंडोज सॉफ्टवेयर स्थापित किए बिना भी स्वचालित लिंक-स्थानीय पते का समर्थन करता है, कई विंडोज उपयोगकर्ता आईपीवी 4 लिंक-स्थानीय पते को बोनजॉर / जीरोकोनफ का हिस्सा बनने के बारे में नहीं सोचते हैं।

  2. हाँ। मैक और विंडोज मशीनें, डिफ़ॉल्ट रूप से, आईपीवी 4 लिंक-लोकल एड्रेसिंग करती हैं, यदि उन्हें डीएचसीपी के लिए कॉन्फ़िगर किया गया है, लेकिन डीएचसीपी उपलब्ध नहीं है। अव्ही के साथ लिनक्स और बीएसडी मशीनें (या संभवत: अन्य ZeroConf कार्यान्वयन) स्थापित भी ऐसा करेंगे।

  3. यदि कोई कंप्यूटर Bonjour चला रहा है, तो उसके होस्टनाम को mDNS के माध्यम से LAN पर प्रकाशित किया जाता है। यदि आपकी मशीन का नाम "एलिस" है, तो यह Alice.localmDNS के माध्यम से होगा । उसी LAN पर किसी अन्य कंप्यूटर से (चलो इसे "बॉब" कहते हैं) (विशेष रूप से, उसी लिंक-स्थानीय मल्टीकास्ट डोमेन पर), आपको बस टाइप करने में सक्षम होना चाहिए ping Alice.local, और बॉब को Alice.localऐलिस के आईपी पते की खोज के लिए एक mDNS लुकअप करना चाहिए ( तों), और पिंग (एक) का पता (तों) यह वापस हो जाता है।

    हालाँकि, ध्यान दें, कि बोनजोर होस्टनाम और सेवा नामों के बीच अंतर करता है। उदाहरण के लिए, यदि आपके पास दो अलग-अलग USB प्रिंटर हैं, तो मान लें कि "HP" और "Canon", ऐलिस से जुड़े हैं, और ऐलिस इन lprदोनों के लिए एक प्रिंट सर्वर के रूप में काम कर रहा है, वे कह सकते हैं कि वे प्रत्येक को अपनी सेवा के रूप में दिखा सकते हैं , जो Alice.localमेजबान के रूप में वापस मैप करता है।

    उनकी सेवा के नाम एलिस के उल्लेख के साथ उपयोगकर्ता को "एचपी" और "कैनन" के रूप में दिखाई देंगे। पर्दे के पीछे, वे के रूप में जाना जाएगा HP._printer._tcp.localऔर Canon._printer._tcp.local, और उन सेवाओं के नाम पर DNS-SD देखने से पता चलता है कि वे सेवाएं Alice.localदो अलग-अलग टीसीपी पोर्ट पर उपलब्ध हैं ।

    तो हां, अनुप्रयोगों को बोन्जौर डेमन ( mDNSResponderएप्पल के कार्यान्वयन में कहा जाता है) को सूचित करना चाहिए कि उनके पास वे सेवाएं हैं जो वे विज्ञापन करना चाहते हैं। macOS में विरासत सेवाओं के लिए सेवा विज्ञापन को स्वचालित रूप से संभालने के लिए तंत्र है जो मूल रूप से बोनजोर-जागरूक नहीं हैं। उदाहरण के लिए, MacOS का sshdOpenSSH है, जो सीधे Bonjour का समर्थन नहीं करता है, लेकिन MacOS sshBonjour के माध्यम से सेवा का विज्ञापन करने का ध्यान रखता है ताकि आप ssh username@Alice.localLAN पर अन्य मशीनों से बस ले सकें ।

  4. MacOS पर, एक "dns-sd" कमांड-लाइन टूल है जो इस सिंटैक्स का उपयोग करके किसी सेवा को पंजीकृत कर सकता है:

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

    उदाहरण के लिए:

    dns-sd -R MyWebsite _http._tcp local 80
    

    मुझे आश्चर्य नहीं होगा अगर यह विंडोज के लिए बोंजौर, या विंडोज के लिए बोंजोर एसडीके में शामिल है, या यदि आप इसे एप्पल के mDNSResponder ओपन-सोर्स प्रोजेक्ट से विंडोज के लिए संकलित कर सकते हैं । के लिए गुगली करना dns-sd.exe, मुझे लगता है कि ऐसी चीज मौजूद है। मुझे यकीन नहीं है कि मैं सिर्फ इसके लिए एक बाइनरी डाउनलोड करूंगा। इसके बजाय मैं इसे ऊपर वर्णित पैकेजों में से एक से प्राप्त करने की कोशिश करूंगा, या इसे mDNSResponder परियोजना स्रोतों से स्वयं संकलित करूंगा।

  5. आप dns-sdसेवाओं के लिए ब्राउज़ करने और उन्हें देखने के लिए कमांड-लाइन टूल का भी उपयोग कर सकते हैं । यहाँ एक स्थानीय वेब सेवा को देखने का एक उदाहरण है:

    इसके साथ स्थानीय वेब सेवाओं के लिए ब्राउज़ करें -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
    

    मैं जो चाहता हूं, उसे देखें, "मेरा कूल वेब ऐप", इसके साथ -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 के साथ आईपी पतों की क्वेरी करें -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  
    

    इन उदाहरणों में ध्यान दें कि आपको टूल से Ctrl-Cबाहर होना चाहिए dns-sd। अन्यथा यह हमेशा खुला रहेगा, नेटवर्क को लगातार देखना और आपके द्वारा जारी किए गए क्वेरी के परिणामों में किसी भी परिवर्तन की रिपोर्ट करना (जैसे कि वेब सर्वर नेटवर्क पर आते और जाते रहते हैं, जबकि आप -Bब्राउज़ क्वेरी ओपन के साथ बैठते हैं)। मैंने पाया है कि इस और अन्य कारणों के लिए, dns-sdउपकरण स्क्रिप्ट से बुलाए जाने के लिए अच्छी तरह से अनुकूल नहीं है। आप आखिरकार अपनी पसंदीदा भाषा के लिए ज़ीरोन्फ़ लाइब्ररी क्या देखना चाहते हैं।

आपके अन्य प्रश्नों में से एक का उत्तर देने के लिए, मुझे किसी भी ZeroConf कार्यान्वयन के बारे में पता नहीं है जो आपको प्रश्नों को करने और फाइलों को पढ़ने / लिखने के द्वारा परिणाम प्राप्त करने की अनुमति देता है। अधिकांश ऐप्स जो बोन्जौर का उपयोग करते हैं, वे एपीआई को कॉल करके सीधे (सी / सी ++ / ओबज-सी / स्विफ्ट ऐप्स) या भाषा के लिए एक पुस्तकालय के माध्यम से करते हैं (व्याख्या / स्क्रिप्टिंग भाषा)।


बोन्जौर / ज़र्कोनफ़ का सर्वोत्तम विवरण मैंने देखा है। आपको विकिपीडिया लेख पर कुछ योगदान देना चाहिए :)
कामिल किसील

यह सुंदर है के रूप में पूरा हो गया है, लेकिन यदि आप पर विस्तार करने के लिए कैसे DNS रिकॉर्ड उपयोग किया जाता है चाहता हूँ से चोरी करने में संकोच न करें serverfault.com/questions/18565/...
andrewtj

4

सबसे पहले, बॉनजोर क्या करता है (दलीलों ने मेरे अनुमानों को लिखित बोला) पढ़ा? यहां मुझे पता चला कि बोन्जौर आईपी नेटवर्क पर कंप्यूटर, डिवाइस और सेवाओं की स्वचालित खोज में सक्षम बनाता है। लेकिन मैंने सोचा कि यह न केवल "आईपी नेटवर्क पर उपकरणों को रोकता है" यह उन डिवाइसों को आईपी पते असाइन करके एक आईपी नेटवर्क भी बनाता है जहां बोनजॉर चल रहा है। क्या मैं सही हू?

काफी नहीं; जैसा कि जॉन ने बताया, डीएचसीपी (आमतौर पर) का उपयोग आईपी पते को आवंटित करने के लिए किया जाता है। उसी तरह से जो साधारण DNS आईपी पते के लिए डोमेन नाम का अनुवाद करता है, बोनजौर का उपयोग अस्थायी डोमेन नाम (स्थानीय नेटवर्क के भीतर) को प्रदान करने वाले आईपी पते के लिए किया जाता है।

और मैं अभी भी सार को याद करता हूं। क्या यह निम्नलिखित तरीके से काम करता है? पहले मैं उपकरणों (उदाहरण के लिए लैपटॉप) को शारीरिक रूप से जोड़ता हूं ताकि वे संभावित रूप से एक दूसरे के साथ संवाद कर सकें। फिर, आइए, कुछ लैपटॉप पर मुझे बोन्जोर चल रहा है और फिर, परिणामस्वरूप, ये लैपटॉप स्वचालित रूप से स्वयं को आईपी पते प्रदान करते हैं। इसलिए, लैपटॉप (जहां बोनजोर चल रहा है) एक आईपी नेटवर्क का निर्माण करता है। क्या यह इस तरह से काम करता है?

नहीं; लैपटॉप ज्यादातर स्थानीय डीएचसीपी सर्वर से अपने आईपी पते प्राप्त करने की संभावना रखते हैं। बोंजोर सिर्फ उन्हें यह काम करने में मदद करता है कि प्रत्येक दूसरों को कौन सी सेवाएं प्रदान कर सकता है।

या हो सकता है कि एक कंप्यूटर जो चल रहा हो बोंजोर को एक सेवा के रूप में नहीं माना जाता है और यह केवल खुद को प्रसारित नहीं करता है क्योंकि बोंजौर इस कंप्यूटर पर चल रहा है। मेरा मतलब है कि कंप्यूटर पर चल रहे एप्लिकेशन को अपने आप को प्रसारित करने के लिए बोनजोर का उपयोग करने की आवश्यकता है। तो, यह ऐसे एप्लिकेशन हैं जो स्वयं को प्रसारित करते हैं (कंप्यूटर नहीं) और यह स्वचालित रूप से नहीं किया जाता है (एप्लिकेशन को स्पष्ट रूप से प्रसारित करने की आवश्यकता है)। क्या यह सही है?

हां - आम तौर पर, आपके आवेदन को स्पष्ट रूप से अपने अस्तित्व का विज्ञापन करना होगा। यह अक्सर सिस्टम-प्रदत्त पुस्तकालयों (ओएस एक्स पर आम) या कस्टम लाइब्रेरी (जैसे पर्ल का नेट :: बोनजॉर) का उपयोग करके किया जा सकता है।

वास्तव में मेरा आवेदन खुद को कैसे प्रसारित कर सकता है? क्या मैं किसी सेवा को पंजीकृत करने के लिए कमांड लाइन का उपयोग कर सकता हूं (ताकि बोन्जौर का उपयोग करने वाले सभी एप्लिकेशन जानते हैं कि एक नई सेवा दिखाई दी)

मुझे कमांड-लाइन टूल के बारे में पता नहीं है जो ऐसा करता है, लेकिन कई प्रमुख प्रोग्रामिंग भाषाओं में ऐसा करने के लिए लाइब्रेरी उपलब्ध हैं।

इसके अलावा, मैं एक आवेदन करना चाहता हूं जो बोंजौर द्वारा बनाए गए आईपी नेटवर्क का उपयोग करें। उसके लिए मेरे एप्लिकेशन को यह जानना होगा कि नेटवर्क में कौन से उपकरण / सेवाएं मौजूद हैं। अधिक जानकारी के लिए, मेरे आवेदन में सेवाओं की एक सूची होनी चाहिए। सूची में प्रत्येक सेवा का एक नाम, आईपी पता होना चाहिए जहां वह चल रहा है और पोर्ट जिसका उपयोग एप्लिकेशन द्वारा किया जाता है। क्या बोनजोर किसी तरह से यह जानकारी प्रदान कर सकता है?

अधिकांश बोन्जौर पुस्तकालयों को आपके लिए ऐसा करने में सक्षम होना चाहिए; पहला उदाहरण http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pm पर देखें

यदि यह मामला है, तो यह कैसे काम करता है। मेरे कार्यक्रम बोंजौर से यह जानकारी कैसे मिल सकती है? क्या मेरा कार्यक्रम बोंजौर द्वारा बनाई गई कुछ फ़ाइल पढ़ सकता है और उपर्युक्त जानकारी युक्त हो सकता है? क्या मैं इस जानकारी को पुनः प्राप्त करने के लिए कमांड लाइन में कुछ कमांड का उपयोग कर सकता हूं?

उपयुक्त पुस्तकालयों का उपयोग करते हुए, प्रोग्राम आपके स्थानीय नेटवर्क के अन्य सभी कंप्यूटरों को यह बताने के लिए बोनजौर प्रोटोकॉल का उपयोग करता है कि वे यह बता सकें कि उनके पास क्या सेवाएं उपलब्ध हैं। वह लाइब्रेरी तब प्रतिक्रियाओं को पार्स करेगी और उन्हें एक अधिक उपयोगी प्रारूप में आपके सामने प्रस्तुत करेगी।

मुझे कमांड लाइन में फाइलों, पर्यावरण चर या आदेशों से सेवाओं के बारे में जानकारी प्राप्त करने में विशेष रुचि है। ये विकल्प मुझे सबसे सरल लगते हैं! चूंकि इन मामलों में मुझे किसी विशेष प्रोग्रामिंग भाषा से बोन्जौर के साथ संवाद करने के लिए किसी भी अतिरिक्त पुस्तकालयों का उपयोग करने की आवश्यकता नहीं है।

मैं एक उपकरण के बारे में नहीं जानता जो ऐसा करता है, लेकिन यह मौजूद हो सकता है।

पीएस प्लीस सवाल पूछते हैं कि क्या मेरे सवाल में कुछ स्पष्ट नहीं है। मैं अपने प्रश्न को अधिक स्पष्ट तरीके से तैयार करने का प्रयास करूंगा।

आप जो कार्यक्रम लिख रहे हैं, उसके बारे में कुछ और जानकारी और आप इसे किस भाषा में लिख रहे हैं, इससे मदद करने में आसानी होगी।

अधिक परिचयात्मक जानकारी के लिए, दोनों का प्रयास करें:


caelyx, मैंने अपने मूल प्रश्न के अंत में आपके द्वारा आवश्यक जानकारी जोड़ी है।
रोमन

caelyx, आपने लिखा था कि Bonjour IP पते प्रदान नहीं करता है: "DHCP (आमतौर पर) का उपयोग IP पते को आवंटित करने के लिए किया जाता है"। लेकिन बोन्जौर ZeroConf प्रोटोकॉल को लागू करता है और ZeroConf प्रोटोकॉल (विकिपीडिया के अनुसार) की मुख्य तकनीकों में से एक है "नेटवर्क डिवाइस (लिंक-स्थानीय पता ऑटोकैनिगेशन) के लिए संख्यात्मक नेटवर्क पते का असाइनमेंट"।
रोमन

बिना किसी डीएचसीपी / बूटप सर्वर के साथ आईपीवी 4 नेटवर्कों पर, मेजबान खुद को 168. * पते असाइन करेगा। बोनजौर उन पतों के साथ सही ढंग से काम करता है। या तो वह या यह IPv6 लिंक-स्थानीय पते की बात कर रहा है।
jdizzle

3

बोन्जौर आईपी पते प्रदान नहीं करता है - यह एक खोज प्रोटोकॉल है - आपको अभी भी काम करने के लिए डीएचसीपी / स्टेटिक / लिंक-लोकल (एपीआईपीए) आईपी पते की आवश्यकता है।

यह मल्टीकास्ट DNS (mDNS) का उपयोग करता है ताकि यह पता लगाया जा सके कि मेजबान एक ही प्रसारण डोमेन पर क्या कर रहे हैं और अनिवार्य रूप से यह अपना स्वयं का DNS सर्वर बन जाता है।

देखें Bonjour और Zeroconf lowdown के लिए।

जब तक आपका आवेदन घर / संयुक्त राष्ट्र के प्रबंधित नेटवर्क के लिए नहीं होता, तब तक यह कहना होगा कि एक स्थानीय DNS सर्वर की कमी है, जिसकी आपको आवश्यकता नहीं है।


ZeroConf IP adresses असाइन नहीं करता है?
गोबलींस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.