前面的话

  本文将详细介绍域名解析模块DNS

工作原理

  打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生了很多事情。首先,计算机只懂0和1,也就是说人类的字母网址计算机是不懂的,它只认识IP地址,如果是IPV4那就是4组8位的二进制数字。为了人类方便,需要有一个把网址翻译成IP地址的服务,就是DNS

  DNS整个获取过程是被层层缓存的

  1、浏览器搜索自身的DNS缓存

  浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。

  浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,其中Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS

  Chrome浏览器看本身的DNS缓存时间比较方便,在地址栏输入

chrome://net-internals/#dns

  2、搜索操作系统自身的DNS缓存

  3、读取本地的HOST文件,Windows下路径一般为

c:\Windows\System32\drivers\etc\hosts

  4、向宽带运营商ISP发起一个DNS的系统调用,ISP服务器查看本身缓存

  5、如果还没有找到,ISP服务器会代替本地计算机发起一个迭代DNS解析的请求

  6、如果仍然不成功,则解析失败

本地解析

  dns模块包含两个类型的函数,其中一种是使用底层操作系统工具进行域名解析的函数,并不须要进行网络通信。这类函数只有一个:dns.lookup()

【dns.lookup(hostname[, options], callback)】

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

  options参数包含以下属性

family:地址协议族,必须为4或6的整数
hints:设置getaddrinfo的标志,dns.ADDRCONFIG 或者 dns.V4MAPPED(ipv4映射成ipv6)
all:false(默认),布尔值,如设置为true,则返回IP数组,否则返回单个IP地址

{family: 4,hints: dns.ADDRCONFIG | dns.V4MAPPED
}

  回调函数包含参数 (err, address, family)。 address参数表示 IP v4 或 v6 地址。family 参数是4 或 6,表示 address 家族(不一定是之前传入 lookup 的值)。出错时,参数 err 是 Error 对象,err.code是错误代码

  [注意]err.code等于'ENOENT',可能是因为域名不存在,还有可能是其他原因,如没有可用文件描述符

var dns = require('dns');
dns.lookup('www.cnblogs.com', function(err, address, family){console.log(err);//nullconsole.log(address);//218.11.2.249console.log(family);//4
});

  同一个域名,可能对应多个不同的ip。可以通过设置options = {all: true}来获取

var dns = require('dns');
dns.lookup('www.qq.com',{all:true}, function(err, address, family){console.log(err);//null
/*
[ { address: '125.39.240.113', family: 4 },{ address: '61.135.157.156', family: 4 } ]*/console.log(address);console.log(family);//undefined
});

【dns.lookupService(address, port, callback)】

  与lookup相对应,lookupService()方法进行从ip地址和端口到域名的反向解析

  该方法的回调函数的参数是 (err, hostname, service)。 hostname 和 service 都是字符串 (比如 'localhost' 和 'http')。出错时,参数err 是 Error 对象,err.code是错误代码

var dns = require('dns');
dns.lookupService('127.0.0.1',80,function(err, hostname, service){console.log(err);//nullconsole.log(hostname);//baiconsole.log(service);//http
});

网络解析

  除dns.lookup()以外的所有dns模块中的函数,都需要连接到实际DNS服务器进行域名解析的函数,并且始终使用网络执行DNS查询

【dns.resolve(hostname[, rrtype], callback)】

  该方法将一个域名(如 'cnblogs.com')解析为一个 rrtype 指定记录类型的数组

  有效的 rrtypes 值为:

'A' (IPV4 地址, 默认)
'AAAA' (IPV6 地址)
'MX' (邮件交换记录)
'TXT' (text 记录)
'SRV' (SRV 记录)
'PTR' (用来反向 IP 查找)
'NS' (域名服务器 记录)
'CNAME' (别名 记录)
'SOA' (授权记录的初始值)

  回调参数为 (err, addresses). 其中 addresses 中每一项的类型都取决于记录类型。出错时,参数err 是 Error 对象,err.code是错误代码

var dns = require('dns');
//IPV4
dns.resolve('www.qq.com',function(err,address){console.log(address);//[ '125.39.240.113', '61.135.157.156' ]
});//IPV6
dns.resolve('www.qq.com','AAAA',function(err,address){console.log(address);//[ '240e:e1:8100:28::2:16' ]
});//别名
dns.resolve('www.qq.com','CNAME',function(err,address){console.log(address);//undefined
});

【dns.resolve4(hostname, callback)】

  和 dns.resolve() 类似,仅能查询 IPv4 (A 记录)

var dns = require('dns');
dns.resolve4('www.qq.com',function(err,address){console.log(address);//[ '125.39.240.113', '61.135.157.156' ]
});

【dns.reverse(ip, callback)】

  该方法用于反向解析 IP 地址,返回指向该 IP 地址的域名数组。回调函数参数 (err, hostnames)。出错时,参数err 是 Error 对象,err.code是错误代码

