Node之使用dns模塊解析域名

在網絡編程中,開發者更傾向於使用域名,而不是IP地址來指定網絡連接的目標地址。在Node.js中,提供dns模塊,以實現域名查找及域名解析的處理。

在dns模塊中,提供了三個主方法及一系列便捷方法。其中三個主方法分別爲用於將一個域名解析爲一組DNS記錄的resolve方法、用於將一個IP地址轉換爲一組域名的reverse方法以及用於將一個域名轉換爲一個IP地址的lookup方法,dns模塊中的其餘便捷方法均爲resolve方法的一種便捷形式。

使用resolve方法將域名解析爲DNS記錄

resolve方法用於將一個域名解析爲一組DNS記錄。

dns.resolve(domain,[rrtype],callback)
  • domain:參數值爲一個字符串,用於指定需要被解析的域名,例如www.google.com,該域名字符串中可包括子域名。
  • rrtype:參數值爲一個字符串,用於指定需要獲取的記錄類型,可指定的記錄類型如下
    • “A”:該參數值爲默認參數值。當記錄類型爲“A”時,該記錄將一個IPv4地址映射爲一個域名。
    • “AAAA”:當記錄類型爲“AAAA”時,該記錄將一個IPv6地址映射爲一個域名。
    • “CNAME”:當記錄類型爲“CNAME”時,表示該記錄爲一個域名的別名記錄。例如,一個www.example.com域名記錄也許爲一個example.com域名記錄的別名記錄。
    • “MX”:MX記錄指向一個使用SMTP的域中的郵件服務器。例如,當你向[email protected]郵件地址發送電子郵件時,domain.com域的MX記錄中保存了發送該郵件時的郵件服務器地址。
    • “TXT”:TXT記錄是爲該域名附加的描述記錄。
    • “SRV”:SRV記錄用於爲一個特定域中所有可用服務提供信息。
    • “PTR”:PTR記錄用於反向地址解析,該記錄將一個域名映射爲一個IPv4地址。
    • “NS”:NS(Name Server)記錄是域名服務器記錄,用來指定該域名由哪個DNS服務器進行解析。
  • callback:參數值用於指定當域名解析操作完成時調用的回調函數
    function(err,addresses){
      //回調函數代碼略
    }
    

resolve方法解析實例

var dns = require('dns');
  dns.resolve('www.google.com','A',function(e,r) {
  if (e) console.log(e);
  else console.log(r);
  });

使用lookup方法查詢IP地址

當使用resolve4方法或resolve6方法時,由於callback參數值回調函數中的address參數值數組中存放所有獲取到的IPv4地址或IPv6地址,因此,dns模塊中也提供了另一個用於獲取第一個被發現的IPv4地址或IPv6地址的lookup方法

dns.lookup(domain,[family],callback)
  • domain:參數值爲一個字符串,用於指定需要被解析的域名,例如www.google.com,該域名字符串中可包括子域名。
  • family:爲一個整數值,用於指定需要獲取的IP地址類型,可指定的參數值爲4或6。當參數值爲4時獲取IPv4地址,當參數值爲6時獲取IPv6地址。默認參數值爲null,表示既可獲取IPv4地址,又可獲取IPv6地址。
  • callback:參數值用於指定當域名解析操作完成時調用的回調函數
    function(err,address,family){
      //回調函數代碼略
    }
    

使用reverse方法反向解析IP地址

在dns模塊中,可以使用reverse方法將一個IP地址反向解析爲一組與該IP地址
綁定的域名。

dns.reverse(ip,callback)
  • ip:爲一個字符串,用於指定需要被反向解析的IP地址。
  • callback:用於指定當反向解析地址操作完成時調用的回調函數
    function(err,domains){
    //回調函數代碼略
    }
    

dns模塊中的各種錯誤代碼

在dns模塊中,在各種方法的callback參數值回調函數中,err參數值爲執行各種解析或反向解析操作時觸發的錯誤對象,可根據該錯誤對象的code屬性值,即觸發的錯誤代號判斷觸發了什麼錯誤。這些錯誤代號及其含義如下所示。

  • ENODATA:DNS服務器返回一個沒有數據的查詢結果。
  • EFORMERR:DNS服務器發現客戶端請求查詢時使用了格式錯誤的查詢參
    數。
  • ESERVFAIL:DNS服務器執行查詢操作失敗。
  • ENOTFOUND:未發現任何域名。
  • ENOTIMP:DNS服務器不能進行客戶端所請求的查詢操作。
  • EREFUSED:DNS服務器拒絕進行查詢操作。
  • EBADQUERY:格式錯誤的DNS查詢。
  • EBADNAME:域名格式錯誤。
  • EBADFAMILY:不支持的IP地址類型。
  • EBADRESP:DNS答覆的格式錯誤。
  • ECONNREFUSED:不能建立與DNS服務器之間的連接。
  • ETIMEOUT:與DNS服務器之間建立連接超時。
  • EEOF:已到達文件底部。
  • EFILE:讀取文件失敗。
  • ENOMEM:沒有足夠的內存空間。
  • EDESTRUCTION:通道已被銷燬。
  • EBADSTR:字符串格式錯誤。
  • EBADFLAGS:指定了錯誤的判斷標誌。
  • ENONAME:指定的主機名不是數值格式的。
  • EBADHINTS:指定的提示標誌無效。
  • ENOTINITIALIZED:c-ares類庫初始化工作尚未完成。
  • ELOADIPHLPAPI:加載iphlpapi.dll時觸發了一個錯誤。
  • EADDRGETNETWORKPARAMS:未發現GetNetworkParams函數。
  • ECANCELLED:DNS查詢操作被取消。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章