Skip to content

Commit

Permalink
dns: add resolveAny support
Browse files Browse the repository at this point in the history
`dns.resolveAny` and `dns.resolve` with `"ANY"` has the similar behavior
like `$ dig <domain> any` and returns an array with several types of
records.

`dns.resolveAny` parses the result packet by several rules in turn.

Supported types:

* A
* AAAA
* CNAME
* MX
* NAPTR
* NS
* PTR
* SOA
* SRV
* TXT

Refs: nodejs#2848
  • Loading branch information
XadillaX committed May 22, 2017
1 parent 5254975 commit e44d750
Show file tree
Hide file tree
Showing 5 changed files with 899 additions and 156 deletions.
47 changes: 47 additions & 0 deletions doc/api/dns.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ records. The type and structure of individual results varies based on `rrtype`:
| `'SOA'` | start of authority records | {Object} | [`dns.resolveSoa()`][] |
| `'SRV'` | service records | {Object} | [`dns.resolveSrv()`][] |
| `'TXT'` | text records | {string} | [`dns.resolveTxt()`][] |
| `'ANY'` | any records | {Object} | [`dns.resolveAny()`][] |

On error, `err` is an [`Error`][] object, where `err.code` is one of the
[DNS error codes](#dns_error_codes).
Expand Down Expand Up @@ -417,6 +418,51 @@ is a two-dimensional array of the text records available for `hostname` (e.g.,
one record. Depending on the use case, these could be either joined together or
treated separately.

## dns.resolveAny(hostname, callback)

- `hostname` {string}
- `callback` {Function}
- `err` {Error}
- `ret` {Object[][]}

Uses the DNS protocol to resolve any queries (`ANY` records) for the `hostname`.
The `ret` argument passed to the `callback` function will be an array of objects
with uncertain type of records. Each object has a property `type` that indicates
the type of current record. And for each type of record, the object structure
will be like:

| Type | Properties |
|------|------------|
| `"A"` | `address` / `ttl` |
| `"AAAA"` | `address` / `ttl` |
| `"CNAME"` | `value` |
| `"MX"` | Refer to [`dns.resolveMx()`][] |
| `"NAPTR"` | Refer to [`dns.resolveNaptr()`][] |
| `"NS"` | `value` |
| `"PTR"` | `value` |
| `"SOA"` | Refer to [`dns.resolveSoa()`][] |
| `"SRV"` | Refer to [`dns.resolveSrv()`][] |
| `"TXT"` | This is an array-liked object with `length` and `indexes`, eg. `{'0':'sth','length':1}` |

Following is a example of the `ret` object passed to the callback:

<!-- eslint-disable -->
```js
[ { address: '127.0.0.1', ttl: 299, type: 'A' },
{ value: 'example.com', type: 'CNAME' }, // in fact, CNAME can't stay with A
{ exchange: 'alt4.aspmx.l.example.com', priority: 50, type: 'MX' },
{ value: 'ns1.example.com', type: 'NS' },
{ '0': 'v=spf1 include:_spf.example.com ~all', type: 'TXT', length: 1 },
{ nsname: 'ns1.example.com',
hostmaster: 'admin.example.com',
serial: 156696742,
refresh: 900,
retry: 900,
expire: 1800,
minttl: 60,
type: 'SOA' } ]
```

## dns.reverse(ip, callback)
<!-- YAML
added: v0.1.16
Expand Down Expand Up @@ -531,6 +577,7 @@ uses. For instance, _they do not use the configuration from `/etc/hosts`_.
[`dns.resolveSoa()`]: #dns_dns_resolvesoa_hostname_callback
[`dns.resolveSrv()`]: #dns_dns_resolvesrv_hostname_callback
[`dns.resolveTxt()`]: #dns_dns_resolvetxt_hostname_callback
[`dns.resolveAny()`]: #dns_dns_resolveany_hostname_callback
[DNS error codes]: #dns_error_codes
[Implementation considerations section]: #dns_implementation_considerations
[supported `getaddrinfo` flags]: #dns_supported_getaddrinfo_flags
Expand Down
2 changes: 2 additions & 0 deletions lib/dns.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ function resolver(bindingName) {


var resolveMap = Object.create(null);
resolveMap.ANY = resolver('queryAny');
resolveMap.A = resolver('queryA');
resolveMap.AAAA = resolver('queryAaaa');
resolveMap.CNAME = resolver('queryCname');
Expand Down Expand Up @@ -361,6 +362,7 @@ module.exports = {
getServers,
setServers,
resolve,
resolveAny: resolveMap.ANY,
resolve4: resolveMap.A,
resolve6: resolveMap.AAAA,
resolveCname: resolveMap.CNAME,
Expand Down
Loading

0 comments on commit e44d750

Please sign in to comment.