0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00
nodejs/doc/api/dns.markdown

163 lines
5.9 KiB
Markdown
Raw Normal View History

2012-02-27 20:08:41 +01:00
# DNS
2010-10-28 14:18:16 +02:00
Stability: 3 - Stable
Use `require('dns')` to access this module. All methods in the dns module
use C-Ares except for `dns.lookup` which uses `getaddrinfo(3)` in a thread
pool. C-Ares is much faster than `getaddrinfo` but the system resolver is
2013-12-02 11:18:37 +01:00
more consistent with how other programs operate. When a user does
`net.connect(80, 'google.com')` or `http.get({ host: 'google.com' })` the
2013-03-28 15:19:10 +01:00
`dns.lookup` method is used. Users who need to do a large number of lookups
quickly should use the methods that go through C-Ares.
2010-10-28 14:18:16 +02:00
Here is an example which resolves `'www.google.com'` then reverse
resolves the IP addresses which are returned.
var dns = require('dns');
dns.resolve4('www.google.com', function (err, addresses) {
if (err) throw err;
console.log('addresses: ' + JSON.stringify(addresses));
addresses.forEach(function (a) {
dns.reverse(a, function (err, hostnames) {
2010-10-28 14:18:16 +02:00
if (err) {
2012-04-18 15:56:14 +02:00
throw err;
2010-10-28 14:18:16 +02:00
}
2012-04-18 15:56:14 +02:00
console.log('reverse for ' + a + ': ' + JSON.stringify(hostnames));
2010-10-28 14:18:16 +02:00
});
});
});
## dns.lookup(hostname, [family], callback)
2010-10-28 14:18:16 +02:00
Resolves a hostname (e.g. `'google.com'`) into the first found A (IPv4) or
2010-10-28 14:18:16 +02:00
AAAA (IPv6) record.
The `family` can be the integer `4` or `6`. Defaults to `null` that indicates
both Ip v4 and v6 address family.
2010-10-28 14:18:16 +02:00
The callback has arguments `(err, address, family)`. The `address` argument
is a string representation of a IP v4 or v6 address. The `family` argument
is either the integer 4 or 6 and denotes the family of `address` (not
2011-02-25 01:36:43 +01:00
necessarily the value initially passed to `lookup`).
2010-10-28 14:18:16 +02:00
2012-04-18 15:56:14 +02:00
On error, `err` is an `Error` object, where `err.code` is the error code.
Keep in mind that `err.code` will be set to `'ENOENT'` not only when
the hostname does not exist but also when the lookup fails in other ways
2012-04-18 15:56:14 +02:00
such as no available file descriptors.
2010-10-28 14:18:16 +02:00
## dns.resolve(hostname, [rrtype], callback)
2010-10-28 14:18:16 +02:00
Resolves a hostname (e.g. `'google.com'`) into an array of the record types
specified by rrtype. Valid rrtypes are `'A'` (IPV4 addresses, default),
`'AAAA'` (IPV6 addresses), `'MX'` (mail exchange records), `'TXT'` (text
records), `'SRV'` (SRV records), `'PTR'` (used for reverse IP lookups),
`'NS'` (name server records) and `'CNAME'` (canonical name records).
2010-10-28 14:18:16 +02:00
The callback has arguments `(err, addresses)`. The type of each item
in `addresses` is determined by the record type, and described in the
documentation for the corresponding lookup methods below.
2012-04-18 15:56:14 +02:00
On error, `err` is an `Error` object, where `err.code` is
one of the error codes listed below.
2010-10-28 14:18:16 +02:00
## dns.resolve4(hostname, callback)
2010-10-28 14:18:16 +02:00
The same as `dns.resolve()`, but only for IPv4 queries (`A` records).
`addresses` is an array of IPv4 addresses (e.g.
2010-10-28 14:18:16 +02:00
`['74.125.79.104', '74.125.79.105', '74.125.79.106']`).
## dns.resolve6(hostname, callback)
2010-10-28 14:18:16 +02:00
The same as `dns.resolve4()` except for IPv6 queries (an `AAAA` query).
## dns.resolveMx(hostname, callback)
2010-10-28 14:18:16 +02:00
The same as `dns.resolve()`, but only for mail exchange queries (`MX` records).
`addresses` is an array of MX records, each with a priority and an exchange
attribute (e.g. `[{'priority': 10, 'exchange': 'mx.example.com'},...]`).
## dns.resolveTxt(hostname, callback)
2010-10-28 14:18:16 +02:00
The same as `dns.resolve()`, but only for text queries (`TXT` records).
`addresses` is an array of the text records available for `hostname` (e.g.,
2010-10-28 14:18:16 +02:00
`['v=spf1 ip4:0.0.0.0 ~all']`).
## dns.resolveSrv(hostname, callback)
2010-10-28 14:18:16 +02:00
The same as `dns.resolve()`, but only for service records (`SRV` records).
`addresses` is an array of the SRV records available for `hostname`. Properties
of SRV records are priority, weight, port, and name (e.g.,
2010-10-28 14:18:16 +02:00
`[{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]`).
## dns.resolveNs(hostname, callback)
The same as `dns.resolve()`, but only for name server records (`NS` records).
`addresses` is an array of the name server records available for `hostname`
(e.g., `['ns1.example.com', 'ns2.example.com']`).
## dns.resolveCname(hostname, callback)
The same as `dns.resolve()`, but only for canonical name records (`CNAME`
records). `addresses` is an array of the canonical name records available for
`hostname` (e.g., `['bar.example.com']`).
2012-04-18 15:56:14 +02:00
## dns.reverse(ip, callback)
Reverse resolves an ip address to an array of hostnames.
2012-04-18 15:56:14 +02:00
The callback has arguments `(err, hostnames)`.
2010-10-28 14:18:16 +02:00
2012-04-18 15:56:14 +02:00
On error, `err` is an `Error` object, where `err.code` is
one of the error codes listed below.
## dns.getServers()
Returns an array of IP addresses as strings that are currently being used for
resolution
## dns.setServers(servers)
Given an array of IP addresses as strings, set them as the servers to use for
resolving
If you specify a port with the address it will be stripped, as the underlying
library doesn't support that.
This will throw if you pass invalid input.
2012-04-18 15:56:14 +02:00
## Error codes
Each DNS query can return one of the following error codes:
- `dns.NODATA`: DNS server returned answer with no data.
- `dns.FORMERR`: DNS server claims query was misformatted.
- `dns.SERVFAIL`: DNS server returned general failure.
- `dns.NOTFOUND`: Domain name not found.
- `dns.NOTIMP`: DNS server does not implement requested operation.
- `dns.REFUSED`: DNS server refused query.
- `dns.BADQUERY`: Misformatted DNS query.
- `dns.BADNAME`: Misformatted hostname.
2012-04-18 15:56:14 +02:00
- `dns.BADFAMILY`: Unsupported address family.
- `dns.BADRESP`: Misformatted DNS reply.
- `dns.CONNREFUSED`: Could not contact DNS servers.
- `dns.TIMEOUT`: Timeout while contacting DNS servers.
- `dns.EOF`: End of file.
- `dns.FILE`: Error reading file.
- `dns.NOMEM`: Out of memory.
- `dns.DESTRUCTION`: Channel is being destroyed.
- `dns.BADSTR`: Misformatted string.
- `dns.BADFLAGS`: Illegal flags specified.
- `dns.NONAME`: Given hostname is not numeric.
- `dns.BADHINTS`: Illegal hints flags specified.
- `dns.NOTINITIALIZED`: c-ares library initialization not yet performed.
- `dns.LOADIPHLPAPI`: Error loading iphlpapi.dll.
- `dns.ADDRGETNETWORKPARAMS`: Could not find GetNetworkParams function.
- `dns.CANCELLED`: DNS query cancelled.