专栏首页YuanXinNodeJS模块研究 - dns

NodeJS模块研究 - dns

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() ,它虽然在使用上是异步的方式,但是可能阻塞进程,导致严重的性能问题。

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 查询。

// 查看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()函数来实现反向域名解析:

dns.reverse("220.181.38.148", (err, hostnames) => {
    if (err) throw err;
    console.log(hostnames); //结果为[ 'public1.114dns.com' ]
});

如何更改 DNS 服务器?

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

dns.setServers([
    "4.4.4.4",
    "[2001:4860:4860::8888]",
    "4.4.4.4:1053",
    "[2001:4860:4860::8888]:1053"
]);

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

const { Resolver } = require("dns");
const resolver = new Resolver();
resolver.setServers(["4.4.4.4"]);

参考链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 剑指offer - 顺时针打印矩阵 - JavaScript

    题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 ...

    心谭博客
  • 深入koa源码 - 架构设计

    对于这四个文件,根据用途和封装逻辑,可以分为 3 类:req 和 res,上下文以及 application。

    心谭博客
  • 深入koa源码 - 手动实现玩具版koa

    设计思想和第三方库原理都在前 2 篇详细说明了。这篇主要目的是做一个验证检验,在语法使用 ES6/7 的语法。

    心谭博客
  • 前端之HTML

    所谓统一接口就是统一一个标准,比如一部手机当统一了充电接口之后不同牌子的手机可以使用同一个品牌的充电器进行充电,因为大家的产品都遵循了同样的接口规格和充电协议。...

    GH
  • HTML标签分类

    czjwarrior
  • 转型全栈时不待 狼书一开好运来

    前端攻城狮要想做到全栈,核心在于以下两点:一是要掌握后端不会的UI(界面);二是要掌握前端不会的DB(业务)。当然,不是倡导大家每一点都接触一下,然后号称自己是...

    用户1682855
  • 【简明 Python 教程】学习笔记【函数】 原

    函数通过def关键字定义。 def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,...

    donghui
  • 图表组件常见设置

    图表组件是 BI 中最常用到的组件,能直观地反应出数据特征。在分析中为了让图表显示更好的效果,少不了对图表进行设置。接下来,简单介绍一下图表组件的常见设置。

    腾讯云商业智能分析团队
  • Java中的多线程

    1、 线程中的主要方法     a) isAlive() 判断线程是否还活着,即线程是否未终止     b) getPriority() 获得线程的优先级   ...

    lizelu
  • 区块链上的IP交易可能是下一个十亿美元的行业

    例如许可协议、产品代言和品牌植入——带有你最喜欢的足球明星在海滩度假的形式和你最喜爱的女演员喝着新品牌能量饮料的形象。

    IT派

扫码关注云+社区

领取腾讯云代金券