[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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章