2012-02-27 20:08:41 +01:00
|
|
|
# DNS
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-03-03 00:14:03 +01:00
|
|
|
Stability: 3 - Stable
|
|
|
|
|
2014-11-14 19:58:54 +01:00
|
|
|
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(3)` but, due to the way it is
|
|
|
|
configured by node, it doesn't use the same set of system configuration files.
|
|
|
|
For instance, _C- Ares will not use the configuration from `/etc/hosts`_. As a
|
|
|
|
result, __only `dns.lookup` should be expected to behave like other programs
|
|
|
|
running on the same system regarding name resolution.__ When a user does
|
2011-10-21 02:52:50 +02:00
|
|
|
`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
|
2011-10-21 02:52:50 +02:00
|
|
|
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) {
|
2013-10-15 12:51:12 +02:00
|
|
|
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
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
console.log('reverse for ' + a + ': ' + JSON.stringify(hostnames));
|
2010-10-28 14:18:16 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## dns.lookup(hostname[, options], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
Resolves a hostname (e.g. `'google.com'`) into the first found A (IPv4) or
|
2014-05-22 04:13:09 +02:00
|
|
|
AAAA (IPv6) record. `options` can be an object or integer. If `options` is
|
|
|
|
not provided, then IP v4 and v6 addresses are both valid. If `options` is
|
|
|
|
an integer, then it must be `4` or `6`.
|
|
|
|
|
|
|
|
Alternatively, `options` can be an object containing two properties,
|
|
|
|
`family` and `hints`. Both properties are optional. If `family` is provided,
|
|
|
|
it must be the integer `4` or `6`. If `family` is not provided then IP v4
|
|
|
|
and v6 addresses are accepted. The `hints` field, if present, should be one
|
|
|
|
or more of the supported `getaddrinfo` flags. If `hints` is not provided,
|
|
|
|
then no flags are passed to `getaddrinfo`. Multiple flags can be passed
|
|
|
|
through `hints` by logically `OR`ing their values. An example usage of
|
|
|
|
`options` is shown below.
|
|
|
|
|
|
|
|
```
|
|
|
|
{
|
|
|
|
family: 4,
|
|
|
|
hints: dns.ADDRCONFIG | dns.V4MAPPED
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
See [supported `getaddrinfo` flags](#dns_supported_getaddrinfo_flags) below for
|
|
|
|
more information on supported flags.
|
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
|
2013-10-15 12:51:12 +02:00
|
|
|
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
|
|
|
|
2014-06-21 00:43:00 +02:00
|
|
|
# dns.lookupService(address, port, callback)
|
|
|
|
|
|
|
|
Resolves the given address and port into a hostname and service using
|
|
|
|
`getnameinfo`.
|
|
|
|
|
|
|
|
The callback has arguments `(err, hostname, service)`. The `hostname` and
|
|
|
|
`service` arguments are strings (e.g. `'localhost'` and `'http'` respectively).
|
|
|
|
|
|
|
|
On error, `err` is an `Error` object, where `err.code` is the error code.
|
|
|
|
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## dns.resolve(hostname[, rrtype], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
Resolves a hostname (e.g. `'google.com'`) into an array of the record types
|
2013-10-21 15:47:57 +02:00
|
|
|
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)
|
|
|
|
* `'CNAME'` (canonical name records)
|
|
|
|
* `'SOA'` (start of authority record)
|
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
|
|
|
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolve4(hostname, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01: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']`).
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolve6(hostname, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The same as `dns.resolve4()` except for IPv6 queries (an `AAAA` query).
|
|
|
|
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## 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'},...]`).
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolveTxt(hostname, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The same as `dns.resolve()`, but only for text queries (`TXT` records).
|
2014-03-27 21:09:20 +01:00
|
|
|
`addresses` is an 2-d array of the text records available for `hostname` (e.g.,
|
|
|
|
`[ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]`). Each sub-array contains TXT chunks of
|
|
|
|
one record. Depending on the use case, the could be either joined together or
|
|
|
|
treated separately.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolveSrv(hostname, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The same as `dns.resolve()`, but only for service records (`SRV` records).
|
2013-10-15 12:51:12 +02:00
|
|
|
`addresses` is an array of the SRV records available for `hostname`. Properties
|
2010-11-21 23:22:34 +01:00
|
|
|
of SRV records are priority, weight, port, and name (e.g.,
|
2014-06-05 02:15:22 +02:00
|
|
|
`[{'priority': 10, 'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...]`).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-10-21 15:47:57 +02:00
|
|
|
## dns.resolveSoa(hostname, callback)
|
|
|
|
|
2014-05-22 04:13:09 +02:00
|
|
|
The same as `dns.resolve()`, but only for start of authority record queries
|
2013-10-21 15:47:57 +02:00
|
|
|
(`SOA` record).
|
|
|
|
|
|
|
|
`addresses` is an object with the following structure:
|
|
|
|
|
|
|
|
```
|
|
|
|
{
|
|
|
|
nsname: 'ns.example.com',
|
|
|
|
hostmaster: 'root.example.com',
|
|
|
|
serial: 2013101809,
|
|
|
|
refresh: 10000,
|
|
|
|
retry: 2400,
|
|
|
|
expire: 604800,
|
|
|
|
minttl: 3600
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolveNs(hostname, callback)
|
2011-05-12 06:49:26 +02:00
|
|
|
|
|
|
|
The same as `dns.resolve()`, but only for name server records (`NS` records).
|
2013-10-15 12:51:12 +02:00
|
|
|
`addresses` is an array of the name server records available for `hostname`
|
2011-05-12 06:49:26 +02:00
|
|
|
(e.g., `['ns1.example.com', 'ns2.example.com']`).
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
## dns.resolveCname(hostname, callback)
|
2011-05-12 06:49:26 +02:00
|
|
|
|
|
|
|
The same as `dns.resolve()`, but only for canonical name records (`CNAME`
|
|
|
|
records). `addresses` is an array of the canonical name records available for
|
2013-10-15 12:51:12 +02:00
|
|
|
`hostname` (e.g., `['bar.example.com']`).
|
2011-05-12 06:49:26 +02:00
|
|
|
|
2012-04-18 15:56:14 +02:00
|
|
|
## dns.reverse(ip, callback)
|
|
|
|
|
2013-10-15 12:51:12 +02:00
|
|
|
Reverse resolves an ip address to an array of hostnames.
|
2012-04-18 15:56:14 +02:00
|
|
|
|
2013-10-15 12:51:12 +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.
|
|
|
|
|
2013-05-08 21:56:08 +02:00
|
|
|
## 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.
|
2013-10-15 12:51:12 +02:00
|
|
|
- `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.
|
2014-05-22 04:13:09 +02:00
|
|
|
|
|
|
|
## Supported getaddrinfo flags
|
|
|
|
|
|
|
|
The following flags can be passed as hints to `dns.lookup`.
|
|
|
|
|
|
|
|
- `dns.ADDRCONFIG`: Returned address types are determined by the types
|
|
|
|
of addresses supported by the current system. For example, IPv4 addresses
|
|
|
|
are only returned if the current system has at least one IPv4 address
|
|
|
|
configured. Loopback addresses are not considered.
|
|
|
|
- `dns.V4MAPPED`: If the IPv6 family was specified, but no IPv6 addresses
|
|
|
|
were found, then return IPv4 mapped IPv6 addresses.
|