web-dev-qa-db-ja.com

単一のデバイスから「Bonjourサービス名」を取得するにはどうすればよいですか?

イーサネット経由でホストにマシン接続したい2種類のデバイスがあります。これら2つのデバイスタイプのどちらが接続されているか知りたいです。

どちらのデバイスもAvahi/Bonjourを使用しており、2つのデバイスタイプを区別するために使用できる有用な情報を含む「Bonjourサービス名」と呼ばれるものがありますが、ネットワーク要件により、包括的mDNSブラウズを使用できないためです。ホストのセカンダリネットワークポートに出力されます(これは許可されていません)。この「Bonjourサービス名」は、デバイスがブロードキャストするすべてのサービスの最初の部分として、デバイスによって一貫して使用されます(例:UsefulDeviceName._http._tcp.localUsefulDeviceName._ftp._tcp.localUsefulDeviceName._telnet._tcp.localなど)。

2つのタイプの各デバイスにも固有のDNS名がありますが、それは[GenericPrefix][MacAddress].local、これはそれらを区別するのに十分ではありません(それらは同じメーカーのものであるため、両方のデバイスタイプが同じMACブロックを使用します)。

これまでに試したすべてのツールは、ネットワークを介してmDNSブロードキャストを実行し、Bonjourサービス名を表示しますが、「すべてのポートを使用しない」ネットワーク要件を満たしていません。 this のようなDNSクエリを実行すると、Bonjourサービス名ではなく通常のDNS名が返されます。

デバイスのIPがわかります。デバイスに「Bonjourサービス名は何ですか?」/「Bonjourサービス名は何ですか?」と尋ねる簡単なLinuxコマンドはありますか?これは、デバイスが接続されるインターフェイスを介してのみパケットを送信するために信頼でき、より広いネットワークは送信しませんか?

1
IBBoard

答えは「それを行うための信頼できる方法はない」のようです。すべてのデバイスが他の回答にリストされているDigコマンドをリッスン/応答するわけではなく、ネットワーク上のmDNS名を見つけるための他のすべてのデバイス(avahi-browseそして行儀の悪いmdns-scan)マルチキャスト/ブロードキャストが必要であり、個々のマシンのプローブには使用できません。

1
IBBoard

さまざまな「mDNSブラウザ」ツールと同じクエリを送信すると、Digが機能するはずです。

掘る _services._dns-sd._udp.local ptr @iPアドレス -p 5353 

(オプションで+shortを追加します。)

the Bonjourサービス名」はないことに注意してください。各デバイスは、さまざまな名前で複数のサービスを自由に登録できます。

0
user1686