1. DNS
在Node.js中,供应DNS
模块,以完成域名查找及域名剖析的处置惩罚。
- 在
DNS
模块中,供应了三个主要领及一系列便利要领。 -
resolve
要领:用于将一个域名剖析为一组DNS
纪录。 -
reverse
要领: 用于将IP
地点转换为一组域名。 -
lookup
要领: 用于将一个域名转换成IP
地点。 -
DNS
模块中的其他便利要领均为resolve
要领的一种便利情势。
2. 运用resolve
要领将域名剖析为DNS
纪录
`DNS
.resolve(domain, [rrtype], callback(err, address){…})`
-
domain
参数为一个字符串,用于指定须要被剖析的域名,能够包含子域名。 rrtypr
参数为一个字符串,用于指定须要猎取的纪录范例,可指定的纪录范例以下。-
A
,该参数值为默许值,当纪录范例为A
时,该纪录将一个IPv4
地点映照为一个域名。 -
AAAA
,当纪录范例为AAAA
时,该纪录将一个IPv6
地点映照为一个域名。 -
CNAME
,当纪录范例为CNAME
时,示意该纪录为一个域名的别号纪录,比方,一个www.example.com
域名纪录或许为一个example.com
域名纪录额别号纪录。 -
MX
,MX
纪录指向一个运用SMTP的域中的邮件效劳器,比方,当你想person@domain.com
邮件地点发送电子邮件时,domain.com
域的MX
纪录中保留了发送该邮件时的邮件效劳器地点。 -
TXT
,TXT
纪录是为该域名附加的形貌纪录。 -
SRV
,SRV
纪录用于为一个特定域中一切可用效劳供应信息。 -
PTR
,PTR
纪录用于反向地点剖析,该纪录将一个域名映照为一个IPv4
地点。 -
NS
,NS(Name Server)
纪录是域名效劳器纪录,用来指定该域名由哪一个DNS
效劳器举行剖析。
-
- 回调函数有两个参数,
err
是域名剖析失利时触发的毛病对象,addresses
参数为一个数组,个中存放了一切猎取到的DNS
纪录。
3. 为resolve
要领定制的种种便利要领
-
DNS.resolve4(domain, callback)
,猎取IPv4
地点 -
DNS.resolve6(domain, callback)
,猎取IPv6
地点 -
DNS.resolveMx(domain, callback)
,猎取MX
纪录,邮件交流效劳器纪录 -
DNS.resolveTxt(domain, callback)
,猎取TXT
纪录,域名附加的形貌纪录 -
DNS.resolveSrv(domain, callback)
,猎取SRV
纪录,效劳纪录 -
DNS.resolveNs(domain, callback)
,猎取NS
纪录,域名效劳器纪录 -
DNS.resolveCname(domain, callback)
,猎取别号纪录
4. 运用lookup
要领查询IP
地点
当运用resolve4
要领或许resolve6
要领时,因为callback
参数值回调函数中的addresses
参数值数组中存放着一切猎取到的IPv4
地点或IPv6
地点。因而DNS
模块中供应了一个猎取第一个被发明的IPv4
地点或许IPv6
地点的lookup
要领`DNS
.lookup(domain, [family], callback(err, addresses, family){…})`
-
domain
参数为一个字符串,用于指定须要剖析的域名 -
family
参数值为一个整数值,用于指定须要猎取的IP
地点范例,可指定的参数值为4
或6
,默许参数值为null
,示意既能够猎取IPv4
,又能够猎取IPv6
- 回调函数
err
参数值为猎取地点失利时触发的毛病对象,当域名不存在或查询失利时该毛病对象的code
属性值为ENOENT
-
addresses
参数值为一个字符串,为猎取到的IP
地点 -
family
参数值为4
时,示意为一个IPv4
地点,为6
时,示意为一个IPv6
地点。
5. 运用reverse
要领反向剖析IP
地点
在DNS
模块中,运用reverse
要领将一个IP
地点反向剖析为一组与该IP
地点绑定的域名`DNS
.reverse(ip, callback(err, domains){…})`
-
ip
参数值为一个字符串,用于指定须要剖析的IP地点 - 回调函数的
err
为反向剖析地点失利后的毛病对象 -
domains
参数值为一个数组,存放了一切猎取到的域名
6. DNS
模块中的种种毛病代码
err参数值为实行种种剖析或反向剖析操纵时触发的毛病对象,可根据该毛病对象的code
属性值,即触发的毛病代号推断出发了什么毛病
-
ENODATA
:DNS
效劳器返回一个没有数据的查询效果 -
EFORMERR
:DNS
效劳器发明客户端要求查询时运用了花样毛病的查询参数 -
ESERVFAIL
:DNS
效劳器实行查询操纵失利 -
ENOTFOUND
:未发明任何域名 -
ENOTIMP
:DNS
效劳器不能举行客户端所要求的查询操纵 -
EREFUSED
:DNS
效劳器谢绝举行查询操纵 -
EBADQUERY
:花样毛病的DNS
查询 -
EBADNAME
:域名花样毛病 -
EBADFAMILY
:不支持的IP
地点范例 -
EBADRESP
:DNS
回复的花样毛病 -
ECONNREFUSED
:不能竖立与DNS
效劳器之间的衔接 -
ETIMEOUT
:与DNS
效劳器之间竖立衔接超时 -
EEOF
:已抵达文件底部 -
EFILE
:读取文件失利 -
ENOMEM
:没有充足的内存空间 -
EDESTRUCTION
:通道已被烧毁 -
EBADSTR
:字符串花样毛病 -
EBADFLAGS
:指定了毛病的推断标志 -
ENONAME
:指定的主机名不是数值花样的 -
EBADHINTS
:指定的提醒标志无效 -
ENOTINITIALIZED
:c-ares
类库初始化事情还没有完成 -
ELOADIPHLPAPI
:加载iphlpapi.dll
时触发了一个毛病 -
EADDREGETNETWORKPARAMS
:未发明GetNetworkParams
函数 -
ECANCELLED
:DNS
查询操纵被作废
7. DNS
模块的基础运用
const dns = require('dns');
let url = 'www.qq.com';
dns.resolve(url, 'A', (err, addresses) => {
console.log(addresses);
// IPv4地点 [ '103.7.30.123' ]
});
dns.resolve(url, 'AAAA', (err, addresses) => {
console.log(addresses);
// IPv6地点 [ '240e:e1:8100:28::2:16' ]
});
dns.resolveMx('qq.com', (err, addresses) => {
console.log(addresses);
// 邮件交流效劳器纪录
// [ { exchange: 'mx2.qq.com', priority: 20 },
// { exchange: 'mx1.qq.com', priority: 30 },
// { exchange: 'mx3.qq.com', priority: 10 } ]
});
dns.resolveTxt('qq.com', (err, addresses) => {
console.log(addresses);
// 域名附加的形貌纪录
// [ [ 'v=spf1 include:spf.mail.qq.com -all' ] ]
});
dns.resolveSrv('www.baidu.com', (err, addresses) => {
console.log(addresses);
// 效劳纪录
// []
});
dns.resolveNs('www.github.com', (err, addresses) => {
console.log(addresses);
// 域名效劳器纪录
// [ 'ns-421.awsdns-52.com',
// 'ns-520.awsdns-01.net',
// 'ns1.p16.dynect.net',
// 'ns2.p16.dynect.net',
// 'ns3.p16.dynect.net',
// 'ns4.p16.dynect.net',
// 'ns-1283.awsdns-32.org',
// 'ns-1707.awsdns-21.co.uk' ]
});
dns.resolveCname('www.163.com', (err, addresses) => {
console.log(addresses);
// 猎取别号纪录
// [ 'www.163.com.lxdns.com' ]
});
dns.lookup('google.com', 4, (err, address, family) => {
// 查询IP地点
// address,查询到的地点
// family,IPv4或IPv6
console.log(address);// 172.217.27.142
console.log(family);// 4
});
dns.lookup('google.com', 6, (err, address, family) => {
console.log(address);// 2404:6800:4008:803::200e
console.log(family);// 6
});
dns.reverse('203.188.200.67', (err, domain) => {
// 反向剖析IP地点
console.log(domain);
// [ 'media-router-fp1.prod.media.vip.tp2.yahoo.com' ]
});