WiFi モジュールから mDNS サービスをブロードキャストしています。Linux PC でそれを検出し、IP アドレスを取得する必要があります。
- mdns-scan コマンドを使用して、サービス名をリスト表示しました。
- avahi-browse --all を使用したところ、サービス名がリストされました。
- しかし、そのサービスの IP アドレスを取得するにはどうすればよいでしょうか? それが私の要件です。
- Android アプリケーションでは、サービスの詳細をすべて取得できます。Linux で取得するにはどうすればいいですか?
- if config -a と nmap も試しました。
答え1
avahi-browse --all を使用したところ、サービス名がリストされました。
使用avahi-resolve --name
ホスト名を IP アドレスにマッピングします。
あるいは、mDNS*.local
ホスト名をシステム全体で解決可能にするには、nss-mdns(Avahi バックエンドを使用) または nss-resolve (systemd-resolved バックエンドを使用)。これにより、どのアプリケーションでも mDNS 名を通常の DNS のように使用できるようになります。
Android アプリケーションでは、サービスの詳細をすべて取得できます。Linux で取得するにはどうすればいいですか?
AndroidアプリケーションではOSが提供するAPIを使用しています。同様に、Linuxでは適切なOSが提供するAPIを使用する必要があります。libavahiクライアントまたはlibavahi-glib–ないランダムな CLI ツールを結合したものです。リストしたツールはすべて、スクリプト用ではなく、システム管理者が手動で使用するためのものです。
DNS-SD は、サービスの追加情報を TXT レコードに保存します。API の例に示されているように、「resolve callback」関数は、追加の操作を行わなくても、TXT レコードの配列をパラメーターとして自動的に受け取ります。
答え2
自動化スクリプトにこれが必要かどうかはわかりません。その場合、これが最善の解決策ではない可能性がありますが、簡単なping
コマンドで IP アドレスを取得することもできます。
次の例をご覧ください:
$ ping lightpizero.local
PING lightpizero.local (192.168.0.104) 56(84) bytes of data.
この場合の住所は明らかに192.168.0.104