Node.js v0.10.31API手册-DNS

原API变化,故译文与之前译文样式上有所不同

Node.js v0.10.31API手册-目录

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‘(域名服务器记录)和 ‘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 服务器返回无数据应答。
  • 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 查询取消。
时间: 2024-10-04 08:38:05

Node.js v0.10.31API手册-DNS的相关文章

Node.js v0.10.31API手册-Domain

Node.js v0.10.31API手册-目录 Domain(域) Domains 提供了一种方式,即以一个单一的组的形式来处理多个不同的IO操作.如果任何一个注册到domain的事件触发器或回调触发了一个'error'事件,或者抛出一个错误,那么domain对象将会被通知到.而不是直接让这个错误的上下文从`process.on('uncaughtException')'处理程序中丢失掉,也不会致使程序因为这个错误伴随着错误码立即退出. 警告: 不要忽视错误! Domain error处理程序

Node.js v0.10.31API手册-事件

Node.js v0.10.31API手册-目录 Events(事件) Node里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件. 所有这些产生事件的对象都是events.EventEmitter的实例. 你可以通过require("events")来访问该模块. 通常,事件名是驼峰命名 (camel-cased) 的字符串.不过也没有强制的要求,任何字符串都是可以使用的. 为了

Node.js v0.10.31API手册-目录

这段时间,想找些新的技术学习学习,看上了Node.js,万丈高楼平地起,这就从它的API开始,然后就顺便翻译一下. Node.js v0.10.31API手册-简介 Node.js v0.10.31API手册-断言 Node.js v0.10.31API手册-Buffer Node.js v0.10.31API手册-Addons插件 持续更新中...

Node.js v0.10.31API手册-加密

加密(Crypto) 使用 require('crypto') 来调用该模块. crypto模块提供在HTTPS或HTTP连接中封装安全凭证的方法. 它提供OpenSSL中的一系列哈希方法,包括hmac.cipher.decipher.签名和验证等方法的封装. crypto.getCiphers() 返回一个数组,包含支持的加密算法的名字. 示例: var ciphers = crypto.getCiphers(); console.log(ciphers); // ['AES-128-CBC'

Node.js v0.10.31API手册-集群

集群 单个 Node 实例运行在单个线程中.要发挥多核系统的能力,用户有时候需要启动一个 Node 进程集群来处理负载. 集群模块允许你方便地创建一个共享服务器端口的进程网络. var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0;

Node.js v0.10.31API手册-子进程

子进程 Node 通过 child_process 模块提供了类似 popen(3) 的处理三向数据流(stdin/stdout/stderr)的功能. 它能够以完全非阻塞的方式与子进程的 stdin.stdout 和 stderr 以流式传递数据.(请注意,某些程序在内部使用行缓冲 I/O.这不会影响到 node.js,但您发送到子进程的数据不会被立即消费.) 使用 require('child_process').spawn()或者 require('child_process').fork

Node.js v0.10.31API手册-Addons插件

Addons Addons插件就是动态连接库.Addons插件将Node与C库和C++库链接起来.它的API(目前来说)相当复杂,涉及到了几个类库的知识. V8 JavaScript引擎是一个 C++ 类库..用于和JavaScript进行交互的接口.创建对象, 调用函数等. 文档大部分在这里:v8.h 头文件 (deps/v8/include/v8.h在Node源代码目录里), 也有可用的线上文档线上. libuv, C语言编写的事件循环类库.任何时候需要等待一个文件描述符变为可读状态,等待一

Node.js v0.10.31API手册-控制台

控制台 Object 用于向 stdout 和 stderr 打印字符.类似于大部分 Web 浏览器提供的 console 对象函数,在这里则是输出到 stdout 或 stderr. 当输出目标是一个终端或者文件时,console函数是同步的(为了防止过早退出时丢失信息).当输出目标是一个管道时它们是异步的(防止阻塞过长时间). 也就是说,在下面的例子中,stdout 是非阻塞的,而 stderr 则是阻塞的. $ node script.js 2> error.log | tee info.

Node.js v0.10.31API手册-Debugger

Debugger V8 提供了一个强大的调试器,可以通过 TCP 协议从外部访问.Node 内建了这个调试器的客户端.要使用调试器,以 debug 参数启动 Node,出现提示符: % node debug myscript.js < debugger listening on port 5858 connecting... ok break in /home/indutny/Code/git/indutny/myscript.js:1 1 x = 5; 2 setTimeout(functio