当前位置: 首页 > 后端技术 > Node.js

Node.js学习之路17——DNS模块介绍

时间:2023-04-03 12:10:56 Node.js

1.DNSNode.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(NameServer)记录是域名服务器记录,用来指定由哪个DNS服务器来解析域名。回调函数有两个参数,err是域名解析失败时触发的错误对象,addresses参数是一个数组,里面存放的是获取到的所有DNS记录。3.为resolve方法定制的各种便捷方法DNS.resolve4(domain,callback),获取IPv4地址DNS.resolve6(domain,callback),获取IPv6地址DNS.resolveMx(domain,callback),获取MX记录,邮件交换Server记录DNS.resolveTxt(domain,callback),获取TXT记录,域名附加描述记录DNS.resolveSrv(domain,callback),获取SRV记录,服务记录DNS.resolveNs(domain,callback),获取NS记录,域名服务器记录DNS.resolveCname(domain,callback)获取别名记录4.使用lookup方法查询IP地址使用resolve4方法或resolve6方法时,由于回调参数值,回调函数中addresses参数值数组存储所有获得的IPv4地址或IPv6地址。因此,DNS模块提供了一种查找方法,获取最先发现的IPv4地址或IPv6地址`DNS.lookup(domain,[family],callback(err,addresses,family){...})`domain参数是一个用于指定要解析的域名的字符串。family参数值是一个整数值,用于指定要获取的IP地址类型。可以指定的参数值为4或6,默认参数值为null,表示两者都可以获取IPv4,获取IPv6回调函数err参数值作为地址获取失败时触发的错误对象获得。当域名不存在或查询失败时,错误对象的code属性值为ENOENTaddresses。参数值为字符串,即获取到的IP地址族参数的值为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:DNSserverreturnedaqueryresultwithnodataEFORMERR:DNSserverfoundthatqueryparameterformatwrong客户端请求查询ESERVFAIL:DNS服务器未能执行查询ENOTFOUND:未找到域名ENOTIMP:DNS服务器无法执行客户端请求的查询请求的查询操作EREFUSED:DNS服务器拒绝执行查询操作EBADQUERY:格式错误的DNS查询EBADNAME:域名格式错误EBADFAMILY:不支持的IP地址类型EBADRESP:DNS回复格式错误ECONNREFUSED:无法与DNS服务器建立连接ETIMEOUT:与DNS服务器的连接超时EEOF:已到达文件底部EFILE:失败读取文件ENOMEM:内存空间不足EDESTRUCTION:通道已被破坏EBADSTR:字符串格式错误EBADFLAGS:错误的判断标志ENONAMEisspecified:指定的主机名不是数字格式EBADHINTS:指定的提示标志无效ENOTINITIALIZED:c-ares类库的初始化还没有完成ELOADIPHLPAPI:加载iphlpapi.dll时触发了错误EADDREGETNETWORKPARAMS:GetNetworkParamsfunctionnotfoundECANCELLED:DNSqueryoperationwasinterruptedCancel7.DNS模块的基本用法constdns=require('dns');leturl='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=spf1include: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.dnect.net',//'ns-1283.awsdns-32.org',//'ns-1707.awsdns-21.co.uk']});dns.resolveCname('www.163.com',(err,addresses)=>{console.log(addresses);//get别名记录//['www.163.com.lxdns.com']});dns.lookup('google.com',4,(err,address,family)=>{//queryIPaddress//address,查询地址//family,IPv4orIPv6console.log(address);//172.217.27.142console.log(family);//4});dns.lookup('google.com',6,(err,address,family)=>{console.log(address);//2404:6800:4008:803::200econsole.log(family);//6});dns.reverse('203.188.200.67',(err,domain)=>{//反向解析IP地址console.log(domain);//['media-router-fp1.prod.media.vip.tp2.yahoo.com']});