{
  "source": "dns.markdown",
  "modules": [
    {
      "textRaw": "DNS",
      "name": "dns",
      "desc": "<pre><code>稳定度: 3 - 稳定</code></pre>\n<p>Use <code>require(&apos;dns&apos;)</code> to access this module. All methods in the dns module\nuse C-Ares except for <code>dns.lookup</code> which uses <code>getaddrinfo(3)</code> in a thread\npool. C-Ares is much faster than <code>getaddrinfo</code> but the system resolver is\nmore constant with how other programs operate. When a user does\n<code>net.connect(80, &apos;google.com&apos;)</code> or <code>http.get({ host: &apos;google.com&apos; })</code> the\n<code>dns.lookup</code> method is used. Users who need to do a large number of lookups\nquickly should use the methods that go through C-Ares.\n\n</p>\n<p>使用 <code>require(&apos;dns&apos;)</code> 引入此模块。dns 模块中的所有方法都使用了 C-Ares，除了 <code>dns.lookup</code> 使用了线程池中的 <code>getaddrinfo(3)</code>。C-Ares 比 <code>getaddrinfo</code> 要快得多，但系统解析器相对于其它程序的操作要更固定。当一个用户使用 <code>net.connect(80, &apos;google.com&apos;)</code> 或 <code>http.get({ host: &apos;google.com&apos; })</code> 时会使用 <code>dns.lookup</code> 方法。如果用户需要进行大量的快速查询，则最好使用 C-Ares 提供的方法。\n\n</p>\n<p>Here is an example which resolves <code>&apos;www.google.com&apos;</code> then reverse\nresolves the IP addresses which are returned.\n\n</p>\n<p>下面是一个解析 <code>&apos;www.google.com&apos;</code> 并反向解析所返回 IP 地址的例子。\n\n</p>\n<pre><code>      console.log(&apos;反向解析 &apos; + a + &apos;: &apos; + JSON.stringify(domains));\n    });\n  });\n});</code></pre>\n",
      "methods": [
        {
          "textRaw": "dns.lookup(domain, [family], callback)",
          "type": "method",
          "name": "lookup",
          "desc": "<p>Resolves a domain (e.g. <code>&apos;google.com&apos;</code>) into the first found A (IPv4) or\nAAAA (IPv6) record.\nThe <code>family</code> can be the integer <code>4</code> or <code>6</code>. Defaults to <code>null</code> that indicates\nboth Ip v4 and v6 address family.\n\n</p>\n<p>将一个域名（比如 <code>&apos;google.com&apos;</code>）解析为第一个找到的 A 记录（IPv4）或 AAAA 记录（IPv6）。地址族 <code>family</code> 可以是数字 <code>4</code> 或 <code>6</code>，缺省为 <code>null</code> 表示同时允许 IPv4 和 IPv6 地址族。\n\n</p>\n<p>The callback has arguments <code>(err, address, family)</code>.  The <code>address</code> argument\nis a string representation of a IP v4 or v6 address. The <code>family</code> argument\nis either the integer 4 or 6 and denotes the family of <code>address</code> (not\nnecessarily the value initially passed to <code>lookup</code>).\n\n</p>\n<p>回调参数为 <code>(err, address, family)</code>。地址 <code>address</code> 参数为一个代表 IPv4 或 IPv6 地址的字符串。地址族 <code>family</code> 参数为数字 4 或 6，地表 <code>address</code> 的地址族（不一定是之前传入 <code>lookup</code> 的值）。\n\n</p>\n<p>On error, <code>err</code> is an <code>Error</code> object, where <code>err.code</code> is the error code.\nKeep in mind that <code>err.code</code> will be set to <code>&apos;ENOENT&apos;</code> not only when\nthe domain does not exist but also when the lookup fails in other ways\nsuch as no available file descriptors.\n\n</p>\n<p>当错误发生时，<code>err</code> 为一个 <code>Error</code> 对象，其中 <code>err.code</code> 为错误代码。请记住 <code>err.code</code> 被设定为 <code>&apos;ENOENT&apos;</code> 的情况不仅是域名不存在，也可能是查询在其它途径出错，比如没有可用文件描述符时。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "family",
                  "optional": true
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolve(domain, [rrtype], callback)",
          "type": "method",
          "name": "resolve",
          "desc": "<p>Resolves a domain (e.g. <code>&apos;google.com&apos;</code>) into an array of the record types\nspecified by rrtype. Valid rrtypes are <code>&apos;A&apos;</code> (IPV4 addresses, default),\n<code>&apos;AAAA&apos;</code> (IPV6 addresses), <code>&apos;MX&apos;</code> (mail exchange records), <code>&apos;TXT&apos;</code> (text\nrecords), <code>&apos;SRV&apos;</code> (SRV records), <code>&apos;PTR&apos;</code> (used for reverse IP lookups),\n<code>&apos;NS&apos;</code> (name server records) and <code>&apos;CNAME&apos;</code> (canonical name records).\n\n</p>\n<p>将一个域名（比如 <code>&apos;google.com&apos;</code>）解析为一个 <code>rrtype</code> 指定记录类型的数组。有效 <code>rrtypes</code> 取值有 <code>&apos;A&apos;</code>（IPv4 地址，缺省）、<code>&apos;AAAA&apos;</code>（IPv6 地址）、<code>&apos;MX&apos;</code>（邮件交换记录）、<code>&apos;TXT&apos;</code>（文本记录）、<code>&apos;SRV&apos;</code>（SRV 记录）、<code>&apos;PTR&apos;</code>（用于 IP 反向查找）、<code>&apos;NS&apos;</code>（域名服务器记录）和 <code>&apos;CNAME&apos;</code>（别名记录）。\n\n</p>\n<p>The callback has arguments <code>(err, addresses)</code>.  The type of each item\nin <code>addresses</code> is determined by the record type, and described in the\ndocumentation for the corresponding lookup methods below.\n\n</p>\n<p>回调参数为 <code>(err, addresses)</code>。其中 <code>addresses</code> 中每一项的类型取决于记录类型，详见下文对应的查找方法。\n\n</p>\n<p>On error, <code>err</code> is an <code>Error</code> object, where <code>err.code</code> is\none of the error codes listed below.\n\n</p>\n<p>当出错时，<code>err</code> 参数为一个 <code>Error</code> 对象，其中 <code>err.code</code> 为下文所列出的错误代码之一。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "rrtype",
                  "optional": true
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolve4(domain, callback)",
          "type": "method",
          "name": "resolve4",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for IPv4 queries (<code>A</code> records).\n<code>addresses</code> is an array of IPv4 addresses (e.g.\n<code>[&apos;74.125.79.104&apos;, &apos;74.125.79.105&apos;, &apos;74.125.79.106&apos;]</code>).\n\n</p>\n<p>于 <code>dns.resolve()</code> 一样，但只用于查询 IPv4（<code>A</code> 记录）。<code>addresses</code> 是一个 IPv4 地址的数组（比如 <code>[&apos;74.125.79.104&apos;, &apos;74.125.79.105&apos;, &apos;74.125.79.106&apos;]</code>）。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolve6(domain, callback)",
          "type": "method",
          "name": "resolve6",
          "desc": "<p>The same as <code>dns.resolve4()</code> except for IPv6 queries (an <code>AAAA</code> query).\n\n</p>\n<p>类似于 <code>dns.resolve4()</code>，但用于 IPv6（<code>AAAA</code>）查询。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolveMx(domain, callback)",
          "type": "method",
          "name": "resolveMx",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for mail exchange queries (<code>MX</code> records).\n\n</p>\n<p>类似于 <code>dns.resolve()</code>，但用于邮件交换查询（<code>MX</code> 记录）。\n\n</p>\n<p><code>addresses</code> is an array of MX records, each with a priority and an exchange\nattribute (e.g. <code>[{&apos;priority&apos;: 10, &apos;exchange&apos;: &apos;mx.example.com&apos;},...]</code>).\n\n</p>\n<p><code>addresses</code> 为一个 MX 记录的数组，每一项包含优先级和交换属性（比如 <code>[{&apos;priority&apos;: 10, &apos;exchange&apos;: &apos;mx.example.com&apos;},...]</code>）。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolveTxt(domain, callback)",
          "type": "method",
          "name": "resolveTxt",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for text queries (<code>TXT</code> records).\n<code>addresses</code> is an array of the text records available for <code>domain</code> (e.g.,\n<code>[&apos;v=spf1 ip4:0.0.0.0 ~all&apos;]</code>).\n\n</p>\n<p>与 <code>dns.resolve()</code> 相似，但用于文本查询（<code>TXT</code> 记录）。<code>addresses</code> 为 <code>domain</code> 可用文本记录的数组（比如 <code>[&apos;v=spf1 ip4:0.0.0.0 ~all&apos;]</code>）。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolveSrv(domain, callback)",
          "type": "method",
          "name": "resolveSrv",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for service records (<code>SRV</code> records).\n<code>addresses</code> is an array of the SRV records available for <code>domain</code>. Properties\nof SRV records are priority, weight, port, and name (e.g.,\n<code>[{&apos;priority&apos;: 10, {&apos;weight&apos;: 5, &apos;port&apos;: 21223, &apos;name&apos;: &apos;service.example.com&apos;}, ...]</code>).\n\n</p>\n<p>查询 SRV 记录，与 <code>dns.resolve()</code> 相似。\n<code>addresses</code> 是域名 <code>domain</code> 可用的 SRV 记录数组，\n每一条记录都包含优先级（priority）、权重（weight）、端口号（port）、服务名称（name）等属性\n(比如：  <code>[{&apos;priority&apos;: 10, {&apos;weight&apos;: 5, &apos;port&apos;: 21223, &apos;name&apos;: &apos;service.example.com&apos;}, ...]</code>)。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolveNs(domain, callback)",
          "type": "method",
          "name": "resolveNs",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for name server records (<code>NS</code> records).\n<code>addresses</code> is an array of the name server records available for <code>domain</code>\n(e.g., <code>[&apos;ns1.example.com&apos;, &apos;ns2.example.com&apos;]</code>).\n\n</p>\n<p>查询 NS 记录，与 <code>dns.resolve()</code> 相似。\n<code>addresses</code> 是域名 <code>domain</code> 可用的 NS 记录数组，\n(比如： <code>[&apos;ns1.example.com&apos;, &apos;ns2.example.com&apos;]</code>).\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.resolveCname(domain, callback)",
          "type": "method",
          "name": "resolveCname",
          "desc": "<p>The same as <code>dns.resolve()</code>, but only for canonical name records (<code>CNAME</code>\nrecords). <code>addresses</code> is an array of the canonical name records available for\n<code>domain</code> (e.g., <code>[&apos;bar.example.com&apos;]</code>).\n\n</p>\n<p>查询 CNAME 记录，与 <code>dns.resolve()</code> 相似。\n<code>addresses</code> 是域名 <code>domain</code> 可用的 CNAME 记录数组，\n(比如： <code>[&apos;bar.example.com&apos;]</code>).\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "domain"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.reverse(ip, callback)",
          "type": "method",
          "name": "reverse",
          "desc": "<p>Reverse resolves an ip address to an array of domain names.\n\n</p>\n<p>反向解析 IP 地址，返回指向该 IP 地址的域名数组。\n\n</p>\n<p>The callback has arguments <code>(err, domains)</code>.\n\n</p>\n<p>回调函数接收两个参数： <code>(err, domains)</code>.\n\n</p>\n<p>On error, <code>err</code> is an <code>Error</code> object, where <code>err.code</code> is\none of the error codes listed below.\n\n</p>\n<p>当出错时，<code>err</code> 参数为一个 <code>Error</code> 对象，其中 <code>err.code</code> 为下文所列出的错误代码之一。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "ip"
                },
                {
                  "name": "callback"
                }
              ]
            }
          ]
        },
        {
          "textRaw": "dns.getServers()",
          "type": "method",
          "name": "getServers",
          "desc": "<p>Returns an array of IP addresses as strings that are currently being used for\nresolution\n\n</p>\n<p>已字符串返回一个当前用于解析的 IP 地址的数组。\n\n</p>\n",
          "signatures": [
            {
              "params": []
            }
          ]
        },
        {
          "textRaw": "dns.setServers(servers)",
          "type": "method",
          "name": "setServers",
          "desc": "<p>Given an array of IP addresses as strings, set them as the servers to use for\nresolving\n\n</p>\n<p>指定一个 IP 地址字符串数组，将它们作为解析所用的服务器。\n\n</p>\n<p>If you specify a port with the address it will be stripped, as the underlying\nlibrary doesn&apos;t support that.\n\n</p>\n<p>如果您在地址中指定了端口，则端口会被忽略，因为底层库并不支持。\n\n</p>\n<p>This will throw if you pass invalid input.\n\n</p>\n<p>如果您传入无效参数，则会抛出异常。\n\n</p>\n",
          "signatures": [
            {
              "params": [
                {
                  "name": "servers"
                }
              ]
            }
          ]
        }
      ],
      "modules": [
        {
          "textRaw": "错误代码",
          "name": "错误代码",
          "desc": "<p>Each DNS query can return one of the following error codes:\n\n</p>\n<p>每个 DNS 查询都可能返回下列错误代码之一：\n\n</p>\n<ul>\n<li><code>dns.NODATA</code>: DNS server returned answer with no data.</li>\n<li><code>dns.FORMERR</code>: DNS server claims query was misformatted.</li>\n<li><code>dns.SERVFAIL</code>: DNS server returned general failure.</li>\n<li><code>dns.NOTFOUND</code>: Domain name not found.</li>\n<li><code>dns.NOTIMP</code>: DNS server does not implement requested operation.</li>\n<li><code>dns.REFUSED</code>: DNS server refused query.</li>\n<li><code>dns.BADQUERY</code>: Misformatted DNS query.</li>\n<li><code>dns.BADNAME</code>: Misformatted domain name.</li>\n<li><code>dns.BADFAMILY</code>: Unsupported address family.</li>\n<li><code>dns.BADRESP</code>: Misformatted DNS reply.</li>\n<li><code>dns.CONNREFUSED</code>: Could not contact DNS servers.</li>\n<li><code>dns.TIMEOUT</code>: Timeout while contacting DNS servers.</li>\n<li><code>dns.EOF</code>: End of file.</li>\n<li><code>dns.FILE</code>: Error reading file.</li>\n<li><code>dns.NOMEM</code>: Out of memory.</li>\n<li><code>dns.DESTRUCTION</code>: Channel is being destroyed.</li>\n<li><code>dns.BADSTR</code>: Misformatted string.</li>\n<li><code>dns.BADFLAGS</code>: Illegal flags specified.</li>\n<li><code>dns.NONAME</code>: Given hostname is not numeric.</li>\n<li><code>dns.BADHINTS</code>: Illegal hints flags specified.</li>\n<li><code>dns.NOTINITIALIZED</code>: c-ares library initialization not yet performed.</li>\n<li><code>dns.LOADIPHLPAPI</code>: Error loading iphlpapi.dll.</li>\n<li><code>dns.ADDRGETNETWORKPARAMS</code>: Could not find GetNetworkParams function.</li>\n<li><p><code>dns.CANCELLED</code>: DNS query cancelled.</p>\n</li>\n<li><p><code>dns.NODATA</code>: DNS 服务器返回无数据应答。</p>\n</li>\n<li><code>dns.FORMERR</code>: DNS 声称查询格式错误。</li>\n<li><code>dns.SERVFAIL</code>: DNS 服务器返回一般失败。</li>\n<li><code>dns.NOTFOUND</code>: 域名未找到。</li>\n<li><code>dns.NOTIMP</code>: DNS 服务器未实现所请求操作。</li>\n<li><code>dns.REFUSED</code>: DNS 服务器拒绝查询。</li>\n<li><code>dns.BADQUERY</code>: DNS 查询格式错误。</li>\n<li><code>dns.BADNAME</code>: 域名格式错误。</li>\n<li><code>dns.BADFAMILY</code>: 不支持的地址类型。</li>\n<li><code>dns.BADRESP</code>: DNS 答复格式错误。</li>\n<li><code>dns.CONNREFUSED</code>: 无法联系 DNS 服务器。</li>\n<li><code>dns.TIMEOUT</code>: 联系 DNS 服务器超时。</li>\n<li><code>dns.EOF</code>: 文件末端。</li>\n<li><code>dns.FILE</code>: 读取文件错误。</li>\n<li><code>dns.NOMEM</code>: 超出内存。</li>\n<li><code>dns.DESTRUCTION</code>: 通道正在被销毁。</li>\n<li><code>dns.BADSTR</code>: 字符串格式错误。</li>\n<li><code>dns.BADFLAGS</code>: 指定了非法标记。</li>\n<li><code>dns.NONAME</code>: 所给主机名非数字。</li>\n<li><code>dns.BADHINTS</code>: 指定了非法提示标记。</li>\n<li><code>dns.NOTINITIALIZED</code>: c-ares 库初始化尚未进行。</li>\n<li><code>dns.LOADIPHLPAPI</code>: 加载 iphlpapi.dll 出错。</li>\n<li><code>dns.ADDRGETNETWORKPARAMS</code>: 无法找到 GetNetworkParams 函数。</li>\n<li><code>dns.CANCELLED</code>: DNS 查询取消。</li>\n</ul>\n",
          "type": "module",
          "displayName": "错误代码"
        }
      ],
      "type": "module",
      "displayName": "DNS"
    }
  ]
}