Node之使用dns模块解析域名

2023-11-19

在网络编程中,开发者更倾向于使用域名,而不是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查询操作被取消。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node之使用dns模块解析域名 的相关文章

随机推荐

  • VMware 中的 Ubuntu 虚拟机看不到共享文件夹怎么办?

    初学Linux 在VMWare 上装了Ubuntu14 04 主机端和虚拟机相互间的访问是必不可少的 途径有许多 其中vmware tool提供的共享文件夹方式简单又方便 然而 有时却莫名其妙的 在Ubuntu上看不到共享文件夹了 网上查了
  • 【vue3+elementplus】动态设置二次封装的el-form组件中的v-model绑定的变量名

    众所周知 在form表单中 el select el input等需要使用v model绑定变量 这个变量就是当前选择 输入的内容 一般会取ruleForm作为入参
  • java对象赋值给另一个对象_java注解实现对象的属性赋值,从此少写代码,快乐生活...

    各位志同道合的朋友们大家好 我是一个一直在一线互联网踩坑十余年的编码爱好者 现在将我们的各种经验以及架构实战分享出来 如果大家喜欢 就关注我 一起将技术学深学透 我会每一篇分享结束都会预告下一专题 我们平时在做一些业务时 从前台获取的数据用
  • 自定义模块导入错误

    当在python2 7 导入自定义模块 发生Importerror No module named xxx时 可将模块所在路径拷贝到E xxx python2 7 Lib site packages下 再进行导入则可解决问题 经过多方的摸索
  • MobaXterm出现X11-forwarding : ✘ (disabled or not supported by server)及conda: command not found等问题

    x11 forwarding disabled解决办法 3L csdn的博客 CSDN博客 如何安装X11 xorg https www cnblogs com yun qi p 16201843 html如何解决在Ubuntu中使用x11
  • 机器学习之线性回归——OLS,岭回归,Lasso回归

    机器学习之线性回归 线性回归 最小二乘法 OLS 岭回归 Ridge Regression Lasso回归 OLS 岭回归 Lasso回归之间对比 线性回归 什么是线性回归呢 其实线性回归是统计学中的 线性回归 Linear Regress
  • java 中的指针_Java中的指针

    java 中的指针 Java中有指针吗 简短的答案是 不 没有 这对于许多开发人员来说似乎是显而易见的 但是 为什么对其他人却不那么明显呢 http stackoverflow com questions 1750106 how can i
  • STM32实现HID键盘

    上面是我的微信和QQ群 欢迎新朋友的加入 这个帖子不是技术贴 是成品分享贴 电路设计 实物图 软件设计 功能说明 1 固件通过虚拟U盘升级 2 自定义按键功能 全键盘 3 七彩灯颜色设置 4 多媒体按键功能 5 支持按键双击和单击操作 6
  • c语言药房管理系统

    include
  • VisualStudio代码片段管理

    文章目录 前言 1 查看代码片段 2 插入代码片段方式 3 使用扩展创建代码片段 3 1 安装VS2019的扩展 3 2 使用扩展创建代码片段 4 不知为何 VS2022我安装一直有问题 扩展安装成功 但是新建文件没有 Snippet De
  • Unity 运行FixedUpdate()无响应

    问题 最近在学习unity时 根据 史上最全Unity3D教程 哔哩哔哩 bilibili 在Visual Studio中编写如下代码时 Unity的Console面板并没有输出预期的信息 即按每个固定帧速率的帧调用FixedUpdate
  • Matlab导出动态链接库dll

    1 新建 m文件 内容 function c Add a b c a b end 保存为 Add m 2 命令行输入 gt gt mex setup MEX configured to use Microsoft Visual C 2013
  • 各种注释总结

    jsp注释 html注释
  • C语言—指针

    文章目录 1 指针 1 1 指针的定义 1 2 和 1 3 指针与堆内存 1 4 指针运算 1 5 常量指针与指针常量 1 5 1 常量指针 1 5 2 指针常量 1 6 函数指针 2 指针与数组 3 指针与函数 4 指针与链表 4 1 链
  • cmake中的编译选项

    CMake是一个跨平台的构建系统 它可以根据简单的配置文件生成各种平台的构建工具 例如Makefile Visual Studio项目文件等 CMake使用CMakeLists txt文件来描述项目的构建规则和依赖关系 在这个文件中 可以设
  • 浅谈opencv3.2中各个模块的简介

    3 2版本的模块说明 Opencv3 2模块 首先打开opencv modules hpp文件 可以看到对于各个功能模块的定义如下 This file defines the list of modules available in cur
  • 分享几个项目中用到的设计模式

    前言 之前项目中出于扩展性和有雅性的考虑 使用了多种设计模式进行项目框架的设计 主要的一些设计模式是单例模式 工厂模式 策略模式 责任链模式 代理模式这几种 现在依次讲讲这几个的主要是实现方式和在我们项目中的应用场景 核心设计模式分享 单例
  • WPF TextBlock 实现点击事件

    TextBlock 标签里定义MouseLeftButtonDown 事件 xaml cs
  • ICCV 2023

    ICCV 2023 MPI Flow 从单视角构建的多平面图像中学习光流 引言 主要贡献 Motivation 算法细节 Optical Flow Data Generation Independent Object Motions Dep
  • Node之使用dns模块解析域名

    引 在网络编程中 开发者更倾向于使用域名 而不是IP地址来指定网络连接的目标地址 在Node js中 提供dns模块 以实现域名查找及域名解析的处理 在dns模块中 提供了三个主方法及一系列便捷方法 其中三个主方法分别为用于将一个域名解析为