美文网首页
Node之使用dns模块解析域名

Node之使用dns模块解析域名

作者: 27亿光年中的小小尘埃 | 来源:发表于2020-01-11 23:25 被阅读0次

    在网络编程中,开发者更倾向于使用域名,而不是IP地址来指定网络连接的目标地址。在Node.js中,提供dns模块,以实现域名查找及域名解析的处理。

    在dns模块中,提供了三个主方法及一系列便捷方法。其中三个主方法分别为用于将一个域名解析为一组DNS记录的resolve方法、用于将一个IP地址转换为一组域名的reverse方法以及用于将一个域名转换为一个IP地址的lookup方法,dns模块中的其余便捷方法均为resolve方法的一种便捷形式。

    使用resolve方法将域名解析为DNS记录

    resolve方法用于将一个域名解析为一组DNS记录。

    dns.resolve(domain,[rrtype],callback)
    
    • domain:参数值为一个字符串,用于指定需要被解析的域名,例如www.google.com,该域名字符串中可包括子域名。
    • rrtype:参数值为一个字符串,用于指定需要获取的记录类型,可指定的记录类型如下
      • “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服务器进行解析。
    • callback:参数值用于指定当域名解析操作完成时调用的回调函数
      function(err,addresses){
        //回调函数代码略
      }
      

    resolve方法解析实例

    var dns = require('dns');
      dns.resolve('www.google.com','A',function(e,r) {
      if (e) console.log(e);
      else console.log(r);
      });
    

    使用lookup方法查询IP地址

    当使用resolve4方法或resolve6方法时,由于callback参数值回调函数中的address参数值数组中存放所有获取到的IPv4地址或IPv6地址,因此,dns模块中也提供了另一个用于获取第一个被发现的IPv4地址或IPv6地址的lookup方法

    dns.lookup(domain,[family],callback)
    
    • domain:参数值为一个字符串,用于指定需要被解析的域名,例如www.google.com,该域名字符串中可包括子域名。
    • family:为一个整数值,用于指定需要获取的IP地址类型,可指定的参数值为4或6。当参数值为4时获取IPv4地址,当参数值为6时获取IPv6地址。默认参数值为null,表示既可获取IPv4地址,又可获取IPv6地址。
    • callback:参数值用于指定当域名解析操作完成时调用的回调函数
      function(err,address,family){
        //回调函数代码略
      }
      

    使用reverse方法反向解析IP地址

    在dns模块中,可以使用reverse方法将一个IP地址反向解析为一组与该IP地址
    绑定的域名。

    dns.reverse(ip,callback)
    
    • ip:为一个字符串,用于指定需要被反向解析的IP地址。
    • callback:用于指定当反向解析地址操作完成时调用的回调函数
      function(err,domains){
      //回调函数代码略
      }
      

    dns模块中的各种错误代码

    在dns模块中,在各种方法的callback参数值回调函数中,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时触发了一个错误。
    • EADDRGETNETWORKPARAMS:未发现GetNetworkParams函数。
    • ECANCELLED:DNS查询操作被取消。

    相关文章

      网友评论

          本文标题:Node之使用dns模块解析域名

          本文链接:https://www.haomeiwen.com/subject/oftiactx.html