原版的API品种,这是从以前的翻译和翻译风格不同

​​​ DNS


使用 ​​require('dns')​​ 引入此模块。

dns 模块中的全部方法都使用了 C-Ares,除了 ​ ​dns.lookup​​ 使用了线程池中的 ​​getaddrinfo(3)​​。

C-Ares 比 ​ ​getaddrinfo​​ 要快得多,但系统解析器相对于其他程序的操作要更固定。

当一个用户使用 ​​net.connect(80, 'google.com')​ ​ 或 ​​http.get({ host: 'google.com' })​ ​ 时会使用 ​​dns.lookup​​方法。

假设用户须要进行大量的高速查询,则最好使用 C-Ares 提供的方法。


以下是一个解析 ​​'www.google.com'​​ 并反向解析所返回 IP 地址的样例。



var dns = require('dns');

dns.resolve4('www.google.com', function (err, addresses) {
if (err) throw err;

console.log('addresses: ' + JSON.stringify(addresses));

addresses.forEach(function (a) {
dns.reverse(a, function (err, domains) {
if (err) {
throw err;
}

console.log('reverse for ' + a + ': ' + JSON.stringify(domains));
});
});
});


dns.lookup(domain, [family], callback)

将一个域名(比方 ​​'google.com'​​)解析为第一个找到的 A 记录(IPv4)或 AAAA 记录(IPv6)。地址族​


​family​​ 能够是数字 ​​4​​ 或 ​​6​​,缺省为 ​​null​​ 表示同一时候同意 IPv4 和 IPv6 地址族。




回调參数为 ​​(err, address, family)​ ​。地址 ​​address​​ 參数为一个代表 IPv4 或 IPv6 地址的字符串。

地址族​​family​​ 參数为数字 4 或 6。地表 ​ ​address​​ 的地址族(不一定是之前传入 ​​lookup​​ 的值)。


当发生错误时,​​err​​ 为一个 ​​Error​​ 对象,当中 ​​err.code​​ 为错误代码。请记住 ​​err.code​​ 被设定为 ​​'ENOENT'​​的情况不仅是域名不存在,也可能是查询在其他途径出错,比方没有可用文件描写叙述符时。



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

将一个域名(比方 ​​'google.com'​​)解析为一个 ​​rrtype​​ 指定记录类型的数组。

有效 ​​rrtypes​​ 取值有​​'A'​​(IPv4 地址。缺省)、​ ​'AAAA'​​(IPv6 地址)、​ ​'MX'​​(邮件交换记录)、​​'TXT'​​(文本记录)、​​'SRV'​​(SRV 记录)、​ ​'PTR'​​(用于 IP 反向查找)、​ ​'NS'​​(域名server记录)和 ​​'CNAME'​​(别名记录)。



回调參数为 ​​(err, addresses)​ ​。当中 ​​addresses​​ 中每一项的类型取决于记录类型,详见下文相应的查找方法。


当出错时,​​err​​ 參数为一个 ​​Error​​ 对象,当中 ​​err.code​​ 为下文所列出的错误代码之中的一个。



dns.resolve4(domain, callback)

于 ​​dns.resolve()​​ 一样。但仅仅用于查询 IPv4(​


​A​​ 记录)。

​addresses​​ 是一个 IPv4 地址的数组(比方​ ​['74.125.79.104', '74.125.79.105', '74.125.79.106']​ ​)。




dns.resolve6(domain, callback)

类似于 ​​dns.resolve4()​​。但用于 IPv6(​


​AAAA​​)查询。


dns.resolveMx(domain, callback)

类似于 ​​dns.resolve()​​,但用于邮件交换查询(​​MX​​ 记录)。

​addresses​​ 为一个 MX 记录的数组,每一项包括优先级和交换属性(比方 ​ ​[{'priority': 10, 'exchange': 'mx.example.com'},...]​ ​)。




dns.resolveTxt(domain, callback)

与 ​​dns.resolve()​​ 相似,但用于文本查询(​​TXT​​ 记录)。​​addresses​​ 为 ​​domain​​ 可用文本记录的数组(比方​​['v=spf1 ip4:0.0.0.0 ~all']​ ​)。




dns.resolveSrv(domain, callback)

查询 SRV 记录,与 ​​dns.resolve()​​ 相似。 ​​addresses​​ 是域名 ​​domain​​ 可用的 SRV 记录数组, 每一条记录都包括优先级(priority)、权重(weight)、端口号(port)、服务名称(name)等属性 (比方: ​


​[{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]​ ​)。




dns.resolveNs(domain, callback)

查询 NS 记录,与 ​​dns.resolve()​​ 相似。 ​​addresses​​ 是域名 ​​domain​​ 可用的 NS 记录数组, (列如:​


​['ns1.example.com', 'ns2.example.com']​​)。


dns.resolveCname(domain, callback)

查询 CNAME 记录,与 ​​dns.resolve()​​ 相似。 ​​addresses​​ 是域名 ​​domain​​ 可用的 CNAME 记录数组, (比如:​


​['bar.example.com']​​)。


dns.reverse(ip, callback)

反向解析 IP 地址。返回指向该 IP 地址的域名数组。



回调函数接收两个參数: ​​(err, domains)​ ​ 。


当出错时,​​err​​ 參数为一个 ​​Error​​ 对象,当中 ​​err.code​​ 为下文所列出的错误代码之中的一个。



Error codes

每一个 DNS 查询都可能返回下列错误代码之中的一个:


  • dns.NODATA
    : DNS server返回无数据应答。
  • dns.FORMERR
    : DNS 声称查询格式错误。
  • dns.SERVFAIL
    : DNS server返回一般失败。
  • dns.NOTFOUND
    : 域名未找到。
  • dns.NOTIMP
    : DNS server未实现所请求操作。
  • dns.REFUSED
    : DNS server拒绝查询。
  • dns.BADQUERY
    : DNS 查询格式错误。
  • dns.BADNAME
    : 域名格式错误。
  • dns.BADFAMILY
    : 不支持的地址类型。
  • dns.BADRESP
    : DNS 答复格式错误。
  • dns.CONNREFUSED
    : 无法联系 DNS server。
  • dns.TIMEOUT
    : 联系 DNS server超时。
  • 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 搜索取消。