Bonjourの使用方法は?


26
  1. 最初に、Bonjourは正確に何をしますか(以下に書かれた私の推測を読んでください)?
    ここで、Bonjourを使用すると、IPネットワーク上のコンピューター、デバイス、およびサービスを自動検出できることがわかりました。しかし、「IPネットワーク上のデバイスを検出する」だけでなく、Bonjourが実行されているデバイスにIPアドレスを割り当ててIPネットワークを作成することも考えました。私は正しいですか?

  2. そして、私はまだ本質を見逃しています。次のように機能しますか?まず、デバイス(ラップトップなど)を物理的に接続し、潜在的に相互に通信できるようにします。次に、Bonjourを実行しているラップトップでは、その結果、これらのラップトップがIPアドレスを自動的に割り当てます。そのため、ラップトップ(Bonjourが実行されている場所)がIPネットワークを構築します。このように機能しますか?

  3. または、Bonjourを実行しているコンピューターがサービスとは見なされず、Bonjourがこのコンピューターで実行されているからといって、それ自体をブロードキャストしません。つまり、コンピューターで実行されているアプリケーションは、Bonjourを使用して自分自身をブロードキャストする必要があるということです。そのため、(コンピュータではなく)自分自身をブロードキャストするアプリケーションであり、自動的には実行されません(アプリケーションは自分で明示的にブロードキャストする必要があります)。正しいですか?

  4. アプリケーションはどのくらい正確にブロードキャストできますか?コマンドラインを使用してサービスを登録できます(Bonjourを使用するすべてのアプリケーションが新しいサービスが登場したことを認識できるように)。

  5. さらに、Bonjourによって作成されたIPネットワークを使用するアプリケーションが必要です。そのために、アプリケーションはネットワークに存在するデバイス/サービスを知る必要があります。より詳細には、アプリケーションにサービスのリストが必要です。リスト内の各サービスには、名前、サービスが実行されているIPアドレス、およびアプリケーションが使用するポートが必要です。Bonjourは何らかの方法でこの情報を提供できますか?その場合、どのように正確に機能するか。私のプログラムはどのようにしてBonjourからこの情報を取得できますか?私のプログラムは、Bonjourによって作成され、上記の情報を含むファイルを読み取ることができますか?この情報を取得するためにコマンドラインでいくつかのコマンドを使用できますか?

  6. ファイル、環境変数、またはコマンドラインのコマンドからサービスに関する情報にアクセスすることに特に興味があります。私には、これらのオプションが最も簡単なようです!これらの場合、特定のプログラミング言語からBonjourと通信するために追加のライブラリを使用する必要はありません。

PS Pleasは私の質問で何かはっきりしないことがあれば質問します。私は質問をより明確な方法で定式化しようとします。

PPS Windows 7を使用しています

追加:PHPでアプリケーションを作成する予定です。すべてのコンピューターでApache Webサーバーを実行する必要があります。また、Bonjourを使用して、コンピューターがお互いを検出できるようにします(コンピューターはローカルネットワークで動作しています)。

回答:


