Node之使用dns模块解析域名

在网络编程中,开发者更倾向于使用域名,而不是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查询操作被取消。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 域名(Domain Name),是由一串用 点 分隔的名字 组成的 Internet 上某一台计算机或计算机组的名...
    蓝白自由阅读 2,109评论 1 11
  • 1、前言 在当下互联网时代,我们日常生活和工作基本都离开不域名和 DNS ,如通过一个网址打开一个网站进行购物、使...
    cinder_lv阅读 3,524评论 1 27
  • 为什么需要DNS解析域名为IP地址? 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算...
    後来的後来hugh阅读 834评论 1 1
  • 今天,是在外婆家过的端午,午餐是小龙虾🦞,长豆角,鳝鱼,青蛙,玉米炖猪脚。 中午喝了一瓶啤酒,喝的有急, 头有点晕...
    轮回道人阅读 271评论 0 1
  • 每张图片的宽度固定,高度不固定,在加载的过程中,我们可以按需求对图片进行布局,比如计算好要有排布几列,按每列图片高...
    LiuJianli阅读 539评论 0 0