Node.js dns模块用于执行实际的DNS查找以及使用基础操作系统名称解析功能。
此模块提供异步网络包装,可以使用以下语法导入。var dns = require("dns")
26.1. 方法
dns.lookup(hostname[, options], callback)
:将主机名(例如“google.com”)解析为第一个找到的A(IPv4)或AAAA(IPv6)记录。 options可以是对象或整数。 如果未提供选项,则IP v4和v6地址均有效。 如果options是整数,则它必须是4或6。dns.lookupService(address, port, callback)
:使用getnameinfo将给定的地址和端口解析为主机名和服务。dns.resolve(hostname[, rrtype], callback)
:将主机名(例如“google.com”)解析为rrtype指定的记录类型数组。dns.resolve4(hostname, callback)
:与dns.resolve()
相同,但仅适用于IPv4查询(A记录)。 地址是IPv4地址的数组(例如[’74 .125.79.104’,’74 .125.79.105’,’74 .125.79.106′]
)。dns.resolve6(hostname, callback)
:与dns.resolve4()
相同,但IPv6查询(AAAA查询)除外。dns.resolveMx(hostname, callback)
:与dns.resolve()
相同,但仅适用于邮件交换查询(MX记录)。dns.resolveTxt(hostname, callback)
:与dns.resolve()
相同,但仅适用于文本查询(TXT记录)。 地址是可用于主机名的文本记录的二维数组(例如[[‘v = spf1 ip4:0.0.0.0’,’~all’]]
)。 每个子数组包含一个记录的TXT块。 根据使用情况,它们可以连接在一起或单独处理。dns.resolveSrv(hostname, callback)
:与dns.resolve()
相同,但仅适用于服务记录(SRV记录)。 地址是可用于主机名的SRV记录的数组。 SRV记录的属性是优先级,权重,端口和名称(例如[{‘priority’:10,’weight’:5,’port’:21223,’name’:’service.example.com’} ,. ..]
)。dns.resolveSoa(hostname, callback)
:与dns.resolve()
相同,但仅用于启动权限记录查询(SOA记录)。dns.resolveNs(hostname, callback)
:与dns.resolve()
相同,但仅适用于名称服务器记录(NS记录)。 地址是可用于主机名的名称服务器记录的数组(例如[‘ns1.example.com’,’ns2.example.com’]
)。dns.resolveCname(hostname, callback)
:与dns.resolve()
相同,但仅适用于规范名称记录(CNAME记录)。 地址是可用于主机名的规范名称记录的数组(例如[‘bar.example.com’]
)。dns.reverse(ip, callback)
:反向将IP地址解析为主机名数组。dns.getServers()
:返回一个IP地址数组,作为当前用于解析的字符串。dns.setServers(servers)
:给定一组IP地址作为字符串,将它们设置为用于解析的服务器。
26.2. rrtypes
以下是 dns.resolve()
方法使用的有效rrtype列表:
- A :IPV4地址,默认
- AAAA :IPV6地址
- MX :邮件交换记录
- TXT :文本记录
- SRV :SRV记录
- PTR :用于反向IP查找
- NS :名称服务器记录
- CNAME :规范名称记录
- SOA :权威记录的开始
26.3. 错误代码
每个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查询已取消。
26.4. 示例
使用以下代码创建名为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"]
下一节:Node.js domain模块用于拦截未处理的错误。 可以使用内部绑定或外部绑定拦截这些未处理的错误。 如果根本没有处理错误,那么它们只会使Node应用程序崩溃。