Node.js DNS 模組
Node.js DNS 模組用於解析功能變數名稱。引入 DNS 模組語法格式如下:
var dns = require("dns")
方法
序號 | 方法 & 描述 |
---|---|
1 | dns.lookup(hostname[, options], callback) 將功能變數名稱(比如 'xuhuhu.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) 將一個功能變數名稱(如 'xuhuhu.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 是 2-d 文本記錄數組。(比如,[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ])。 每個子數組包含一條記錄的 TXT 塊。根據使用情況可以連接在一起,也可單獨使用。 |
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'}, ...])。 |
9 | dns.resolveSoa(hostname, callback) 和 dns.resolve() 類似, 僅能查詢權威記錄(SOA 記錄)。 |
10 | dns.resolveNs(hostname, callback) 和 dns.resolve() 類似, 僅能進行功能變數名稱伺服器記錄查詢(NS 記錄)。 addresses 是功能變數名稱伺服器記錄數組(hostname 可以使用) (比如, ['ns1.example.com', 'ns2.example.com'])。 |
11 | dns.resolveCname(hostname, callback) 和 dns.resolve() 類似, 僅能進行別名記錄查詢 (CNAME記錄)。addresses 是對 hostname 可用的別名記錄數組 (比如,, ['bar.example.com'])。 |
12 | dns.reverse(ip, callback) 反向解析 IP 地址,指向該 IP 地址的功能變數名稱數組。 |
13 | dns.getServers() 返回一個用於當前解析的 IP 地址數組的字串。 |
14 | dns.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"]