# DNS
~~~
穩(wěn)定度: 3 - 穩(wěn)定
~~~
使用 `require('dns')` 引入此模塊。dns 模塊中的所有方法都使用了 C-Ares,除了 `dns.lookup` 使用了線程池中的 `getaddrinfo(3)`。C-Ares 比 `getaddrinfo` 要快得多,但系統(tǒng)解析器相對于其它程序的操作要更固定。當(dāng)一個(gè)用戶使用 `net.connect(80, 'google.com')` 或 `http.get({ host: 'google.com' })` 時(shí)會(huì)使用 `dns.lookup` 方法。如果用戶需要進(jìn)行大量的快速查詢,則最好使用 C-Ares 提供的方法。
下面是一個(gè)解析 `'www.google.com'` 并反向解析所返回 IP 地址的例子。
~~~
console.log('反向解析 ' + a + ': ' + JSON.stringify(domains));
});
});
});
~~~
### dns.lookup(domain, [family], callback)
將一個(gè)域名(比如 `'google.com'`)解析為第一個(gè)找到的 A 記錄(IPv4)或 AAAA 記錄(IPv6)。地址族 `family` 可以是數(shù)字 `4` 或 `6`,缺省為 `null` 表示同時(shí)允許 IPv4 和 IPv6 地址族。
回調(diào)參數(shù)為 `(err, address, family)`。地址 `address` 參數(shù)為一個(gè)代表 IPv4 或 IPv6 地址的字符串。地址族 `family` 參數(shù)為數(shù)字 4 或 6,地表 `address` 的地址族(不一定是之前傳入 `lookup` 的值)。
當(dāng)錯(cuò)誤發(fā)生時(shí),`err` 為一個(gè) `Error` 對象,其中 `err.code` 為錯(cuò)誤代碼。請記住 `err.code` 被設(shè)定為 `'ENOENT'` 的情況不僅是域名不存在,也可能是查詢在其它途徑出錯(cuò),比如沒有可用文件描述符時(shí)。
### dns.resolve(domain, [rrtype], callback)
將一個(gè)域名(比如 `'google.com'`)解析為一個(gè) `rrtype` 指定記錄類型的數(shù)組。有效 `rrtypes` 取值有 `'A'`(IPv4 地址,缺省)、`'AAAA'`(IPv6 地址)、`'MX'`(郵件交換記錄)、`'TXT'`(文本記錄)、`'SRV'`(SRV 記錄)、`'PTR'`(用于 IP 反向查找)、`'NS'`(域名服務(wù)器記錄)和 `'CNAME'`(別名記錄)。
回調(diào)參數(shù)為 `(err, addresses)`。其中 `addresses` 中每一項(xiàng)的類型取決于記錄類型,詳見下文對應(yīng)的查找方法。
當(dāng)出錯(cuò)時(shí),`err` 參數(shù)為一個(gè) `Error` 對象,其中 `err.code` 為下文所列出的錯(cuò)誤代碼之一。
### dns.resolve4(domain, callback)
于 `dns.resolve()` 一樣,但只用于查詢 IPv4(`A` 記錄)。`addresses` 是一個(gè) IPv4 地址的數(shù)組(比如 `['74.125.79.104', '74.125.79.105', '74.125.79.106']`)。
### dns.resolve6(domain, callback)
類似于 `dns.resolve4()`,但用于 IPv6(`AAAA`)查詢。
### dns.resolveMx(domain, callback)
類似于 `dns.resolve()`,但用于郵件交換查詢(`MX` 記錄)。
`addresses` 為一個(gè) MX 記錄的數(shù)組,每一項(xiàng)包含優(yōu)先級(jí)和交換屬性(比如 `[{'priority': 10, 'exchange': 'mx.example.com'},...]`)。
### dns.resolveTxt(domain, callback)
與 `dns.resolve()` 相似,但用于文本查詢(`TXT` 記錄)。`addresses` 為 `domain` 可用文本記錄的數(shù)組(比如 `['v=spf1 ip4:0.0.0.0 ~all']`)。
### dns.resolveSrv(domain, callback)
查詢 SRV 記錄,與 `dns.resolve()` 相似。 `addresses` 是域名 `domain` 可用的 SRV 記錄數(shù)組, 每一條記錄都包含優(yōu)先級(jí)(priority)、權(quán)重(weight)、端口號(hào)(port)、服務(wù)名稱(name)等屬性 (比如: `[{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]`)。
### dns.resolveNs(domain, callback)
查詢 NS 記錄,與 `dns.resolve()` 相似。 `addresses` 是域名 `domain` 可用的 NS 記錄數(shù)組, (比如: `['ns1.example.com', 'ns2.example.com']`).
### dns.resolveCname(domain, callback)
查詢 CNAME 記錄,與 `dns.resolve()` 相似。 `addresses` 是域名 `domain` 可用的 CNAME 記錄數(shù)組, (比如: `['bar.example.com']`).
### dns.reverse(ip, callback)
反向解析 IP 地址,返回指向該 IP 地址的域名數(shù)組。
回調(diào)函數(shù)接收兩個(gè)參數(shù): `(err, domains)`.
當(dāng)出錯(cuò)時(shí),`err` 參數(shù)為一個(gè) `Error` 對象,其中 `err.code` 為下文所列出的錯(cuò)誤代碼之一。
### dns.getServers()
已字符串返回一個(gè)當(dāng)前用于解析的 IP 地址的數(shù)組。
### dns.setServers(servers)
指定一個(gè) IP 地址字符串?dāng)?shù)組,將它們作為解析所用的服務(wù)器。
如果您在地址中指定了端口,則端口會(huì)被忽略,因?yàn)榈讓訋觳⒉恢С帧?
如果您傳入無效參數(shù),則會(huì)拋出異常。
### 錯(cuò)誤代碼
每個(gè) DNS 查詢都可能返回下列錯(cuò)誤代碼之一:
- `dns.NODATA`: DNS 服務(wù)器返回?zé)o數(shù)據(jù)應(yīng)答。
- `dns.FORMERR`: DNS 聲稱查詢格式錯(cuò)誤。
- `dns.SERVFAIL`: DNS 服務(wù)器返回一般失敗。
- `dns.NOTFOUND`: 域名未找到。
- `dns.NOTIMP`: DNS 服務(wù)器未實(shí)現(xiàn)所請求操作。
- `dns.REFUSED`: DNS 服務(wù)器拒絕查詢。
- `dns.BADQUERY`: DNS 查詢格式錯(cuò)誤。
- `dns.BADNAME`: 域名格式錯(cuò)誤。
- `dns.BADFAMILY`: 不支持的地址類型。
- `dns.BADRESP`: DNS 答復(fù)格式錯(cuò)誤。
- `dns.CONNREFUSED`: 無法聯(lián)系 DNS 服務(wù)器。
- `dns.TIMEOUT`: 聯(lián)系 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`: 指定了非法提示標(biāo)記。
- `dns.NOTINITIALIZED`: c-ares 庫初始化尚未進(jìn)行。
- `dns.LOADIPHLPAPI`: 加載 iphlpapi.dll 出錯(cuò)。
- `dns.ADDRGETNETWORKPARAMS`: 無法找到 GetNetworkParams 函數(shù)。
- `dns.CANCELLED`: DNS 查詢?nèi)∠?
- 關(guān)于本文檔
- 概述
- 斷言 (assert)
- Buffer
- Addons插件
- 子進(jìn)程
- 集群
- 控制臺(tái)
- 加密(Crypto)
- 調(diào)試器
- DNS
- 域
- 事件 (Events)
- File System
- 全局對象
- HTTP
- HTTPS
- Modules
- net
- 操作系統(tǒng)
- 路徑 (Path)
- process
- punycode
- Query String
- Readline
- REPL
- Smalloc
- 流
- 字符串解碼器
- 定時(shí)器
- TLS (SSL)
- TTY
- UDP / 數(shù)據(jù)報(bào)套接字
- URL
- utils
- 執(zhí)行 JavaScript
- Zlib
- 進(jìn)度
- 感謝
