Node.js DNS 模塊
Node.js DNS 模塊
Node.jsDNS模塊用於解析域名。引入DNS 模塊語法格式如下:
var dns = require("dns")
方法
序號 | 方法& 描述 |
---|---|
1 | dns.lookup(hostname[, options], callback) 將域名(比如'w3big.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) 將一個域名(如'w3big.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"]