问题描述
我知道在 Mac OSX 上我可以运行这个命令:dns-sd -q a5b3ef18-2e66-4e24-91d2-893b93bbc1c1.local
并且它返回一个 IP 地址。我可以在 Node.js 中做到这一点吗?似乎 dns
模块主要用于 website -> IP
,而不是 IP -> IP (resolved)
转换。任何帮助表示赞赏。谢谢!
注意:输入的地址将是由 Bonjour 转换的 mDNS。我找到了 Bonjour npm package/library,但不认为它在这种情况下有效。此外,我发现 mdns 具有 mdns.dns_sd
功能,但我似乎无法弄清楚如何在我的情况下使用它。
谢谢!
解决方法
我找到了一个 Node 模块,它完全可以满足您的需求。 Multicast-DNS 能够以标准 IP 格式查询 mDNS IP。他们 README 中的代码段满足您的需求:
var mdns = require('multicast-dns')()
mdns.on('response',function(response) {
console.log('got a response packet:',response)
})
mdns.on('query',function(query) {
console.log('got a query packet:',query)
})
// lets query for an A record for 'brunhilde.local'
mdns.query({
questions:[{
name: 'brunhilde.local',type: 'A'
}]
})
显然您需要用有效的 mDNS ip 替换 brunhilde.local
。我把代码简化成这样:
function query(mdns_ip){
return new Promise((resolve,reject)=>{
mdns.on('response',function(response) {
if(response.rcode === 'NOERROR'){
resolve(response.answers[0].data)
mdns.destroy()
} else {
reject(response.rcode)
mdns.destroy()
}
})
mdns.query({
questions:[{
name: mdns_ip,type: 'A'
}]
})
})
}