• Node.js Video Tutorials

Node.js - DNS 模块



Node.js 的dns模块用于执行实际的 DNS 查找,以及使用底层操作系统名称解析功能。此模块提供了一个异步网络包装器,可以使用以下语法导入。

var dns = require("dns")

方法

序号 方法及描述
1

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

将主机名(例如“google.com”)解析为找到的第一个 A(IPv4)或 AAAA(IPv6)记录。options 可以是对象或整数。如果未提供 options,则 IP v4 和 v6 地址均有效。如果 options 是整数,则必须为 4 或 6。

2

dns.lookupService(address, port, callback)

使用 getnameinfo 将给定的地址和端口解析为主机名和服务。

3

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

将主机名(例如“google.com”)解析为由 rrtype 指定的记录类型的数组。

4

dns.resolve4(hostname, callback)

与 dns.resolve() 相同,但仅适用于 IPv4 查询(A 记录)。addresses 是 IPv4 地址的数组(例如 ['74.125.79.104', '74.125.79.105', '74.125.79.106'])。

5

dns.resolve6(hostname, callback)

与 dns.resolve4() 相同,但适用于 IPv6 查询(AAAA 查询)。

6

dns.resolveMx(hostname, callback)

与 dns.resolve() 相同,但仅适用于邮件交换查询(MX 记录)。

7

dns.resolveTxt(hostname, callback)

与 dns.resolve() 相同,但仅适用于文本查询(TXT 记录)。addresses 是主机名可用的文本记录的二维数组(例如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。每个子数组包含一个记录的 TXT 块。根据用例,可以将它们连接在一起或单独处理。

8

dns.resolveSrv(hostname, callback)

与 dns.resolve() 相同,但仅适用于服务记录(SRV 记录)。addresses 是主机名可用的 SRV 记录的数组。SRV 记录的属性是优先级、权重、端口和名称(例如,[{‘priority’: 10, ‘weight’: 5, ‘port’: 21223, ‘name’: ‘service.example.com’}, …])。

9

dns.resolveSoa(hostname, callback)

与 dns.resolve() 相同,但仅适用于授权起始记录查询(SOA 记录)。

10

dns.resolveNs(hostname, callback)

与 dns.resolve() 相同,但仅适用于名称服务器记录(NS 记录)。addresses 是主机名可用的名称服务器记录的数组(例如,['ns1.example.com', 'ns2.example.com'])。

11

dns.resolveCname(hostname, callback)

与 dns.resolve() 相同,但仅适用于规范名称记录(CNAME 记录)。addresses 是主机名可用的规范名称记录的数组(例如,['bar.example.com'])。

12

dns.reverse(ip, callback)

反向解析 IP 地址到主机名数组。

13

dns.getServers()

返回当前用于解析的 IP 地址(字符串)数组。

14

dns.setServers(servers)

给定一个 IP 地址(字符串)数组,将其设置为用于解析的服务器。

rrtypes

以下是 dns.resolve() 方法使用的有效 rrtypes 列表:

  • A - IPv4 地址,默认

  • AAAA - IPv6 地址

  • MX - 邮件交换记录

  • TXT - 文本记录

  • SRV - SRV 记录

  • PTR - 用于反向 IP 查找

  • NS - 名称服务器记录

  • CNAME - 规范名称记录

  • SOA - 授权起始记录

错误代码

每个 DNS 查询可以返回以下错误代码之一:

  • dns.NODATA - DNS 服务器返回的答案没有数据。

  • dns.FORMERR - DNS 服务器声称查询格式错误。

  • dns.SERVFAIL - DNS 服务器返回一般性故障。

  • dns.NOTFOUND - 未找到域名。

  • dns.NOTIMP - DNS 服务器未实现请求的操作。

  • dns.REFUSED - DNS 服务器拒绝查询。

  • dns.BADQUERY - DNS 查询格式错误。

  • dns.BADNAME - 主机名格式错误。

  • dns.BADFAMILY - 不支持的地址族。

  • dns.BADRESP - DNS 应答格式错误。

  • dns.CONNREFUSED - 无法联系 DNS 服务器。

  • dns.TIMEOUT - 联系 DNS 服务器时超时。

  • dns.EOF - 文件结束。

  • dns.FILE - 读取文件错误。

  • dns.NOMEM - 内存不足。

  • dns.DESTRUCTION - 正在销毁通道。

  • dns.BADSTR - 字符串格式错误。

  • dns.BADFLAGS - 指定了非法标志。

  • dns.NONAME - 给定的主机名不是数字。

  • dns.BADHINTS - 指定了非法的提示标志。

  • dns.NOTINITIALIZED - c-ares 库初始化尚未执行。

  • dns.LOADIPHLPAPI - 加载 iphlpapi.dll 错误。

  • dns.ADDRGETNETWORKPARAMS - 找不到 GetNetworkParams 函数。

  • dns.CANCELLED - DNS 查询已取消。

示例

创建一个名为 main.js 的 js 文件,其中包含以下代码:

var dns = require('dns');

dns.lookup('www.google.com', function onLookup(err, address, family) {
   console.log('address:', address);
   dns.reverse(address, function (err, hostnames) {
      if (err) {
         console.log(err.stack);
      }

      console.log('reverse for ' + address + ': ' + JSON.stringify(hostnames));
   });  
});

现在运行 main.js 以查看结果:

$ node main.js

验证输出。

address: 173.194.46.83
reverse for 173.194.46.83: ["ord08s11-in-f19.1e100.net"]
nodejs_utitlity_module.htm
广告

© . All rights reserved.