nodeJS之域名DNS
前面的话
本文将详细介绍域名解析模块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相关推荐
- 修改域名dns服务器,新网互联域名如何修改DNS设置方法
在新网互联注册的域名,DNS默认为新网互联DNS服务器(例如:ns1.dns.com.cn.ns2.dns.com.cn). 为了方便管理,使用西部数码的智能DNS解析服务,可以将域名的DNS修改为西 ...
- lettuce 配置域名 dns 切换
大家好,我是烤鸭: 如果你也有类似的困扰,运维告诉你,redis连接配置域名,这样出问题了,直接改dns地址就行,不需要重启服务...梦想是美好的,现实是残酷的.如果你使用的是 lettuc ...
- 【法克鱿】域名DNS设置修改失败!
TMD,赚钱这么猛,服务这么垃圾.[法克鱿]域名DNS设置修改失败! 伟大的天朝特有的企业. 突然很怀念那段日飞鸽传书 突然很怀念那段日子,不用想太多,除了干活,睡觉,偶尔出去聚一聚,奢侈一把.一群人 ...
- php域名免备案转发,免备案高防CDN支持过墙域名跳转解决域名DNS污染
免备案服务器联系咨询我 QQ:281846000 全国节点,自动切换,保证业务的安全和稳定 1.301跳转,解决域名被墙,国内免备案不限制内容服务器. 2.域名防劫持,DNS防护专属套餐,视频***C ...
- 2.ipv6苹果上线 新网域名不支持AAAA 域名DNS解析AAAA -----如何将DNS从新网转到DNSPod?
转自:http://blog.csdn.net/zhanglizhi111/article/details/79196670 最近新网的大姨妈又开始了,导致了我很多域名无法解析,新网这样频繁出问题实在 ...
- 知名开发社区:v2ex域名DNS被污染
知名开发社区平台,近日有网友在站长论坛中反馈v2ex官网无法打开,疑似被污染,编辑宋九九. 宋九九博客小编用工具检测了下,发现果然如此,域名确实被污染. 知名开发社区:v2ex域名DNS被污染 第1张 ...
- 域名dns 域名dns解析查询
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网. 最近入职了一家SEO公司,接手管 ...
- 查询域名 在线批量查询域名dns
当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符.域名同时也仅限于ASCII字符的一个子集,这使得很多其他语言无法正确表示他们的名字和单词. 最近入职了一家SEO公司,接手 ...
- 国外注册的域名dns服务器换回国内dns服务器的详细教程!
国外注册的域名dns服务器换回国内dns服务器的详细教程! 其他国外域名也类似: 今天据网友反映打不开网站,了解之后才知道是域名ping不通了, 在论坛里了解到Godaddy的域名容易出现国内ping ...
最新文章
- 百个JavaScript函数以及基础写法汇总
- spring执行定时任务
- Windows PE资源表编程(枚举资源树)
- oracle11g迁移到12cpdb,12c跨平台完成PDB的备份迁移
- 一篇不一样的docker原理解析 提高篇
- 第34讲:更好用的自动化工具 airtest 的使用
- composer配置阿里云镜像
- Linux ReviewBoard安装与配置
- java字符串构造函数的应用_构造函数中的参数0需要找不到类型为'java.lang.String'的bean...
- Ui学习笔记---EasyUI的使用方法,EasyLoader组件使用
- Linux IPC之有名管道
- presumably用法
- 【图像隐写】基于matlab GUI DCT+FFT数字水印嵌入+攻击+提取(带面板)【含Matlab源码 1760期】
- 响应式电脑修理公司织梦网站模板,DedeCMS自适应手机版蓝色HTML5电脑修理维修店网站源码下载
- ZK(7.0.1)将zul页面引入作为组件标签的简单示例
- Fortran 95 流程控制、循环
- MODIS数据下载及MRT批处理方法
- 高阶的Parser:可变运算优先级
- csm和uefi_是否应该使用UEFI或BIOS(旧版/ CSM)引导模式安装操作系统?[重复]
- java中的extends与implement