Nodejs的DNS模块包涵有关DNS查询和操作的方法,下面介绍该模块的基本用法以及实现一个DNS查询小工具。
1.获取DNS服务器地址
返回结果为:
[ '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地址
- 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@