Latest web development tutorials

Node.js DNS 模塊

Node.js DNS 模塊

Node.js 工具模塊 Node.js工具模塊

Node.jsDNS模塊用於解析域名。引入DNS 模塊語法格式如下:

var dns = require("dns")

方法

序號 方法& 描述
1 dns.lookup(hostname[, options], callback)
將域名(比如'w3big.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)
將一個域名(如'w3big.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 地址作為解析服務器。

rrtypes

以下列出了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查詢。

實例

創建main.js 文件,代碼如下所示:

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));
});  
});

執行以上代碼,結果如下所示:

address: 192.30.252.130
reverse for 192.30.252.130: ["github.com"]

Node.js 工具模塊 Node.js工具模塊