微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 DNS 模块解析混淆的 IP 地址 Node.js

如何解决使用 DNS 模块解析混淆的 IP 地址 Node.js

我知道在 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'
          }]
        })
    })
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。