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