【发布时间】:2013-03-01 21:53:25
【问题描述】:
背景
我正在尝试使用 Ruby DNSSD 来发现一些设备的 IP 地址。
我的代码将正确发现设备的名称。我尝试使用 NAME.local 访问设备。这个方法我试过了:https://github.com/jmitchener/ruby-dnssd-test/blob/master/main.rb
- 如何找到他们的 IP 地址?或者
- 使用主机名访问那些设备?
更新
我向自己证明了我的理论,即 Socket 命令没有搜索到 /etc/hosts 文件
我手动将我的三个 redeye 设备添加到 /etc/hosts 文件中,并且能够解析 IP 地址。
/etc/hosts
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 命令不搜索 /etc/hosts 文件以进行 IP 解析
1. AVAHI 和/或 DNSSD 没有缓存地址,因为它们是由 DNSSD.browse 报告的,可能是配置设置
2. 我没有正确安装或配置 mDNS 服务器
3. 其他有冲突的东西,比如 DNSMASQ
【问题讨论】:
标签: ruby sockets bonjour dns-sd