Node之使用dns模塊解析域名

在網(wǎng)絡(luò)編程中,開發(fā)者更傾向于使用域名,而不是IP地址來指定網(wǎng)絡(luò)連接的目標(biāo)地址。在Node.js中,提供dns模塊,以實現(xiàn)域名查找及域名解析的處理。

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

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

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

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

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地址

當(dāng)使用resolve4方法或resolve6方法時,由于callback參數(shù)值回調(diào)函數(shù)中的address參數(shù)值數(shù)組中存放所有獲取到的IPv4地址或IPv6地址,因此,dns模塊中也提供了另一個用于獲取第一個被發(fā)現(xiàn)的IPv4地址或IPv6地址的lookup方法

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

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

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

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

dns模塊中的各種錯誤代碼

在dns模塊中,在各種方法的callback參數(shù)值回調(diào)函數(shù)中,err參數(shù)值為執(zhí)行各種解析或反向解析操作時觸發(fā)的錯誤對象,可根據(jù)該錯誤對象的code屬性值,即觸發(fā)的錯誤代號判斷觸發(fā)了什么錯誤。這些錯誤代號及其含義如下所示。

  • ENODATA:DNS服務(wù)器返回一個沒有數(shù)據(jù)的查詢結(jié)果。
  • EFORMERR:DNS服務(wù)器發(fā)現(xiàn)客戶端請求查詢時使用了格式錯誤的查詢參
    數(shù)。
  • ESERVFAIL:DNS服務(wù)器執(zhí)行查詢操作失敗。
  • ENOTFOUND:未發(fā)現(xiàn)任何域名。
  • ENOTIMP:DNS服務(wù)器不能進行客戶端所請求的查詢操作。
  • EREFUSED:DNS服務(wù)器拒絕進行查詢操作。
  • EBADQUERY:格式錯誤的DNS查詢。
  • EBADNAME:域名格式錯誤。
  • EBADFAMILY:不支持的IP地址類型。
  • EBADRESP:DNS答復(fù)的格式錯誤。
  • ECONNREFUSED:不能建立與DNS服務(wù)器之間的連接。
  • ETIMEOUT:與DNS服務(wù)器之間建立連接超時。
  • EEOF:已到達(dá)文件底部。
  • EFILE:讀取文件失敗。
  • ENOMEM:沒有足夠的內(nèi)存空間。
  • EDESTRUCTION:通道已被銷毀。
  • EBADSTR:字符串格式錯誤。
  • EBADFLAGS:指定了錯誤的判斷標(biāo)志。
  • ENONAME:指定的主機名不是數(shù)值格式的。
  • EBADHINTS:指定的提示標(biāo)志無效。
  • ENOTINITIALIZED:c-ares類庫初始化工作尚未完成。
  • ELOADIPHLPAPI:加載iphlpapi.dll時觸發(fā)了一個錯誤。
  • EADDRGETNETWORKPARAMS:未發(fā)現(xiàn)GetNetworkParams函數(shù)。
  • ECANCELLED:DNS查詢操作被取消。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 域名(Domain Name),是由一串用 點 分隔的名字 組成的 Internet 上某一臺計算機或計算機組的名...
    甘哲157閱讀 2,364評論 1 11
  • 1、前言 在當(dāng)下互聯(lián)網(wǎng)時代,我們?nèi)粘I詈凸ぷ骰径茧x開不域名和 DNS ,如通過一個網(wǎng)址打開一個網(wǎng)站進行購物、使...
    cinder_lv閱讀 3,949評論 1 27
  • 為什么需要DNS解析域名為IP地址? 網(wǎng)絡(luò)通訊大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以計算...
    後來的後來hugh閱讀 885評論 1 1
  • 今天,是在外婆家過的端午,午餐是小龍蝦??,長豆角,鱔魚,青蛙,玉米燉豬腳。 中午喝了一瓶啤酒,喝的有急, 頭有點暈...
    輪回道人閱讀 370評論 0 1
  • 每張圖片的寬度固定,高度不固定,在加載的過程中,我們可以按需求對圖片進行布局,比如計算好要有排布幾列,按每列圖片高...
    LiuJianli閱讀 675評論 0 0

友情鏈接更多精彩內(nèi)容