54
  1. はい。AppleのRendezvous / Bonjourの作成者であり、メインメンテナーでもあるStuart Cheshireは、IETF ZeroConfワーキンググループの共同議長を務め、O'ReillyのZero Configuration Networkingに関する本を執筆しました。脚は次のとおりです。

    1. IPv4(およびIPv6)リンクローカルアドレス指定
    2. マルチキャスト名前解決(mDNS)
    3. DNSサービス検出(DNS-SD)

    IETF ZeroConfワーキンググループとAppleは、リンクローカルアドレス指定、特にIPv4リンクローカルアドレス指定(169.254.0.0/16アドレス)がZeroConf / Bonjourの一部であると考えています。

    AppleのBonjour for Windowsソフトウェアがインストールされていない場合でも、Windowsはすでに自動リンクローカルアドレス指定をサポートしているため、多くのWindowsユーザーはIPv4リンクローカルアドレス指定をBonjour / ZeroConfの一部と考えていません。

  2. はい。MacおよびWindowsマシンは、DHCP用に構成されているが、DHCPサーバーが利用できない場合、デフォルトでIPv4リンクローカルアドレス指定を行います。Avahi(または場合によっては他のZeroConf実装)がインストールされたLinuxおよびBSDマシンでもこれが行われます。

  3. コンピューターがBonjourを実行している場合、そのホスト名はmDNSを介してLANで公開されます。マシンの名前が「Alice」の場合、Alice.localmDNS経由です。同じLAN(具体的には同じリンクローカルマルチキャストドメイン)上の別のコンピューター(「Bob」と呼びます)から、を入力するだけping Alice.localで、ボブはmDNSルックアップを実行Alice.localしてAliceのIPアドレスを検出する必要があります( es)、返されるアドレス(の1つ)をpingします。

    ただし、Bonjourではホスト名とサービス名が区別されることに注意してください。たとえば、アリスに接続された2つの別々のUSBプリンター(「HP」と「キヤノン」)があり、アリスがlpr両方のプリンターサーバーとして機能している場合、それぞれが独自のサービスとして表示されます。 、Alice.localホストとしてマップされます。

    彼らのサービス名は、ユーザーには「HP」および「Canon」として表示され、アリスについては言及されません。裏では、それらはHP._printer._tcp.localand として知られ、Canon._printer._tcp.localそれらのサービス名のDNS-SDルックアップは、それらのサービスがAlice.local2つの異なるTCPポートで利用可能であることを示します。

    そのため、アプリケーションは、通知しmDNSResponderたいサービスがあることをBonjourデーモン(Appleの実装で呼び出される)に通知する必要があります。macOSには、ネイティブにBonjourに対応していないレガシーサービスのサービスアドバタイズメントを自動的に処理するメカニズムがあります。たとえば、macOS sshdはOpenSSHであり、Bonjourを直接サポートしていませんが、macOSはsshBonjourを介してサービスの広告を処理するためssh username@Alice.local、LAN上の他のマシンからだけアクセスできます。

  4. macOSには、次の構文を使用してサービスを登録できる「dns-sd」コマンドラインツールがあります。

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

    たとえば、次のとおりです。

    dns-sd -R MyWebsite _http._tcp local 80
    

    Bonjour for WindowsまたはBonjour SDK for Windowsに含まれている場合、またはAppleのmDNSResponderオープンソースプロジェクトからWindows用にコンパイルできる場合、私は驚かないでしょう。のためのグーグルdns-sd.exe、私はそのようなものが存在することがわかります。バイナリをダウンロードするだけではわかりません。代わりに、上記のパッケージの1つから取得するか、mDNSResponderプロジェクトソースから自分でコンパイルしようとします。

  5. dns-sdコマンドラインツールを使用して、サービスを参照し、検索することもできます。ローカルWebサービスを検索する例を次に示します。

    次を使用してローカルWebサービスを参照します-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
    

    私が欲しいもの、「My Cool Web App」を以下で検索し-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のIPアドレスを照会します-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ブラウズクエリを開いた状態でネットワークに出入りするWebサーバーなど)。この理由およびその他の理由により、このdns-sdツールはスクリプトからの呼び出しにはあまり適していないことがわかりました。結局のところ、好みの言語のZeroConfライブラリを調べてみてください。

他の質問の1つに答えるために、ファイルを読み書きするだけでクエリを実行し、結果を取得できるZeroConfの実装を知りません。Bonjourを使用するほとんどのアプリは、APIを直接呼び出す(C / C ++ / Obj-C / Swiftアプリ)か、言語固有のライブラリー(解釈/スクリプト言語)を介して呼び出します。


私が見たBonjour / Zeroconfの最良の説明。ウィキペディアの記事にいくつか投稿してください:)
カミルキジエル

これがあるとかなり完了ですが、あなたがDNSレコードが使用されている方法に拡大したい場合から盗むこと自由に感じなさいserverfault.com/questions/18565/...
andrewtj

4

最初に、Bonjourは正確に何をしますか(以下に書かれた私の推測を読んでください)?ここで、Bonjourを使用すると、IPネットワーク上のコンピューター、デバイス、およびサービスを自動検出できることがわかりました。しかし、「IPネットワーク上のデバイスを検出する」だけでなく、Bonjourが実行されているデバイスにIPアドレスを割り当ててIPネットワークを作成することも考えました。私は正しいですか?

そうではありません。Jonが指摘したように、IPアドレスの割り当てにはDHCP(通常)が使用されます。通常のDNSがドメイン名をIPアドレスに変換するのとほぼ同じ方法で、Bonjourは一時的なドメイン名(ローカルネットワーク内)をそれらを提供するIPアドレスに変換するために使用されます。

そして、私はまだ本質を見逃しています。次のように機能しますか?まず、デバイス(ラップトップなど)を物理的に接続し、潜在的に相互に通信できるようにします。次に、Bonjourを実行しているラップトップでは、その結果、これらのラップトップがIPアドレスを自動的に割り当てます。そのため、ラップトップ(Bonjourが実行されている場所)がIPネットワークを構築します。このように機能しますか?

