Node.js DNS 模塊
Node.js DNS 模塊用于解析域名。引入 DNS 模塊語法格式如下:
var dns = require("dns")
方法
序號 | 方法 & 描述 |
---|---|
1 | dns.lookup(hostname[, options], callback) 將域名(比如 'w3cschool.cn')解析為第一條找到的記錄 A (IPV4)或 AAAA(IPV6)。參數(shù) options可以是一個(gè)對象或整數(shù)。如果沒有提供 options,IP v4 和 v6 地址都可以。如果 options 是整數(shù),則必須是 4 或 6。 |
2 | dns.lookupService(address, port, callback) 使用 getnameinfo 解析傳入的地址和端口為域名和服務(wù)。 |
3 | dns.resolve(hostname[, rrtype], callback) 將一個(gè)域名(如 'w3cschool.cn')解析為一個(gè) rrtype 指定記錄類型的數(shù)組。 |
4 | dns.resolve4(hostname, callback) 和 dns.resolve() 類似, 僅能查詢 IPv4 (A 記錄)。 addresses IPv4 地址數(shù)組 (比如,['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() 類似, 僅能進(jìn)行文本查詢 (TXT 記錄)。 addresses 是 2-d 文本記錄數(shù)組。(比如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。 每個(gè)子數(shù)組包含一條記錄的 TXT 塊。根據(jù)使用情況可以連接在一起,也可單獨(dú)使用。 |
8 | dns.resolveSrv(hostname, callback) 和 dns.resolve() 類似, 僅能進(jìn)行服務(wù)記錄查詢 (SRV 記錄)。 addresses 是 hostname可用的 SRV 記錄數(shù)組。 SRV 記錄屬性有優(yōu)先級(priority),權(quán)重(weight), 端口(port), 和名字(name) (比如,[{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...])。 |
9 | dns.resolveSoa(hostname, callback) 和 dns.resolve() 類似, 僅能查詢權(quán)威記錄(SOA 記錄)。 |
10 | dns.resolveNs(hostname, callback) 和 dns.resolve() 類似, 僅能進(jìn)行域名服務(wù)器記錄查詢(NS 記錄)。 addresses 是域名服務(wù)器記錄數(shù)組(hostname 可以使用) (比如, ['ns1.example.com', 'ns2.example.com'])。 |
11 | dns.resolveCname(hostname, callback) 和 dns.resolve() 類似, 僅能進(jìn)行別名記錄查詢 (CNAME記錄)。addresses 是對 hostname 可用的別名記錄數(shù)組 (比如,, ['bar.example.com'])。 |
12 | dns.reverse(ip, callback) 反向解析 IP 地址,指向該 IP 地址的域名數(shù)組。 |
13 | dns.getServers() 返回一個(gè)用于當(dāng)前解析的 IP 地址數(shù)組的字符串。 |
14 | dns.setServers(servers) 指定一組 IP 地址作為解析服務(wù)器。 |
rrtypes
以下列出了 dns.resolve() 方法中有效的 rrtypes值:
'A'
IPV4 地址, 默認(rèn)'AAAA'
IPV6 地址'MX'
郵件交換記錄'TXT'
text 記錄'SRV'
SRV 記錄'PTR'
用來反向 IP 查找'NS'
域名服務(wù)器記錄'CNAME'
別名記錄'SOA'
授權(quán)記錄的初始值
錯(cuò)誤碼
每次 DNS 查詢都可能返回以下錯(cuò)誤碼:
dns.NODATA
: 無數(shù)據(jù)響應(yīng)。dns.FORMERR
: 查詢格式錯(cuò)誤。dns.SERVFAIL
: 常規(guī)失敗。dns.NOTFOUND
: 沒有找到域名。dns.NOTIMP
: 未實(shí)現(xiàn)請求的操作。dns.REFUSED
: 拒絕查詢。dns.BADQUERY
: 查詢格式錯(cuò)誤。dns.BADNAME
: 域名格式錯(cuò)誤。dns.BADFAMILY
: 地址協(xié)議不支持。dns.BADRESP
: 回復(fù)格式錯(cuò)誤。dns.CONNREFUSED
: 無法連接到 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)識符。dns.NONAME
: 所給主機(jī)不是數(shù)字。dns.BADHINTS
: 非法HINTS標(biāo)識符。dns.NOTINITIALIZED
: c c-ares 庫尚未初始化。dns.LOADIPHLPAPI
: 加載 iphlpapi.dll 出錯(cuò)。dns.ADDRGETNETWORKPARAMS
: 無法找到 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"]
更多建議: