Like Share Discussion Bookmark Smile

J.J. Huang   2020-02-05   Node.js   瀏覽次數:

Node.js | 常用工具模組(DNS模組)

簡介

Node.js DNS模組用於解析域名。

1
var dns = require("dns")

方法

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

rrtype

rrtype records contains Result type Shorthand method
‘A’ IPv4地址(默認) <string> dns.resolve4()
‘AAAA’ IPv6地址 <string> dns.resolve6()
‘ANY’ 任何記錄 <Object> dns.resolveAny()
‘CNAME’ 規範名稱記錄 <string> dns.resolveCname()
‘MX’ 郵件交換記錄 <Object> dns.resolveMx()
‘NAPTR’ 名稱權限指針記錄 <Object> dns.resolveNaptr()
‘NS’ 名稱伺服器記錄 <string> dns.resolveNs()
‘PTR’ 指針記錄 <string> dns.resolvePtr()
‘SOA’ 權限記錄的開始 <Object> dns.resolveSoa()
‘SRV’ 服務記錄 <Object> dns.resolveSrv()
‘TXT’ 文字記錄 <string[]> dns.resolveTxt()

錯誤代碼

每個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查詢已取消。

實例

1
2
3
4
5
6
7
8
9
10
11
12
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));
});
});

執行結果如下:

1
2
3
$ node main.js
ip 地址: 192.30.253.112
反向解析 192.30.253.112: ["lb-192-30-253-112-iad.github.com"]

方法參考手冊

請直接至Node.js官方提供的DNS Documentation查看。


註:以上參考了
Node.js DNS 模块