Node.js教程之DNS 模块
沉沙 2018-06-06 来源 : 阅读 999 评论 0

摘要:本篇教程讲解了DNS 模块,Node.js DNS 模块用于解析域名。希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

Node.js DNS 模块用于解析域名。引入 DNS 模块语法格式如下:

var dns = require("dns")

 

方法

1dns.lookup(hostname[, options], callback):将域名(比如 'runoob.com')解析为第一条找到的记录 A (IPV4)或 AAAA(IPV6)。参数 options可以是一个对象或整数。如果没有提供 options,IP v4 和 v6 地址都可以。如果 options 是整数,则必须是 4 或 6。

   

2dns.lookupService(address, port, callback):使用 getnameinfo 解析传入的地址和端口为域名和服务。

   

3dns.resolve(hostname[, rrtype], callback):将一个域名(如 'runoob.com')解析为一个 rrtype 指定记录类型的数组。

   

4dns.resolve4(hostname, callback):和 dns.resolve() 类似, 仅能查询 IPv4 (A 记录)。 addresses IPv4 地址数组 (比如,['74.125.79.104', '74.125.79.105', '74.125.79.106'])。

   

5dns.resolve6(hostname, callback):和 dns.resolve4() 类似, 仅能查询 IPv6( AAAA 查询)

   

6dns.resolveMx(hostname, callback):和 dns.resolve() 类似, 仅能查询邮件交换(MX 记录)。

   

7dns.resolveTxt(hostname, callback):和 dns.resolve() 类似, 仅能进行文本查询 (TXT 记录)。 addresses 是 2-d 文本记录数组。(比如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。 每个子数组包含一条记录的 TXT 块。根据使用情况可以连接在一起,也可单独使用。

   

8dns.resolveSrv(hostname, callback):和 dns.resolve() 类似, 仅能进行服务记录查询 (SRV 记录)。 addresses 是 hostname可用的 SRV 记录数组。 SRV 记录属性有优先级(priority),权重(weight), 端口(port), 和名字(name) (比如,[{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...])。

   

9dns.resolveSoa(hostname, callback):和 dns.resolve() 类似, 仅能查询权威记录(SOA 记录)。

   

10dns.resolveNs(hostname, callback):和 dns.resolve() 类似, 仅能进行域名服务器记录查询(NS 记录)。 addresses 是域名服务器记录数组(hostname 可以使用) (比如, ['ns1.example.com', 'ns2.example.com'])。

   

11dns.resolveCname(hostname, callback):和 dns.resolve() 类似, 仅能进行别名记录查询 (CNAME记录)。addresses 是对 hostname 可用的别名记录数组 (比如,, ['bar.example.com'])。

   

12dns.reverse(ip, callback):反向解析 IP 地址,指向该 IP 地址的域名数组。

   

13dns.getServers():返回一个用于当前解析的 IP 地址数组的字符串。

   

14dns.setServers(servers):指定一组 IP 地址作为解析服务器。

   

rrtypes

以下列出了 dns.resolve() 方法中有效的 rrtypes值:

· 'A' IPV4 地址, 默认

· 'AAAA' IPV6 地址

· 'MX' 邮件交换记录

· 'TXT' text 记录

· 'SRV' SRV 记录

· 'PTR' 用来反向 IP 查找

· 'NS' 域名服务器记录

· 'CNAME' 别名记录

· 'SOA' 授权记录的初始值

 

错误码

每次 DNS 查询都可能返回以下错误码:

· dns.NODATA: 无数据响应。

· dns.FORMERR: 查询格式错误。

· dns.SERVFAIL: 常规失败。

· dns.NOTFOUND: 没有找到域名。

· dns.NOTIMP: 未实现请求的操作。

· dns.REFUSED: 拒绝查询。

· dns.BADQUERY: 查询格式错误。

· dns.BADNAME: 域名格式错误。

· dns.BADFAMILY: 地址协议不支持。

· dns.BADRESP: 回复格式错误。

· dns.CONNREFUSED: 无法连接到 DNS 服务器。

· dns.TIMEOUT: 连接 DNS 服务器超时。

· dns.EOF: 文件末端。

· dns.FILE: 读文件错误。

· dns.NOMEM: 内存溢出。

· dns.DESTRUCTION: 通道被摧毁。

· dns.BADSTR: 字符串格式错误。

· dns.BADFLAGS: 非法标识符。

· dns.NONAME: 所给主机不是数字。

· dns.BADHINTS: 非法HINTS标识符。

· dns.NOTINITIALIZED: c c-ares 库尚未初始化。

· dns.LOADIPHLPAPI: 加载 iphlpapi.dll 出错。

· dns.ADDRGETNETWORKPARAMS: 无法找到 GetNetworkParams 函数。

· dns.CANCELLED: 取消 DNS 查询。


实例

创建 main.js 文件,代码如下所示:

var dns = require('dns');
 
dns.lookup('www.github.com', function onLookup(err, address, family) {
   console.log('ip 地址:', address);
   dns.reverse(address, function (err, hostnames) {
   if (err) {
      console.log(err.stack);
   }
 
   console.log('反向解析 ' + address + ': ' + JSON.stringify(hostnames));});  });

执行以上代码,结果如下所示:

address: 192.30.252.130
reverse for 192.30.252.130: ["github.com"]

 

本文由职坐标整理发布,更多相关知识,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程