方法和属性
- dns.setServers(servers)
- dns.getServers()
- dns.resolve(hostname[, rrtype], callback)
- dns.resolve4(hostname, callback)
- dns.resolve6(hostname, callback)
- dns.resolveMx(hostname, callback)
- dns.resolveTxt(hostname, callback)
- dns.resolveSrv(hostname, callback)
- dns.resolveNs(hostname, callback)
- dns.resolveCname(hostname, callback)
- dns.resolveSoa(hostname, callback)
- dns.reverse(ip, callback)
- dns.lookup(hostname[, options], callback)
- dns.lookupService(address, port, callback)
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 参数会包含一组带有 priority 和 exchange 属性的对象(如,[{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 参数会是一组由以下属性构成的对象:
priorityweightportname
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
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 参数会是一组由以下属性构成的对象:
nsnamehostmasterserialrefreshretryexpireminttl
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dns.reverse(ip, callback)
执行反向 DNS 查询将 IPv4 或 IPv6 地址解析为一组主机名。
callback 函数有参数 (err, hostnames)。hostnames 是一组用给定的 ip 解析后的主机名。
当发生错误时,err 是一个 Error 对象,err.code 是 DNS 错误码 中的一个。
dns.lookup(hostname[, options], callback)
解析主机名(如,'nodejs.org')到第一个找到的 A(IPv4)或 AAAA(IPv6)记录。options 可以是一个对象或整数。如果没有提供 options,那么 IPv4 和 IPv6 地址都是有效的。如果 options 是一个整数,那么它必须是 4 或 6。
另外,options 可以是包含这些属性的对象:
family: {Number} - 记录族。如果存在的话,必须是整数4或6。如果没有提供,IPv4 和 IPv6 的地址都可以接受。hints: {Number} - 如果存在的话,它应该是一种或多种被支持的getaddrinfo标志。如果没有提供hints,那么没有标志会传递给getaddrinfo。给hints的多个标志通过逻辑或(OR)运算的值传递。查阅支持的 getaddrinfo 标志 获取更多有关受支持的标志信息。all:{Boolean} 当为true时,回调函数会在一个数组里返回所有解析后的地址,否则返回一个单一地址。默认为false。
所有属性都是可选的。选项的使用示例如下所示。
{
family: 4,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
all: false
}
callback 函数有参数 (err, address, family)。address 是一个 IPv4 或 IPv6 地址的字符串表示。family 要么是整数 4 或 6 并代表着 address 族(不一定是最初传给 lookup 的值)。
若将选项 all 设为 true,参数变为 (err, addresses),addresses 变成一组由 address 和 family 属性组成的对象。
当发生错误时,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 的操作系统的底层实现来解析给定的 address 和 port 为主机名和服务器。
callback 函数有参数 (err, hostname, service)。hostname 和 service 参数是字符串(例如,分别为 'localhost' 和 'http')。
当发生错误时,err 是一个 Error 对象,其中 err.code 是错误码。
const dns = require('dns');
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});