実行中のすべてのBonjour対応サービスをリストできますか?


21

私のマシンでBonjourを使用して、どのプログラムが自分自身をアドバタイズするかを知りたいと思います。それを行う方法はありますか?

回答:


36

dns-sdコマンドラインツールは、このために有用であるが、それを使用することを学ぶことは少しトリッキーであることができます。

実行dns-sd -B _services._dns-sd._udpすると、現在アドバタイズされている利用可能なすべてのサービスタイプのリストが返されます。(リストはインターフェースごとにあるため、ある程度の冗長性があります。)これがアクティブなネットワーク接続のないMacで実行された場合、リストにはもちろんそのマシンで実行されているサービスのみが含まれます。

そのリストを使用して、dns-sd -B _home-sharing._tcp(iTunes Home Sharingインスタンスをリストする)などを実行することにより、個々のサービスタイプに関する情報を要求できます。次に、インスタンス名を指定するdns-sd -L "Wes Campaigne’s Library" _home-sharing._tcpと、特定のインスタンスの情報を検索するために実行できます。

正直なところ、このプロセス全体はかなり面倒であり、まさにDiscovery(以前のBonjour Browser)が行うために構築されたものなので、使用することを強くお勧めします。ただし、どの方法を使用しても、どのプログラムが特定のサービスエントリを担当するかは必ずしも明確ではありません。

binarybobの回答に記載されている戦略を使用して、サービスエントリをポート番号に基づいて実行中のプロセスにマッピングしようとすることができますが、これは常に機能するとは限りません。別の戦略はdns-sd -B _home-sharing._tcp、インスタンスが追加または削除されたときに開いたままでレポートするようなものを実行し、次にさまざまなアプリを1つずつ終了し、(システムサービスではないと仮定して)終了すると削除メッセージをトリガーするものを確認することです。


音楽共有サービスが今呼び出され_daapているように見えます。
zneak

実際、DAAPはiTunesの古い2つの異なる形式のライブラリ共有を指します。DAAPは、[設定]> [共有]> [ローカルネットワークでライブラリを共有]で有効にします。iTunes 9で追加されたホームシェアリングは、[ファイル]> [ホームシェアリング]から有効にできます。認証にApple IDを使用します。
ウェスキャンペーン

5

TildesoftのBonjourブラウザは、正確な基準を満たしていない可能性がありますが、ローカルネットワークでアドバタイズされたすべてのbonjourサービスとそれらをアドバタイズしているホストをすべてリストできます。

ローカルにアドバタイズされたサービスの場合、Bonjour Browserでドリルダウンして、サービスがアドバタイズされているポート番号を見つけ、それを使用lsofして、それに関連付けられたアプリケーションを決定できます。たとえば、

lsof -i | grep 57857

与える

iTunes    36720   ...     TCP *:57857 (LISTEN)

iTunesを実行しているとき。


2

レガシー記事として分類されていますが、これはまさにあなたが探しているものです:DNSServiceMetaQuery。 ドキュメントで概説されているように:

このサンプルでは、​​DNSServiceQueryRecordを使用して、ローカルネットワークでアドバタイズされているBonjourサービスタイプのリストを返すマルチキャストDNSクエリを送信します。このクエリに応答するには、マシンがmDNSResponder-58.6(Mac OS X 10.3.4)以降を実行している必要があります。

Mountain LionでDNSServiceMetaQueryを実行するには(含まれているビルドは正しく実行されません)、サンプルコードリンクに移動し、[サンプルコードのダウンロード]をクリックします。次に、まだXcodeをインストールしていない場合はインストールします。Mac OS X> Application> Command Line Toolのテンプレートの下に新しいプロジェクトを作成します。

すべてのテキストを開いてコピーし、新しいコマンドラインツールプロジェクトに~/Downloads/DNSServiceMetaQuery/DNSServiceMetaQuery.c貼り付けmain.cます(テンプレートにあったすべてのものを置き換えます)。次に、サイドバーのプロジェクト名>ビルドフェーズをクリックしてCoreFoundation.frameworkをプロジェクトに追加し、[ バイナリとライブラリリンク ]の横にあるドロップダウン矢印を開く必要があります ボタンをクリックし、+CoreFoundation.frameworkを検索して追加します。次に、「実行」ボタン(再生ボタンのように見えます)をクリックして、ビルド成功イメージを待ちます。ログのあるウィンドウのボタンから何かが来るはずです。これにより、すべてのBonjourサービスが表示されます。すべての出力がチェックされていることを確認してください。


私は熟練したプログラマーなので、Xcodeの使い方を知っています(そのためだけにXcodeをインストールしたいのかわからないので、それは良いことです)。確認します、ありがとう!
-zneak

Appleはコードを削除しましたが、ミラーで利用可能です。
タオ氏

@ Mr.TaoコードはまだAppleのサイトに存在しています。回答のリンクを更新しました
Jay O'Conor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.