Node.js DNS 模塊

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

Node.js DNS 模塊用于解析域名。引入 DNS 模塊語(yǔ)法格式如下:

var dns = require("dns")

方法

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

rrtypes

以下列出了 dns.resolve() 方法中有效的 rrtypes值:

  • 'A' IPV4 地址, 默認(rèn)
  • 'AAAA' IPV6 地址
  • 'MX' 郵件交換記錄
  • 'TXT' text 記錄
  • 'SRV' SRV 記錄
  • 'PTR' 用來(lái)反向 IP 查找
  • 'NS' 域名服務(wù)器記錄
  • 'CNAME' 別名記錄
  • 'SOA' 授權(quán)記錄的初始值

錯(cuò)誤碼

每次 DNS 查詢都可能返回以下錯(cuò)誤碼:

  • dns.NODATA: 無(wú)數(shù)據(jù)響應(yīng)。
  • dns.FORMERR: 查詢格式錯(cuò)誤。
  • dns.SERVFAIL: 常規(guī)失敗。
  • dns.NOTFOUND: 沒(méi)有找到域名。
  • dns.NOTIMP: 未實(shí)現(xiàn)請(qǐng)求的操作。
  • dns.REFUSED: 拒絕查詢。
  • dns.BADQUERY: 查詢格式錯(cuò)誤。
  • dns.BADNAME: 域名格式錯(cuò)誤。
  • dns.BADFAMILY: 地址協(xié)議不支持。
  • dns.BADRESP: 回復(fù)格式錯(cuò)誤。
  • dns.CONNREFUSED: 無(wú)法連接到 DNS 服務(wù)器。
  • dns.TIMEOUT: 連接 DNS 服務(wù)器超時(shí)。
  • dns.EOF: 文件末端。
  • dns.FILE: 讀文件錯(cuò)誤。
  • dns.NOMEM: 內(nèi)存溢出。
  • dns.DESTRUCTION: 通道被摧毀。
  • dns.BADSTR: 字符串格式錯(cuò)誤。
  • dns.BADFLAGS: 非法標(biāo)識(shí)符。
  • dns.NONAME: 所給主機(jī)不是數(shù)字。
  • dns.BADHINTS: 非法HINTS標(biāo)識(shí)符。
  • dns.NOTINITIALIZED: c c-ares 庫(kù)尚未初始化。
  • dns.LOADIPHLPAPI: 加載 iphlpapi.dll 出錯(cuò)。
  • dns.ADDRGETNETWORKPARAMS: 無(wú)法找到 GetNetworkParams 函數(shù)。
  • dns.CANCELLED: 取消 DNS 查詢。

實(shí)例

創(chuàng)建 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));
});  
});

執(zhí)行以上代碼,結(jié)果如下所示:

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

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