var dns = require('dns');
dns.reverse('114.114.114.114',function(err,hostnames){console.log(hostnames);//'public1.114dns.com'
});

nodeJS之域名DNS相关推荐

  1. 修改域名dns服务器,新网互联域名如何修改DNS设置方法

    在新网互联注册的域名,DNS默认为新网互联DNS服务器(例如:ns1.dns.com.cn.ns2.dns.com.cn). 为了方便管理,使用西部数码的智能DNS解析服务,可以将域名的DNS修改为西 ...

  2. lettuce 配置域名 dns 切换

    大家好,我是烤鸭:      如果你也有类似的困扰,运维告诉你,redis连接配置域名,这样出问题了,直接改dns地址就行,不需要重启服务...梦想是美好的,现实是残酷的.如果你使用的是 lettuc ...

  3. 【法克鱿】域名DNS设置修改失败!

    TMD,赚钱这么猛,服务这么垃圾.[法克鱿]域名DNS设置修改失败! 伟大的天朝特有的企业. 突然很怀念那段日飞鸽传书 突然很怀念那段日子,不用想太多,除了干活,睡觉,偶尔出去聚一聚,奢侈一把.一群人 ...

  4. php域名免备案转发,免备案高防CDN支持过墙域名跳转解决域名DNS污染

    免备案服务器联系咨询我 QQ:281846000 全国节点,自动切换,保证业务的安全和稳定 1.301跳转,解决域名被墙,国内免备案不限制内容服务器. 2.域名防劫持,DNS防护专属套餐,视频***C ...

  5. 2.ipv6苹果上线 新网域名不支持AAAA 域名DNS解析AAAA -----如何将DNS从新网转到DNSPod?

    转自:http://blog.csdn.net/zhanglizhi111/article/details/79196670 最近新网的大姨妈又开始了,导致了我很多域名无法解析,新网这样频繁出问题实在 ...

  6. 知名开发社区:v2ex域名DNS被污染

    知名开发社区平台,近日有网友在站长论坛中反馈v2ex官网无法打开,疑似被污染,编辑宋九九. 宋九九博客小编用工具检测了下,发现果然如此,域名确实被污染. 知名开发社区:v2ex域名DNS被污染 第1张 ...

  7. 域名dns 域名dns解析查询

    域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网. 最近入职了一家SEO公司,接手管 ...

  8. 查询域名 在线批量查询域名dns

    当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符.域名同时也仅限于ASCII字符的一个子集,这使得很多其他语言无法正确表示他们的名字和单词. 最近入职了一家SEO公司,接手 ...

  9. 国外注册的域名dns服务器换回国内dns服务器的详细教程!

    国外注册的域名dns服务器换回国内dns服务器的详细教程! 其他国外域名也类似: 今天据网友反映打不开网站,了解之后才知道是域名ping不通了, 在论坛里了解到Godaddy的域名容易出现国内ping ...

最新文章

  1. 百个JavaScript函数以及基础写法汇总
  2. spring执行定时任务
  3. Windows PE资源表编程(枚举资源树)
  4. oracle11g迁移到12cpdb,12c跨平台完成PDB的备份迁移
  5. 一篇不一样的docker原理解析 提高篇
  6. 第34讲:更好用的自动化工具 airtest 的使用
  7. composer配置阿里云镜像
  8. Linux ReviewBoard安装与配置
  9. java字符串构造函数的应用_构造函数中的参数0需要找不到类型为'java.lang.String'的bean...
  10. Ui学习笔记---EasyUI的使用方法,EasyLoader组件使用
  11. Linux IPC之有名管道
  12. presumably用法
  13. 【图像隐写】基于matlab GUI DCT+FFT数字水印嵌入+攻击+提取(带面板)【含Matlab源码 1760期】
  14. 响应式电脑修理公司织梦网站模板,DedeCMS自适应手机版蓝色HTML5电脑修理维修店网站源码下载
  15. ZK(7.0.1)将zul页面引入作为组件标签的简单示例
  16. Fortran 95 流程控制、循环
  17. MODIS数据下载及MRT批处理方法
  18. 高阶的Parser:可变运算优先级
  19. csm和uefi_是否应该使用UEFI或BIOS(旧版/ CSM)引导模式安装操作系统?[重复]
  20. java中的extends与implement

热门文章

  1. java 顺序输出_java输出顺序
  2. 跑分软件测试的游戏是,主流软件跑分测试 日常游戏无压力
  3. 20200208(补):翻转游戏Ⅰ Ⅱ(leetcode)
  4. c语言可作为程序分支的表达式,[计算机软件及应用]C语言程序设计4--李2012.ppt
  5. redis cluster迁移相关
  6. 根据成交量变化寻找黑马
  7. 面试指南(一):想跳槽,你真的做好准备了吗?
  8. 微信AI正在完成:有码走遍天下,从此花钱刷脸
  9. KikaGO:一条数据线的AI之旅
  10. 被逮到一个初始状态考虑不周的Bug