Node.js DNS 模組

Node.js 工具模組Node.js 工具模組

Node.js DNS 模組用於解析功能變數名稱。引入 DNS 模組語法格式如下:

var dns = require("dns")

方法

序號方法 & 描述
1dns.lookup(hostname[, options], callback)
將功能變數名稱(比如 'xuhuhu.com')解析為第一條找到的記錄 A (IPV4)或 AAAA(IPV6)。參數 options可以是一個對象或整數。如果沒有提供 options,IP v4 和 v6 地址都可以。如果 options 是整數,則必須是 4 或 6。
2dns.lookupService(address, port, callback)
使用 getnameinfo 解析傳入的地址和端口為功能變數名稱和服務。
3dns.resolve(hostname[, rrtype], callback)
將一個功能變數名稱(如 'xuhuhu.com')解析為一個 rrtype 指定記錄類型的數組。
4dns.resolve4(hostname, callback)
和 dns.resolve() 類似, 僅能查詢 IPv4 (A 記錄)。 addresses IPv4 地址數組 (比如,['74.125.79.104', '74.125.79.105', '74.125.79.106'])。
5dns.resolve6(hostname, callback)
和 dns.resolve4() 類似, 僅能查詢 IPv6( AAAA 查詢)
6dns.resolveMx(hostname, callback)
和 dns.resolve() 類似, 僅能查詢郵件交換(MX 記錄)。
7dns.resolveTxt(hostname, callback)
和 dns.resolve() 類似, 僅能進行文本查詢 (TXT 記錄)。 addresses 是 2-d 文本記錄數組。(比如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。 每個子數組包含一條記錄的 TXT 塊。根據使用情況可以連接在一起,也可單獨使用。
8dns.resolveSrv(hostname, callback)
和 dns.resolve() 類似, 僅能進行服務記錄查詢 (SRV 記錄)。 addresses 是 hostname可用的 SRV 記錄數組。 SRV 記錄屬性有優先順序(priority),權重(weight), 端口(port), 和名字(name) (比如,[{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...])。
9dns.resolveSoa(hostname, callback)
和 dns.resolve() 類似, 僅能查詢權威記錄(SOA 記錄)。
10dns.resolveNs(hostname, callback)
和 dns.resolve() 類似, 僅能進行功能變數名稱伺服器記錄查詢(NS 記錄)。 addresses 是功能變數名稱伺服器記錄數組(hostname 可以使用) (比如, ['ns1.example.com', 'ns2.example.com'])。
11dns.resolveCname(hostname, callback)
和 dns.resolve() 類似, 僅能進行別名記錄查詢 (CNAME記錄)。addresses 是對 hostname 可用的別名記錄數組 (比如,, ['bar.example.com'])。
12dns.reverse(ip, callback)
反向解析 IP 地址,指向該 IP 地址的功能變數名稱數組。
13dns.getServers()
返回一個用於當前解析的 IP 地址數組的字串。
14dns.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 工具模組