方法和属性


dns.setServers(servers)

设置解析时要使用的服务器的 IP 地址。servers 参数是一组 IPv4 或 IPv6 地址。

如果在一个地址上指定了端口,则该端口会被忽略。

如果提供了无效的地址将会抛出一个错误。

dns.setServers() 方法一定不能在 DNS 查询过程中调用。

dns.getServers()

返回一组正被用于名称解析的 IP 地址字符串。

dns.resolve(hostname[, rrtype], callback)

使用 DNS 协议解析主机名(如,'nodejs.org')到由 rrtype 指定类型的一组记录。

有效的 rrtype 值包括:

  • 'A' - IPV4 地址,默认

  • 'AAAA' - IPV6 地址

  • 'MX' - 邮件交换记录

  • 'TXT' - 文本记录

  • 'SRV' - SRV 记录

  • 'PTR' - 用于逆向 IP 查找

  • 'NS' - 名称服务器记录

  • 'CNAME' - 规范名称记录

  • 'SOA' - 规范记录的开头

callback 函数有参数 (err, addresses)。如果成功,addresses 会是一个数组。在 addresses 中的每个项目的类型是由记录类型确定,并且描述在相应查找方法的文档中。

当发生错误时,err 是一个 Error 对象,err.code 会是列举在这里的错误码的一种。

dns.resolve4(hostname, callback)

使用 DNS 协议将 hostname 解析为 IPv4 地址(A 记录)。传递给 callback 函数的 addresses 参数会包含一组 IPv4 地址(如,['74.125.79.104', '74.125.79.105', '74.125.79.106'])。

dns.resolve6(hostname, callback)

使用 DNS 协议将 hostname 解析为 IPv6 地址(AAAA 记录)。传递给 callback 函数的 addresses 参数会包含一组 IPv6 地址。

dns.resolveMx(hostname, callback)

使用 DNS 协议将 hostname 解析为邮件交换记录(MX 记录)。传递给 callback 函数的 addresses 参数会包含一组带有 priorityexchange 属性的对象(如,[{priority: 10, exchange: 'mx.example.com'}, ...])。

dns.resolveTxt(hostname, callback)

使用 DNS 协议将 hostname 解析为文本查询(TXT 记录)。传递给 callback 函数的 addresses 参数是一个适用于 hostname 的二维阵列文本记录(如,[['v=spf1 ip4:0.0.0.0 ', '~all']])。每个子阵列包含一个记录的文本块(TXT chunks)。根据使用案例,这些可能被拼接在一起或分别处理。

dns.resolveSrv(hostname, callback)

使用 DNS 协议将 hostname 解析为服务记录(SRV 记录)。传递给 callback 函数的 addresses 参数会是一组由以下属性构成的对象:

  • priority

  • weight

  • port

  • name

  1. {
  2. priority: 10,
  3. weight: 5,
  4. port: 21223,
  5. name: 'service.example.com'
  6. }

dns.resolveNs(hostname, callback)

使用 DNS 协议将 hostname 解析为名称服务器记录(NS 记录)。传递给 callback 函数的 addresses 参数会包含一组适用于 hostname 的名称服务器记录(如,['ns1.example.com', 'ns2.example.com'])。

dns.resolveCname(hostname, callback)

使用 DNS 协议将 hostname 解析为 CNAME 记录。传递给 callback 函数的 addresses 参数会包含一组适用于 hostname 的规范名称记录(如,['bar.example.com'])。

dns.resolveSoa(hostname, callback)

使用 DNS 协议将 hostname 解析为一个规范记录的开头(SOA 记录)。传递给 callback 函数的 addresses 参数会是一组由以下属性构成的对象:

  • nsname

  • hostmaster

  • serial

  • refresh

  • retry

  • expire

  • minttl

  1. {
  2. nsname: 'ns.example.com',
  3. hostmaster: 'root.example.com',
  4. serial: 2013101809,
  5. refresh: 10000,
  6. retry: 2400,
  7. expire: 604800,
  8. minttl: 3600
  9. }

dns.reverse(ip, callback)

执行反向 DNS 查询将 IPv4 或 IPv6 地址解析为一组主机名。

callback 函数有参数 (err, hostnames)hostnames 是一组用给定的 ip 解析后的主机名。

当发生错误时,err 是一个 Error 对象,err.codeDNS 错误码 中的一个。

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

解析主机名(如,'nodejs.org')到第一个找到的 A(IPv4)或 AAAA(IPv6)记录。options 可以是一个对象或整数。如果没有提供 options,那么 IPv4 和 IPv6 地址都是有效的。如果 options 是一个整数,那么它必须是 46

另外,options 可以是包含这些属性的对象:

  • family: {Number} - 记录族。如果存在的话,必须是整数 46。如果没有提供,IPv4 和 IPv6 的地址都可以接受。

  • hints: {Number} - 如果存在的话,它应该是一种或多种被支持的 getaddrinfo 标志。如果没有提供 hints,那么没有标志会传递给 getaddrinfo。给 hints 的多个标志通过逻辑或(OR)运算的值传递。查阅支持的 getaddrinfo 标志 获取更多有关受支持的标志信息。

  • all:{Boolean} 当为 true 时,回调函数会在一个数组里返回所有解析后的地址,否则返回一个单一地址。默认为 false

所有属性都是可选的。选项的使用示例如下所示。

  1. {
  2. family: 4,
  3. hints: dns.ADDRCONFIG | dns.V4MAPPED,
  4. all: false
  5. }

callback 函数有参数 (err, address, family)address 是一个 IPv4 或 IPv6 地址的字符串表示。family 要么是整数 46 并代表着 address 族(不一定是最初传给 lookup 的值)。

若将选项 all 设为 true,参数变为 (err, addresses)addresses 变成一组由 addressfamily 属性组成的对象。

当发生错误时,err 是一个 Error 对象,其中 err.code 是错误码。请记住 err.code 被设定为 'ENOENT' 的情况不局限于域名不存在,也可能在以其他方式查找失败,比如没有可用文件描述符时。

dns.lookup() 不一定要在 DNS 协议上做些什么。使用一个操作系统工具的实现,可以与地址名称相关联,反之亦然。此实现可能对任何 Node.js 程序的行为产生微妙但重要的后果。请在使用 dns.lookup() 前花一些时间来查阅实现中的注意事项章节。

支持的 getaddrinfo 标志

以下标志可以传递给 dns.lookup() 作为提示:

  • dns.ADDRCONFIG:返回的地址类型是由当前系统所支持的地址类型决定的。例如,IPv4 地址仅在当前系统至少配置了一个 IPv4 地址时返回。环回地址不考虑。

  • dns.V4MAPPED:如果指定了 IPv6 族,但没有找到 IPv6 地址。那么返回映射到 IPv4 的 IPv6 地址。需要注意的是,它不支持某些操作系统(如,FreeBSD 的 10.1 版本)。

dns.lookupService(address, port, callback)

使用 getnameinfo 的操作系统的底层实现来解析给定的 addressport 为主机名和服务器。

callback 函数有参数 (err, hostname, service)hostnameservice 参数是字符串(例如,分别为 'localhost''http')。

当发生错误时,err 是一个 Error 对象,其中 err.code 是错误码。

  1. const dns = require('dns');
  2. dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
  3. console.log(hostname, service);
  4. // Prints: localhost ssh
  5. });