浅析Node.js:DNS模块的使用

前端之家收集整理的这篇文章主要介绍了浅析Node.js:DNS模块的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Nodejs的DNS模块包涵有关DNS查询和操作的方法,下面介绍该模块的基本用法以及实现一个DNS查询小工具。

1.获取DNS服务器地址

使用方法,该方法返回一个IP地址组成的数组,如下所示:

返回结果为:

[ '114.114.114.114','8.8.8.8', 'fec0:0:0:ffff::1','114.114.114.114', '8.8.8.8', '8.8.8.8' ]

2.使用系统特性域名解析获取IP地址

使用方法,options参数包涵以下属性

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

callback回调函数有三个参数(err,address,family),如果options的all属性设置为true,则只有(err,addresses)参数且addresses为一个数组,数组元素为{address,family}对象。使用如下所示:

{ if(err) throw err; console.log('百度网站的IP地址是:'+address+'地址协议族是:IPV'+family); });

结果如下:

E:\developmentdocument\nodejsdemo>node dns-example.js 百度网站的IP地址是:14.215.177.37地址协议族是:IPV4

设置options的all为true时,结果如下:

{ if(err) throw err; addresses.forEach((ele,idx,arr)=>{ console.log('百度网站的IP地址'+(idx+1)+'是:'+ele.address); }); });

结果如下:

E:\developmentdocument\nodejsdemo>node dns-example.js 百度网站的IP地址1是:14.215.177.38 百度网站的IP地址2是:14.215.177.37

3.根据IP和端口获取主机名

使用方法,该方法依赖getnameinfo底层函数。 callback函数有三个参数(err,hostname,service),service是protocol,为http或https,使用如下所示:

{ if(err) console.log(err); console.log('该IP对应的主机为:'+hostname+' 协议为:'+service); });

结果如下:

E:\developmentdocument\nodejsdemo>node dns-example.js 该IP对应的主机为:@L_502_0@

查询

接着编写服务端代码,如下:

function router(req,res,pathname){
switch(pathname){
case '/dnslookup':
lookup(req,res);
break;
default:
showIndex(req,res);
}
}

function showIndex(req,res){
var pagePath = __dirname+'/'+'dns-lookup.html';
var html = fs.readFileSync(pagePath);
res.end(html);
}

function lookup(req,res){
var postData = '';
req.on('data',function(data){
postData+=data;
});
req.on('end',function(data){
var json = qs.parse(postData);
var hostname = json.host;
var rrtype = json.rrtype;
dns.resolve(hostname,rrtype,function(err,adresses){
if(err){
res.end(JSON.stringify({errcode:1,ips:[]}));
}
res.end(JSON.stringify({errcode:0,ips:adresses}));
});

});
}

http.createServer(function(req,res){
var pathname = url.parse(req.url).pathname;
req.setEncoding("utf8");
res.writeHead(200,{'Content-Type':'text/html'});
router(req,pathname);
}).listen(3000,'127.0.0.1');

运行效果如下:

到此这个小工具便完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

猜你在找的Node.js相关文章