1. 程式人生 > >node總結之工具模組(DNS 模組)

node總結之工具模組(DNS 模組)

Node.js DNS 模組用於解析域名,來看下引入 DNS 模組的語法格式:

var dns = require("dns")

來看下dns模組中包含的方法:

序號 方法 & 描述
1 dns.lookup(hostname[, options], callback)
將域名(比如 'runoob.com')解析為第一條找到的記錄 A (IPV4)或 AAAA(IPV6)。引數 options可以是一個物件或整數。如果沒有提供 options,IP v4 和 v6 地址都可以。如果 options 是整數,則必須是 4 或 6。
2 dns.lookupService(address, port, callback)
使用 getnameinfo 解析傳入的地址和埠為域名和服務。
3 dns.resolve(hostname[, rrtype], callback)
將一個域名(如 'runoob.com')解析為一個 rrtype 指定記錄型別的陣列。
4 dns.resolve4(hostname, callback)
和 dns.resolve() 類似, 僅能查詢 IPv4 (A 記錄)。 addresses IPv4 地址陣列 (比如,['74.125.79.104', '74.125.79.105', '74.125.79.106'])。
5 dns.resolve6(hostname, callback)
和 dns.resolve4() 類似, 僅能查詢 IPv6( AAAA 查詢)
6 dns.resolveMx(hostname, callback)
和 dns.resolve() 類似, 僅能查詢郵件交換(MX 記錄)。
7 dns.resolveTxt(hostname, callback)
和 dns.resolve() 類似, 僅能進行文字查詢 (TXT 記錄)。 addresses 是 2-d 文字記錄陣列。(比如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。 每個子陣列包含一條記錄的 TXT 塊。根據使用情況可以連線在一起,也可單獨使用。
8 dns.resolveSrv(hostname, callback)
和 dns.resolve() 類似, 僅能進行服務記錄查詢 (SRV 記錄)。 addresses 是 hostname可用的 SRV 記錄陣列。 SRV 記錄屬性有優先順序(priority),權重(weight), 埠(port), 和名字(name) (比如,[{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...])。
9 dns.resolveSoa(hostname, callback)
和 dns.resolve() 類似, 僅能查詢權威記錄(SOA 記錄)。
10 dns.resolveNs(hostname, callback)
和 dns.resolve() 類似, 僅能進行域名伺服器記錄查詢(NS 記錄)。 addresses 是域名伺服器記錄陣列(hostname 可以使用) (比如, ['ns1.example.com', 'ns2.example.com'])。
11 dns.resolveCname(hostname, callback)
和 dns.resolve() 類似, 僅能進行別名記錄查詢 (CNAME記錄)。addresses 是對 hostname 可用的別名記錄陣列 (比如,, ['bar.example.com'])。
12 dns.reverse(ip, callback)
反向解析 IP 地址,指向該 IP 地址的域名陣列。
13 dns.getServers()
返回一個用於當前解析的 IP 地址陣列的字串。
14 dns.setServers(servers)
指定一組 IP 地址作為解析伺服器。

再來看下dns.resolve() 方法中有效的 rrtypes值:

  • 'A' IPV4 地址, 預設
  • 'AAAA' IPV6 地址
  • 'MX' 郵件交換記錄
  • 'TXT' text 記錄
  • 'SRV' SRV 記錄
  • 'PTR' 用來反向 IP 查詢
  • 'NS' 域名伺服器記錄
  • 'CNAME' 別名記錄
  • 'SOA' 授權記錄的初始值

還有就是每次 DNS 查詢都有可能返回的錯誤碼:

  • dns.NODATA: 無資料響應。
  • dns.FORMERR: 查詢格式錯誤。
  • dns.SERVFAIL: 常規失敗。
  • dns.NOTFOUND: 沒有找到域名。
  • dns.NOTIMP: 未實現請求的操作。
  • dns.REFUSED: 拒絕查詢。
  • dns.BADQUERY: 查詢格式錯誤。
  • dns.BADNAME: 域名格式錯誤。
  • dns.BADFAMILY: 地址協議不支援。
  • dns.BADRESP: 回覆格式錯誤。
  • dns.CONNREFUSED: 無法連線到 DNS 伺服器。
  • dns.TIMEOUT: 連線 DNS 伺服器超時。
  • dns.EOF: 檔案末端。
  • dns.FILE: 讀檔案錯誤。
  • dns.NOMEM: 記憶體溢位。
  • dns.DESTRUCTION: 通道被摧毀。
  • dns.BADSTR: 字串格式錯誤。
  • dns.BADFLAGS: 非法識別符號。
  • dns.NONAME: 所給主機不是數字。
  • dns.BADHINTS: 非法HINTS識別符號。
  • dns.NOTINITIALIZED: c c-ares 庫尚未初始化。
  • dns.LOADIPHLPAPI: 載入 iphlpapi.dll 出錯。
  • dns.ADDRGETNETWORKPARAMS: 無法找到 GetNetworkParams 函式。
  • dns.CANCELLED: 取消 DNS 查詢。

最後咱們走個例項:

var dns = require('dns');

dns.lookup('www.github.com', function onLookup(err, address, family) {
   console.log('ip 地址:', address);
   dns.reverse(address, function (err, hostnames) {
   if (err) {
      console.log(err.stack);
   }

   console.log('反向解析 ' + address + ': ' + JSON.stringify(hostnames));
});  
});

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。