方法和属性
- 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
参数会是一组由以下属性构成的对象:
priority
weight
port
name
{
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
参数会是一组由以下属性构成的对象:
nsname
hostmaster
serial
refresh
retry
expire
minttl
{
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
});