バックグラウンド
Ruby DNSSD を使用して、いくつかのデバイスの IP アドレスを検出しようとしています。
私のコードは、デバイスの名前を正しく検出します。NAME.local を使用してデバイスにアクセスしようとしました。私はこの方法を試しました: https://github.com/jmitchener/ruby-dnssd-test/blob/master/main.rb
- IP アドレスを確認するにはどうすればよいですか? または
- ホスト名を使用してそれらのデバイスにアクセスしますか?
アップデート
私は、Socket コマンドが /etc/hosts ファイルを超えて検索していないという私の理論を証明しました。
3 つの redeye ユニットを手動で /etc/hosts ファイルに追加したところ、IP アドレスを解決できました。
/etc/ホスト
192.168.69.77 RedEye_B0105-92646.local.
192.168.69.75 RedEye_E0103-85245.local.
192.168.69.76 RedEye_B0104-99552.local.
コード
@@reIP = Hash.new
DNSSD.browse '_tf_redeye._tcp' do |reply|
puts reply.name
addr = Socket.getaddrinfo(reply.name + ".local.", nil, Socket::AF_INET)
@@reIP[reply.name] = addr
puts @@reIP
end
出力
RedEye_B0105-92646
{"RedEye_B0105-92646"=>[["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 1, 6], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 2, 17], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 3, 0]]}
RedEye_E0103-85245
{"RedEye_B0105-92646"=>[["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 1, 6], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 2, 17], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 3, 0]], "RedEye_E0103-85245"=>[["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 1, 6], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 2, 17], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 3, 0]]}
RedEye_B0104-99552
{"RedEye_B0105-92646"=>[["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 1, 6], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 2, 17], ["AF_INET", 0, "192.168.69.77", "192.168.69.77", 2, 3, 0]], "RedEye_E0103-85245"=>[["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 1, 6], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 2, 17], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 3, 0]], "RedEye_B0104-99552"=>[["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 1, 6], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 2, 17], ["AF_INET", 0, "192.168.69.76", "192.168.69.76", 2, 3, 0]]}
問題は、Socket コマンドが IP 解決のために /etc/hosts ファイルを超えて検索しない理由
です
。 mDNS サーバーが正しくインストールまたは構成されていない
3. DNSMASQ など、他の何かが競合している