• Node.js Video Tutorials

Node.js - DNS 模組



Node.js 的dns模組用於執行實際的 DNS 查詢,以及使用底層作業系統名稱解析功能。此模組提供了一個非同步網路包裝器,可以使用以下語法匯入。

var dns = require("dns")

方法

序號 方法及描述
1

dns.lookup(hostname[, options], callback)

將主機名(例如“google.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)

將主機名(例如“google.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 是主機名可用的文字記錄的二維陣列(例如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。每個子陣列包含一個記錄的 TXT 塊。根據用例,可以將它們連線在一起或單獨處理。

8

dns.resolveSrv(hostname, callback)

與 dns.resolve() 相同,但僅適用於服務記錄(SRV 記錄)。addresses 是主機名可用的 SRV 記錄的陣列。SRV 記錄的屬性是優先順序、權重、埠和名稱(例如,[{‘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 是主機名可用的名稱伺服器記錄的陣列(例如,['ns1.example.com', 'ns2.example.com'])。

11

dns.resolveCname(hostname, callback)

與 dns.resolve() 相同,但僅適用於規範名稱記錄(CNAME 記錄)。addresses 是主機名可用的規範名稱記錄的陣列(例如,['bar.example.com'])。

12

dns.reverse(ip, callback)

反向解析 IP 地址到主機名陣列。

13

dns.getServers()

返回當前用於解析的 IP 地址(字串)陣列。

14

dns.setServers(servers)

給定一個 IP 地址(字串)陣列,將其設定為用於解析的伺服器。

rrtypes

以下是 dns.resolve() 方法使用的有效 rrtypes 列表:

  • A - IPv4 地址,預設

  • AAAA - IPv6 地址

  • MX - 郵件交換記錄

  • TXT - 文字記錄

  • SRV - SRV 記錄

  • PTR - 用於反向 IP 查詢

  • NS - 名稱伺服器記錄

  • CNAME - 規範名稱記錄

  • SOA - 授權起始記錄

錯誤程式碼

每個 DNS 查詢可以返回以下錯誤程式碼之一:

  • dns.NODATA - DNS 伺服器返回的答案沒有資料。

  • dns.FORMERR - DNS 伺服器聲稱查詢格式錯誤。

  • dns.SERVFAIL - DNS 伺服器返回一般性故障。

  • dns.NOTFOUND - 未找到域名。

  • dns.NOTIMP - DNS 伺服器未實現請求的操作。

  • dns.REFUSED - DNS 伺服器拒絕查詢。

  • dns.BADQUERY - DNS 查詢格式錯誤。

  • dns.BADNAME - 主機名格式錯誤。

  • dns.BADFAMILY - 不支援的地址族。

  • dns.BADRESP - DNS 應答格式錯誤。

  • dns.CONNREFUSED - 無法聯絡 DNS 伺服器。

  • dns.TIMEOUT - 聯絡 DNS 伺服器時超時。

  • dns.EOF - 檔案結束。

  • dns.FILE - 讀取檔案錯誤。

  • dns.NOMEM - 記憶體不足。

  • dns.DESTRUCTION - 正在銷燬通道。

  • dns.BADSTR - 字串格式錯誤。

  • dns.BADFLAGS - 指定了非法標誌。

  • dns.NONAME - 給定的主機名不是數字。

  • dns.BADHINTS - 指定了非法的提示標誌。

  • dns.NOTINITIALIZED - c-ares 庫初始化尚未執行。

  • dns.LOADIPHLPAPI - 載入 iphlpapi.dll 錯誤。

  • dns.ADDRGETNETWORKPARAMS - 找不到 GetNetworkParams 函式。

  • dns.CANCELLED - DNS 查詢已取消。

示例

建立一個名為 main.js 的 js 檔案,其中包含以下程式碼:

var dns = require('dns');

dns.lookup('www.google.com', function onLookup(err, address, family) {
   console.log('address:', address);
   dns.reverse(address, function (err, hostnames) {
      if (err) {
         console.log(err.stack);
      }

      console.log('reverse for ' + address + ': ' + JSON.stringify(hostnames));
   });  
});

現在執行 main.js 以檢視結果:

$ node main.js

驗證輸出。

address: 173.194.46.83
reverse for 173.194.46.83: ["ord08s11-in-f19.1e100.net"]
nodejs_utitlity_module.htm
廣告

© . All rights reserved.