[NODE之11]dns模块

/**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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值