Node.js中DNS模块学习总结

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],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,domains){...})`

  • ip参数值为一个字符串,用于指定需要解析的IP地址
  • 回调函数的err为反向解析地址失败后的错误对象
  • domains参数值为一个数组,存放了所有获取到的域名

6. DNS模块中的各种错误代码

err参数值为执行各种解析或反向解析操作时触发的错误对象,可根据该错误对象的code属性值,即触发的错误代号判断出发了什么错误

7. DNS模块的基本使用

dns.resolve(url,'A',(err,addresses) => {
console.log(addresses);
// IPv4地址 [ '103.7.30.123' ]
});

dns.resolve(url,'AAAA',addresses) => {
console.log(addresses);
// IPv6地址 [ '240e:e1:8100:28::2:16' ]
});
dns.resolveMx('qq.com',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',addresses) => {
console.log(addresses);
// 域名附加的描述记录
// [ [ 'v=spf1 include:spf.mail.qq.com -all' ] ]
});

dns.resolveSrv('www.baidu.com',addresses) => {
console.log(addresses);
// 服务记录
// []
});

dns.resolveNs('www.github.com',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',addresses) => {
console.log(addresses);
// 获取别名记录
// [ 'www.163.com.lxdns.com' ]
});

dns.lookup('google.com',4,address,family) => {
// 查询IP地址
// address,查询到的地址
// family,IPv4或IPv6
console.log(address);// 172.217.27.142
console.log(family);// 4
});

dns.lookup('google.com',6,family) => {
console.log(address);// 2404:6800:4008:803::200e
console.log(family);// 6
});

dns.reverse('203.188.200.67',domain) => {
// 反向解析IP地址
console.log(domain);
// [ 'media-router-fp1.prod.media.vip.tp2.yahoo.com' ]
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...