Node.js——dns模块

张开发
2026/4/5 19:58:59 15 分钟阅读

分享文章

Node.js——dns模块
dns模块1、resolve方法将域名解析为DNS记录2、lookup方法查询IP地址3、reverse方法反向解析IP地址4、dns模块中的各种错误代码在网络编程中开发者更倾向于使用域名而不是IP地址来指定网络连接的目标地址。在Node.js中提供dns模块以实现域名查找及域名解析的处理。在dns模块中提供了三个主方法及一系列便捷方法。其中三个主方法分别为用于将一个域名解析为一组DNS记录的resolve方法、用于将一个IP地址转换为一组域名的reverse方法以及用于将一个域名转换为一个IP地址的lookup方法dns模块中的其余便捷方法均为resolve方法的一种便捷形式。1、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的域中的邮件服务器。例如当你向persondomain.com邮件地址发送电子邮件时domain.com域的MX记录中保存了发送该邮件时的邮件服务器地址。“TXT”​TXT记录是为该域名附加的描述记录。“SRV”​SRV记录用于为一个特定域中所有可用服务提供信息。“PTR”​PTR记录用于反向地址解析该记录将一个域名映射为一个IPv4地址。“NS”​NSName Server记录是域名服务器记录用来指定该域名由哪个DNS服务器进行解析。callbackcallback参数值用于指定当域名解析操作完成时调用的回调函数该回调函数的指定方法如下所示。function(err,addresses){//回调函数代码略}err解析失败时触发的错误对象addresses一个数组其中存放了所有获取到的DNS记录示例使用resolve方法解析“www.baidu.com”域名并获取所有记录类型为“A”的DNS记录当记录类型为“A”时DNS记录为“www.baidu.com”域名的所有IPv4地址​如果解析失败在控制台中输出解析失败时触发的错误对象如果解析成功在控制台中输出所有获取到的IPv4地址。constdnsrequire(dns);dns.resolve(www.baidu.com,A,(e,r){if(e){console.log(e);}else{console.log(r);}});[220.181.111.1,220.181.111.232]在dns模块中为resolve方法定制了各种便捷方法所有这些方法都使用一个domain参数与一个callback参数这两个参数的用途及指定方法与resolve方法中所使用的domain参数与callback参数的用途及指定方法完全相同。这些方法见表方法说明dns.resolve4(domain, callback)用于获取记录类型为“A”的DNS记录即IPv4地址callback参数值回调函数中的address参数值数组中存放所有获取到的Pv4地址例如[‘74.125.79.104’,74.125.79.105,74.125.79.106]dns.resolve6(domain, callback)用于获取记录类型为“AAAA”的DNS记录即IPv6地址callback参数值回调函数中的address参数值数组中存放所有获取到的IPv6地址例如[2404:6800:4005:803:1010]dns.resolveMx(domain, callback)用于获取MX记录即邮件交换服务器记录callback参数值回调函数中的address参数值数组中存放所有获取到的MX记录每条记录中都包含个priority(优先级)属性及一个exchange(邮件交换服务器)属性例如[{priority:10,‘exchange’:mx.example.com)]dns.resolveTxt(domain, callback)用于获取TXT记录即为该域名附加的描述记录callback参数值回调函数中的address参数值数组中存放所有获取到的TXT记录例如[vspfl ip4:0.0.0.0~all]dns.resolveSrv(domain, callback)用于获取SRV记录即服务记录callback参数值回调函数中的address参数值数组中存放所有获取到的SRV记录每条记录中都包含一个priority(优先级)属性、一个weight(权重)属性、一个port(端口号)属性及一个name域名)属性例如[{priority’:l0,{‘weight’:5,‘port’:2l223,name:‘service.example.com’)]dns.resolveNs(domain, callback)用于获取NS记录即域名服务器记录callback参数值回调函数中的address参数值数组中存放所有获取到的域名服务器例如[‘nsl.example.com’,‘ns2.example.com’]dns.resolveCname(domain, callback)用于获取别名记录callback参数值回调函数中的address参数值数组中存放所有获取到的别名记录例如[bar.example.com]示例使用resolveMx方法解析“google.com”域名并获取所有邮件交换服务器记录如果解析失败在控制台中输出解析失败时触发的错误对象如果解析成功在控制台中输出所有获取到的邮件交换服务器记录。constdnsrequire(dns);dns.resolveMx(google.com,(err,addresses){if(err){console.log(err);}console.log(addresses);});[{exchange:smtp.google.com,priority:10}]2、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地址。callbackcallback参数值用于指定当获取地址操作完成时调用的回调函数该回调函数的指定方法如下所示。function(err,address,family){//回调函数代码略}err获取地址失败时触发的错误对象当域名不存在或查询失败时该错误对象的code属性值为ENOENTaddress一个字符串字符串值为获取到的IP地址family:一个整数用于标识获取到的IP地址类型。当family参数值为4时表示该地址为一个IPv4地址当family参数值为6时表示该地址为一个IPv6地址。示例使用lookup方法获取“google.com”域名的IPv4地址如果获取地址失败那么在控制台中输出获取地址失败时触发的错误对象如果获取地址成功那么在控制台中输出获取到的IPv4地址。constdnsrequire(dns);dns.lookup(google.com,4,(err,address){if(err){console.log(err);}else{console.log(address);}});142.251.45.1423、reverse方法反向解析IP地址在dns模块中可以使用reverse方法将一个IP地址反向解析为一组与该IP地址绑定的域名。该方法的使用方式如下所示。dns.reverse(ip,callback)ip一个字符串用于指定需要被反向解析的IP地址callback指定当反向解析地址操作完成时调用的回调函数该回调函数的指定方法如下所示。function(err,domains){//回调函数代码略}err反向解析地址失败时触发的错误对象domains一个数组其中存放了所有获取到的域名示例使用reverse方法反向解析“202.165.102.205”地址如果反向解析失败在控制台中输出反向解析失败时触发的错误对象如果反向解析成功在控制台中输出所有获取到的域名。constdnsrequire(dns);dns.reverse(202.165.102.205,(err,domain){if(err){console.log(err);}else{console.log(domain);}});[unknown.yahoo.com]4、dns模块中的各种错误代码在dns模块中在各种方法的callback参数值回调函数中err参数值为执行各种解析或反向解析操作时触发的错误对象可根据该错误对象的code属性值即触发的错误代号判断触发了什么错误。这些错误代号及其含义如下所示。ENODATADNS服务器返回一个没有数据的查询结果。EFORMERRDNS服务器发现客户端请求查询时使用了格式错误的查询参数。ESERVFAILDNS服务器执行查询操作失败。ENOTFOUND未发现任何域名。ENOTIMPDNS服务器不能进行客户端所请求的查询操作。EREFUSEDDNS服务器拒绝进行查询操作。EBADQUERY格式错误的DNS查询。EBADNAME域名格式错误。EBADFAMILY不支持的IP地址类型。EBADRESPDNS答复的格式错误。ECONNREFUSED不能建立与DNS服务器之间的连接。ETIMEOUT与DNS服务器之间建立连接超时。EEOF已到达文件底部。EFILE读取文件失败。ENOMEM没有足够的内存空间。EDESTRUCTION通道已被销毁。EBADSTR字符串格式错误。EBADFLAGS指定了错误的判断标志。ENONAME指定的主机名不是数值格式的。ENOTINITIALIZEDc-ares类库初始化工作尚未完成。ELOADIPHLPAPI加载iphlpapi.dll时触发了一个错误。EADDRGETNETWORKPARAMS未发现GetNetworkParams函数。ECANCELLEDDNS查询操作被取消。

更多文章