开发手册 欢迎您!
软件开发者资料库

DNS | Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

Node.js v8.x 中文文档


dns (域名服务器)#

稳定性: 2 - 稳定的

dns 模块包含两类函数:

1) 第一类函数,使用底层操作系统工具进行域名解析,且无需进行网络通信。这类函数只有一个:[dns.lookup()]。

例子,查找 iana.org

const dns = require('dns');dns.lookup('iana.org', (err, address, family) => {  console.log('IP 地址: %j 地址族: IPv%s', address, family);});// IP 地址: "192.0.43.8" 地址族: IPv4

2) 第二类函数,连接到一个真实的 DNS 服务器进行域名解析,且始终使用网络进行 DNS 查询。这类函数包含了 dns 模块中除 [dns.lookup()] 以外的所有函数。这些函数使用与 dns.lookup() 不同的配置文件(例如 /etc/hosts)。这类函数适合于那些不想使用底层操作系统工具进行域名解析、而是想使用网络进行 DNS 查询的开发者。

例子,解析 'archive.org' 然后逆向解析返回的 IP 地址:

const dns = require('dns');dns.resolve4('archive.org', (err, addresses) => {  if (err) throw err;  console.log(`IP 地址: ${JSON.stringify(addresses)}`);  addresses.forEach((a) => {    dns.reverse(a, (err, hostnames) => {      if (err) {        throw err;      }      console.log(`IP 地址 ${a} 逆向解析到域名: ${JSON.stringify(hostnames)}`);    });  });});

两类函数有微妙的差别,详见 实现上的注意事项

Class dns.Resolver#

DNS请求的独立解析程序。

使用默认的设置创建一个新的解析程序。为一个解析程序设置servers使用[resolver.setServers()][dns.setServers()],它不会影响其他的解析程序:

const { Resolver } = require('dns');const resolver = new Resolver();resolver.setServers(['4.4.4.4']);// This request will use the server at 4.4.4.4, independent of global settings.resolver.resolve4('example.org', (err, addresses) => {  // ...});

可以使用的dns模块的方法如下:

  • [resolver.getServers()][dns.getServers()]
  • [resolver.setServers()][dns.setServers()]
  • [resolver.resolve()][dns.resolve()]
  • [resolver.resolve4()][dns.resolve4()]
  • [resolver.resolve6()][dns.resolve6()]
  • [resolver.resolveAny()][dns.resolveAny()]
  • [resolver.resolveCname()][dns.resolveCname()]
  • [resolver.resolveMx()][dns.resolveMx()]
  • [resolver.resolveNaptr()][dns.resolveNaptr()]
  • [resolver.resolveNs()][dns.resolveNs()]
  • [resolver.resolvePtr()][dns.resolvePtr()]
  • [resolver.resolveSoa()][dns.resolveSoa()]
  • [resolver.resolveSrv()][dns.resolveSrv()]
  • [resolver.resolveTxt()][dns.resolveTxt()]
  • [resolver.reverse()][dns.reverse()]

resolver.cancel()#

取消这个解析程序的未解决的DNS查询,相应的回调用一个ECANCELLED码调用。

dns.getServers()#

返回一个用于当前DNS解析的IP地址的数组的字符串,格式根据[rfc5952][]。如果使用自定义端口,那么字符串将包括一个端口部分。

例如:

[  '4.4.4.4',  '2001:4860:4860::8888',  '4.4.4.4:1053',  '[2001:4860:4860::8888]:1053']

dns.lookup(hostname[, options], callback)#