前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NodeJS模块研究 - dns

NodeJS模块研究 - dns

作者头像
心谭博客
发布2020-04-21 15:29:08
1.5K0
发布2020-04-21 15:29:08
举报
文章被收录于专栏:YuanXin

nodejs 提供了 DNS 查询和操作的 API,本篇的目录是:

  • 什么是 DNS 解析?
  • dns.resolve*() vs dns.lookup()
  • 什么是反向域名解析?
  • 如何更改 DNS 服务器?

什么是 DNS 解析?

最直观的体验是,当在浏览器中输入网址时,浏览器能够找到网址对应的服务器的 ip 地址。这个过程就是依赖 DNS 域名解析。

DNS 解析的查询过程有两种,一种是迭代查询,一种是递归查询。

dns.resolve*() vs dns.lookup()

在 dns 模块中,提供了两类解析的 API:resolve*()loopup()

dns.lookup() 使用的是本地 dns 解析,并且底层是同步调用 getaddrinfo(3) 来实现的。所以对于 dns.lookup() ,它虽然在使用上是异步的方式,但是可能阻塞进程,导致严重的性能问题。

代码语言:javascript
复制
const dns = require("dns");

dns.lookup("baidu.com", (err, address, family) => {
    if (err) throw err;
    // 地址: "220.181.38.148" 地址族: IPv4
    console.log("地址: %j 地址族: IPv%s", address, family);
});

除了 dns.lookup() 之外,dns.resolve*() 函数均是连接到实际的 DNS 服务器,并且使用网络来进行 DNS 查询。

代码语言:javascript
复制
// 查看www.qq.com的ipv6记录
dns.resolve("www.qq.com", "AAAA", (err, address) => {
    if (err) throw err;
    console.log(address); //结果为[ '240e:ff:f040:28::a' ]
});
// 查看xin-tan.com的cname记录
dns.resolve("xin-tan.com", "CNAME", (err, address) => {
    if (err) throw err;
    console.log(address); //结果为[ 'dongyuanxin.github.io' ]
});

什么是反向域名解析?

正向域名解析是:域名 => ip。反向域名解析是:ip => 域名。

反向域名解析系统(Reverse DNS)的功能确保适当的邮件交换记录是生效的。这是一个最常见的问题(尤其是国外的邮件系统更是如此)。更多的电子邮件提供商是使用反向域名解析系统查找来确认信息是从哪里来的。由于这种方式的使用变得更广泛,那些没有正确地发布反向域名解析系统信息的域可能更常发生邮件的退回。

dns 模块提供了reverse()函数来实现反向域名解析:

代码语言:javascript
复制
dns.reverse("220.181.38.148", (err, hostnames) => {
    if (err) throw err;
    console.log(hostnames); //结果为[ 'public1.114dns.com' ]
});

如何更改 DNS 服务器?

如果想在 dns 模块上修改 DNS 服务器:

代码语言:javascript
复制
dns.setServers([
    "4.4.4.4",
    "[2001:4860:4860::8888]",
    "4.4.4.4:1053",
    "[2001:4860:4860::8888]:1053"
]);

如果不想影响其他的解析模块,那么可以新建一个 Resolver 类,更改类的 dns 服务器:

代码语言:javascript
复制
const { Resolver } = require("dns");
const resolver = new Resolver();
resolver.setServers(["4.4.4.4"]);

参考链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 DNS 解析?
  • dns.resolve*() vs dns.lookup()
  • 什么是反向域名解析?
  • 如何更改 DNS 服务器?
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档