回答:
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つずつ終了し、(システムサービスではないと仮定して)終了すると削除メッセージをトリガーするものを確認することです。
TildesoftのBonjourブラウザは、正確な基準を満たしていない可能性がありますが、ローカルネットワークでアドバタイズされたすべてのbonjourサービスとそれらをアドバタイズしているホストをすべてリストできます。
ローカルにアドバタイズされたサービスの場合、Bonjour Browserでドリルダウンして、サービスがアドバタイズされているポート番号を見つけ、それを使用lsof
して、それに関連付けられたアプリケーションを決定できます。たとえば、
lsof -i | grep 57857
与える
iTunes 36720 ... TCP *:57857 (LISTEN)
iTunesを実行しているとき。
レガシー記事として分類されていますが、これはまさにあなたが探しているものです: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サービスが表示されます。すべての出力がチェックされていることを確認してください。
_daap
ているように見えます。