引
在網絡編程中,開發者更傾向於使用域名,而不是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查詢操作被取消。