いや; ラップトップはほとんどの場合、ローカルDHCPサーバーからIPアドレスを取得しています。Bonjourは、それぞれが他の人に提供できるサービスを見つけるのに役立ちます。

または、Bonjourを実行しているコンピューターがサービスと見なされず、Bonjourがこのコンピューターで実行されているという理由だけで、Bonjourがそれ自体をブロードキャストしない場合があります。つまり、コンピューターで実行されているアプリケーションは、Bonjourを使用して自分自身をブロードキャストする必要があるということです。そのため、(コンピュータではなく)自分自身をブロードキャストするアプリケーションであり、自動的に行われません(アプリケーションは自分自身を明示的にブロードキャストする必要があります)。正しいですか?

はい-通常、アプリケーションはその存在を明示的に通知する必要があります。これは、多くの場合、システム提供のライブラリ(OS Xで共通)またはカスタムライブラリ(perlのNet :: Bonjourなど)を使用して実行できます。

アプリケーションはどのくらい正確にブロードキャストできますか?コマンドラインを使用してサービスを登録できますか(Bonjourを使用するすべてのアプリケーションが新しいサービスが登場したことを認識できるように)

これを行うコマンドラインツールは知りませんが、多くの主要なプログラミング言語には、これを行うためのライブラリが用意されています。

さらに、Bonjourによって作成されたIPネットワークを使用するアプリケーションが必要です。そのために、アプリケーションはネットワークに存在するデバイス/サービスを知る必要があります。より詳細には、アプリケーションにサービスのリストが必要です。リスト内の各サービスには、名前、サービスが実行されているIPアドレス、およびアプリケーションが使用するポートが必要です。Bonjourは何らかの方法でこの情報を提供できますか?

ほとんどのBonjourライブラリはこれを行うことができます。http://search.cpan.org/~chlige/Net-Bonjour-0.96/lib/Net/Bonjour.pmの最初の例を参照してください

その場合、どのように正確に機能するか。私のプログラムはどのようにしてBonjourからこの情報を取得できますか?私のプログラムは、Bonjourによって作成され、上記の情報を含むファイルを読み取ることができますか?この情報を取得するためにコマンドラインでいくつかのコマンドを使用できますか?

適切なライブラリを使用して、プログラムはBonjourプロトコルを使用して、ローカルネットワーク内の他のすべてのコンピューターに、どのサービスが利用可能かを尋ねます。そのライブラリは、応答を解析し、それらをより便利な形式で表示します。

ファイル、環境変数、またはコマンドラインのコマンドからサービスに関する情報にアクセスすることに特に興味があります。私には、これらのオプションが最も簡単なようです!これらの場合、特定のプログラミング言語からBonjourと通信するために追加のライブラリを使用する必要はありません。

これを行うツールは知りませんが、存在する可能性があります。

PS Pleasは私の質問で何かはっきりしないことがあれば質問します。私は質問をより明確な方法で定式化しようとします。

あなたが書いているプログラムが何をするか、そしてあなたがそれを書いている言語についてのいくつかのより多くの情報は、助けるのをより簡単にするでしょう。

入門情報については、次の両方を試してください。


caelyx、元の質問の最後に必要な情報を追加しました。
ローマン

caelyx、BonjourはIPアドレスを割り当てないことを書きました:「DHCPは(通常)IPアドレスを割り当てるために使用されます」。しかし、BonjourはZeroConfプロトコルを実装しており、ZeroConfプロトコルのコアテクノロジーの1つ(ウィキペディアによる)は、「ネットワークデバイスの数値ネットワークアドレスの割り当て(リンクローカルアドレスの自動構成)」です。
ローマン

DHCP / BootPサーバーのないIPv4ネットワークでは、ホストは自身に168. *アドレスを割り当てます。Bonjourは、これらのアドレスで正しく機能します。それか、IPv6リンクローカルアドレスを参照しています。
jdizzle

3

BonjourはIPアドレスを割り当てません-これは検出プロトコルです-動作するには、DHCP / Static / Link-Local(APIPA)IPアドレスが必要です。

マルチキャストDNS(mDNS)を使用して、それ自体と同じブロードキャストドメイン上にあるホストを検出し、本質的に独自のDNSサーバーになります。

ローダウンについてはBonjourZeroconfを参照してください。

アプリケーションがホーム/管理されていないネットワーク向けでない限り、つまり、ローカルDNSサーバーが不足していれば、それは必要ありません。


ZeroConfはIPアドレスを割り当てませんか?
ゴブリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.