/**Node.js DNS 模块
* Created by liyanq on 17/3/24.
* 这个是重点模块,应该重点练习~~
*/
const dns = require("dns");
const util = require("util");
/*----------------------------------------------------------------------------------*/
/*dns.getServers()
* Returns an array of IP address strings that are being used for name resolution.
* 返回一个用于当前解析的IP地址数组的字符串
* 需要注意的是,这里返回的是dns服务器的地址数组*/
console.log(dns.getServers());//[ '192.168.8.57', '10.10.6.11' ]
/*----------------------------------------------------------------------------------*/
/*dns.lookup(hostname[, options], callback)->查找地址
* 将域名解析为第一条找到的记录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地址
*
*
* 注意的是:如果是www.baidu.com返回2个ip地址;baidu.com则返回4个dns服务器地址~*/
dns.lookup("www.baidu.com", function (err, address, family) {
console.log("百度的一个ip地址:" + address + ";family:" + family);//百度的一个ip地址:61.135.169.121;family:4
});
const lookupOptions = {
family: 4,
all: true
};
dns.lookup("baidu.com", lookupOptions, function (err, address, family) {
for (const add of address) {//能理解为百度有4个dns服务器么???
console.log(util.inspect(add));
/*{ address: '180.149.132.47', family: 4 }
{ address: '220.181.57.217', family: 4 }
{ address: '123.125.114.144', family: 4 }
{ address: '111.13.101.208', family: 4 }
*/
}
});
/*----------------------------------------------------------------------------------*/
/*dns.lookupService查找服务
* */
dns.lookupService("127.0.0.1", 22, (err, hostname, service) => {
/*本机
主机名称:localhost提供的服务:ssh;
21 ftp
22 ssh
23 Telnet
SSH:Secure SHell,加密的网络服务程序
* 通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,
* 而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,
* 所以可以加快传输的速度。
* SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。*/
console.log("主机名称:" + hostname + ";提供的服务:" + service);
});
dns.lookupService("123.103.9.11", 7002, (err, hostname, service) => {
/*这个是外网的ip
主机名称:123.103.9.11-bj-cnc;提供的服务:afs3-prserver
afs3-prserver 7002/tcp users & groups database
http://blog.csdn.net/yyfpeak/article/details/44022169
*/
console.log("主机名称:" + hostname + ";提供的服务:" + service);
});
dns.lookupService("10.2.100.244", 8080, (err, hostname, service) => {
/*内网的ip
主机名称:bogon;提供的服务:http-alt
bogon:Linux;http-alt 8080/tcp HTTP Alternate (see port 80)
http://blog.csdn.net/yyfpeak/article/details/44022169
* */
console.log("主机名称:" + hostname + ";提供的服务:" + service);
});
/*----------------------------------------------------------------------------------*/
/*dns.resolve(hostname[, rrtype], callback)
将一个域名(如 'runoob.com')解析为一个 rrtype 指定记录类型的数组。
* Valid values for rrtype are:
'A' - IPV4 addresses, default
'AAAA' - IPV6 addresses
'MX' - mail exchange records
'TXT' - text records
'SRV' - SRV records
'PTR' - PTR records
'NS' - name server records
'CNAME' - canonical name records
'SOA' - start of authority record
'NAPTR' - name authority pointer record*/
dns.resolve("baidu.com", "A", function (err, address) {
for (const add of address) {
/*解析resolve:123.125.114.144
解析resolve:220.181.57.217
解析resolve:180.149.132.47
解析resolve:111.13.101.208
和dns.lookup("baidu.com", lookupOptions, function (err, address, family)结果一样~~
*/
console.log("解析resolve:" + add);
}
});
/*----------------------------------------------------------------------------------*/
/*dns.resolve4(hostname, callback)
* 和 dns.resolve() 类似, 仅能查询 IPv4(A 记录)*/
dns.resolve4("baidu.com", function (err, addresses) {
for (const add of addresses) {
/*解析resolve4:123.125.114.144
解析resolve4:220.181.57.217
解析resolve4:180.149.132.47
解析resolve4:111.13.101.208
和dns.lookup("baidu.com", lookupOptions, function (err, address, family)结果一样~~
*/
console.log("解析resolve4:" + add);
}
});
/*----------------------------------------------------------------------------------*/
/*dns.reverse(ip, callback)
* */
dns.reverse("123.103.9.11", function (err, hostnames) {
/*反向解析的名称:123.103.9.11-bj-cnc
其他的都不可以,61.135.169.121百度的就不行,不清楚原因~~*/
console.log("反向解析的名称:" + hostnames);
});
/*----------------------------------------------------------------------------------*/
//一个解析小工具;
// 输入:www.baidu.com
//返回www.baidu.com 61.135.169.121
process.stdout.write('Enter the website name:<www.sitename.com>: ');
process.stdin.resume();
process.stdin.on('data', function (site) {
var lookup = site.toString('utf-8').trim();
console.log(lookup);
dns.lookup(lookup, function (err, ip) {
if (err) throw err;
console.log(ip);
});
});
http://nodejs.cn/api/dns.html#dns_dns_lookup_hostname_options_callback
[NODE之11]dns模块
最新推荐文章于 2023-06-02 15:32:24 发布