DNS
- DNS
- Class: dns.Resolver
- dns.getServers()
- dns.lookup(hostname[, options], callback)
- dns.lookupService(address, port, callback)
- dns.resolve(hostname[, rrtype], callback)
- dns.resolve4(hostname[, options], callback)
- dns.resolve6(hostname[, options], callback)
- dns.resolveAny(hostname, callback)
- dns.resolveCname(hostname, callback)
- dns.resolveCaa(hostname, callback)
- dns.resolveMx(hostname, callback)
- dns.resolveNaptr(hostname, callback)
- dns.resolveNs(hostname, callback)
- dns.resolvePtr(hostname, callback)
- dns.resolveSoa(hostname, callback)
- dns.resolveSrv(hostname, callback)
- dns.resolveTlsa(hostname, callback)
- dns.resolveTxt(hostname, callback)
- dns.reverse(ip, callback)
- dns.setDefaultResultOrder(order)
- dns.getDefaultResultOrder()
- dns.setServers(servers)
- DNS promises API
- Class: dnsPromises.Resolver
- resolver.cancel()
- dnsPromises.getServers()
- dnsPromises.lookup(hostname[, options])
- dnsPromises.lookupService(address, port)
- dnsPromises.resolve(hostname[, rrtype])
- dnsPromises.resolve4(hostname[, options])
- dnsPromises.resolve6(hostname[, options])
- dnsPromises.resolveAny(hostname)
<!--introduced_in=v0.10.0-->
Stability: 2 - Stable
<!-- source_link=lib/dns.js -->
The node:dns module enables name resolution. For example, use it to look up IP
addresses of host names.
Although named for the [Domain Name System (DNS)][], it does not always use the
DNS protocol for lookups. [dns.lookup()][] uses the operating system
facilities to perform name resolution. It may not need to perform any network
communication. To perform name resolution the way other applications on the same
system do, use [dns.lookup()][].
import dns from 'node:dns';
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
const dns = require('node:dns');
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
All other functions in the node:dns module connect to an actual DNS server to
perform name resolution. They will always use the network to perform DNS
queries. These functions do not use the same set of configuration files used by
[dns.lookup()][] (e.g. /etc/hosts). Use these functions to always perform
DNS queries, bypassing other name-resolution facilities.
import dns from 'node:dns';
dns.resolve4('archive.org', (err, addresses) => {
if (err) throw err;
console.log(`addresses: ${JSON.stringify(addresses)}`);
addresses.forEach((a) => {
dns.reverse(a, (err, hostnames) => {
if (err) {
throw err;
}
console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
});
});
});
const dns = require('node:dns');
dns.resolve4('archive.org', (err, addresses) => {
if (err) throw err;
console.log(`addresses: ${JSON.stringify(addresses)}`);
addresses.forEach((a) => {
dns.reverse(a, (err, hostnames) => {
if (err) {
throw err;
}
console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
});
});
});
See the [Implementation considerations section][] for more information.
Class: dns.Resolver
<!-- YAML added: v8.3.0 -->
An independent resolver for DNS requests.
Creating a new resolver uses the default server settings. Setting
the servers used for a resolver using
[resolver.setServers()][dns.setServers()] does not affect
other resolvers:
import { Resolver } from 'node:dns';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
const { Resolver } = require('node:dns');
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
The following methods from the node:dns module are available:
- [
resolver.getServers()][dns.getServers()] - [
resolver.resolve()][dns.resolve()] - [
resolver.resolve4()][dns.resolve4()] - [
resolver.resolve6()][dns.resolve6()] - [
resolver.resolveAny()][dns.resolveAny()] - [
resolver.resolveCaa()][dns.resolveCaa()] - [
resolver.resolveCname()][dns.resolveCname()] - [
resolver.resolveMx()][dns.resolveMx()] - [
resolver.resolveNaptr()][dns.resolveNaptr()] - [
resolver.resolveNs()][dns.resolveNs()] - [
resolver.resolvePtr()][dns.resolvePtr()] - [
resolver.resolveSoa()][dns.resolveSoa()] - [
resolver.resolveSrv()][dns.resolveSrv()] - [
resolver.resolveTlsa()][dns.resolveTlsa()] - [
resolver.resolveTxt()][dns.resolveTxt()] - [
resolver.reverse()][dns.reverse()] - [
resolver.setServers()][dns.setServers()]
Resolver([options])
<!-- YAML
added: v8.3.0
changes:
- version:
- v16.7.0
- v14.18.0
pr-url: https://github.com/nodejs/node/pull/39610
description: The options object now accepts a tries option.
- version: v12.18.3
pr-url: https://github.com/nodejs/node/pull/33472
description: The constructor now accepts an options object.
The single supported option is timeout.
-->
Create a new resolver.
options{Object}timeout{integer} Query timeout in milliseconds, or-1to use the default timeout.tries{integer} The number of tries the resolver will try contacting each name server before giving up. Default:4maxTimeout{integer} The max retry timeout, in milliseconds. Default:0, disabled.
resolver.cancel()
<!-- YAML added: v8.3.0 -->
Cancel all outstanding DNS queries made by this resolver. The corresponding
callbacks will be called with an error with code ECANCELLED.
resolver.setLocalAddress([ipv4][, ipv6])
<!-- YAML added: - v15.1.0 - v14.17.0 -->
ipv4{string} A string representation of an IPv4 address. Default:'0.0.0.0'ipv6{string} A string representation of an IPv6 address. Default:'::0'
The resolver instance will send its requests from the specified IP address. This allows programs to specify outbound interfaces when used on multi-homed systems.
If a v4 or v6 address is not specified, it is set to the default and the operating system will choose a local address automatically.
The resolver will use the v4 local address when making requests to IPv4 DNS
servers, and the v6 local address when making requests to IPv6 DNS servers.
The rrtype of resolution requests has no impact on the local address used.
dns.getServers()
<!-- YAML added: v0.11.3 -->
- Returns: {string[]}
Returns an array of IP address strings, formatted according to [RFC 5952][], that are currently configured for DNS resolution. A string will include a port section if a custom port is used.
[
"8.8.8.8",
"2001:4860:4860::8888",
"8.8.8.8:1053",
"[2001:4860:4860::8888]:1053",
]
dns.lookup(hostname[, options], callback)
<!-- YAML
added: v0.1.90
changes:
- version:
- v22.1.0
- v20.13.0
pr-url: https://github.com/nodejs/node/pull/52492
description: The verbatim option is now deprecated in favor of the new order option.
- version: v18.4.0
pr-url: https://github.com/nodejs/node/pull/43054
description: For compatibility with node:net, when passing an option
object the family option can be the string 'IPv4' or the
string 'IPv6'.
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
- version: v17.0.0
pr-url: https://github.com/nodejs/node/pull/39987
description: The verbatim options defaults to true now.
- version: v8.5.0
pr-url: https://github.com/nodejs/node/pull/14731
description: The verbatim option is supported now.
- version: v1.2.0
pr-url: https://github.com/nodejs/node/pull/744
description: The all option is supported now.
-->
hostname{string}options{integer | Object}family{integer|string} The record family. Must be4,6, or0. For backward compatibility reasons,'IPv4'and'IPv6'are interpreted as4and6respectively. The value0indicates that either an IPv4 or IPv6 address is returned. If the value0is used with{ all: true }(see below), either one of or both IPv4 and IPv6 addresses are returned, depending on the system's DNS resolver. Default:0.hints{number} One or more [supportedgetaddrinfoflags][]. Multiple flags may be passed by bitwiseORing their values.all{boolean} Whentrue, the callback returns all resolved addresses in an array. Otherwise, returns a single address. Default:false.order{string} Whenverbatim, the resolved addresses are returned unsorted. Whenipv4first, the resolved addresses are sorted by placing IPv4 addresses before IPv6 addresses. Whenipv6first, the resolved addresses are sorted by placing IPv6 addresses before IPv4 addresses. Default:verbatim(addresses are not reordered). Default value is configurable using [dns.setDefaultResultOrder()][] or [--dns-result-order][].verbatim{boolean} Whentrue, the callback receives IPv4 and IPv6 addresses in the order the DNS resolver returned them. Whenfalse, IPv4 addresses are placed before IPv6 addresses. This option will be deprecated in favor oforder. When both are specified,orderhas higher precedence. New code should only useorder. Default:true(addresses are not reordered). Default value is configurable using [dns.setDefaultResultOrder()][] or [--dns-result-order][].callback{Function}err{Error}address{string} A string representation of an IPv4 or IPv6 address. Not provided whenoptions.allistrue.family{integer}4or6, denoting the family ofaddress, or0if the address is not an IPv4 or IPv6 address.0is a likely indicator of a bug in the name resolution service used by the operating system. Not provided whenoptions.allistrue.addresses{Object[]} An array of address objects whenoptions.allistrue. Each object has the following properties:address{string} A string representation of an IPv4 or IPv6 address.family{integer}4or6, denoting the family ofaddress.
Resolves a host name (e.g. 'nodejs.org') into the first found A (IPv4) or
AAAA (IPv6) record. All option properties are optional. If options is an
integer, then it must be 4 or 6 – if options is not provided, then
either IPv4 or IPv6 addresses, or both, are returned if found.
With the all option set to true, the arguments for callback change to
(err, addresses), with addresses being an array of objects with the
properties address and family.
On error, err is an [Error][] object, where err.code is the error code.
Keep in mind that err.code will be set to 'ENOTFOUND' not only when
the host name does not exist but also when the lookup fails in other ways
such as no available file descriptors.
dns.lookup() does not necessarily have anything to do with the DNS protocol.
The implementation uses an operating system facility that can associate names
with addresses and vice versa. This implementation can have subtle but
important consequences on the behavior of any Node.js program. Please take some
time to consult the [Implementation considerations section][] before using
dns.lookup().
Example usage:
import dns from 'node:dns';
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
const dns = require('node:dns');
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
If this method is invoked as its [util.promisify()][]ed version, and all
is not set to true, it returns a Promise for an Object with address and
family properties.
Supported getaddrinfo flags
<!-- YAML
changes:
- version:
- v13.13.0
- v12.17.0
pr-url: https://github.com/nodejs/node/pull/32183
description: Added support for the dns.ALL flag.
-->
The following flags can be passed as hints to [dns.lookup()][].
dns.ADDRCONFIG: Limits returned address types to the types of non-loopback addresses configured on the system. For example, IPv4 addresses are only returned if the current system has at least one IPv4 address configured.dns.V4MAPPED: If the IPv6 family was specified, but no IPv6 addresses were found, then return IPv4 mapped IPv6 addresses. It is not supported on some operating systems (e.g. FreeBSD 10.1).dns.ALL: Ifdns.V4MAPPEDis specified, return resolved IPv6 addresses as well as IPv4 mapped IPv6 addresses.
dns.lookupService(address, port, callback)
<!-- YAML
added: v0.11.14
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
address{string}port{number}callback{Function}err{Error}hostname{string} e.g.example.comservice{string} e.g.http
Resolves the given address and port into a host name and service using
the operating system's underlying getnameinfo implementation.
If address is not a valid IP address, a TypeError will be thrown.
The port will be coerced to a number. If it is not a legal port, a TypeError
will be thrown.
On an error, err is an [Error][] object, where err.code is the error code.
import dns from 'node:dns';
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});
const dns = require('node:dns');
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service);
// Prints: localhost ssh
});
If this method is invoked as its [util.promisify()][]ed version, it returns a
Promise for an Object with hostname and service properties.
dns.resolve(hostname[, rrtype], callback)
<!-- YAML
added: v0.1.27
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string} Host name to resolve.rrtype{string} Resource record type. Default:'A'.callback{Function}err{Error}records{string[] | Object[] | Object}
Uses the DNS protocol to resolve a host name (e.g. 'nodejs.org') into an array
of the resource records. The callback function has arguments
(err, records). When successful, records will be an array of resource
records. The type and structure of individual results varies based on rrtype:
rrtype |
records contains |
Result type | Shorthand method |
|---|---|---|---|
'A' |
IPv4 addresses (default) | {string} | [dns.resolve4()][] |
'AAAA' |
IPv6 addresses | {string} | [dns.resolve6()][] |
'ANY' |
any records | {Object} | [dns.resolveAny()][] |
'CAA' |
CA authorization records | {Object} | [dns.resolveCaa()][] |
'CNAME' |
canonical name records | {string} | [dns.resolveCname()][] |
'MX' |
mail exchange records | {Object} | [dns.resolveMx()][] |
'NAPTR' |
name authority pointer records | {Object} | [dns.resolveNaptr()][] |
'NS' |
name server records | {string} | [dns.resolveNs()][] |
'PTR' |
pointer records | {string} | [dns.resolvePtr()][] |
'SOA' |
start of authority records | {Object} | [dns.resolveSoa()][] |
'SRV' |
service records | {Object} | [dns.resolveSrv()][] |
'TLSA' |
certificate associations | {Object} | [dns.resolveTlsa()][] |
'TXT' |
text records | {string[]} | [dns.resolveTxt()][] |
On error, err is an [Error][] object, where err.code is one of the
[DNS error codes][].
dns.resolve4(hostname[, options], callback)
<!-- YAML
added: v0.1.16
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
- version: v7.2.0
pr-url: https://github.com/nodejs/node/pull/9296
description: This method now supports passing options,
specifically options.ttl.
-->
hostname{string} Host name to resolve.options{Object}ttl{boolean} Retrieves the Time-To-Live value (TTL) of each record. Whentrue, the callback receives an array of{ address: '1.2.3.4', ttl: 60 }objects rather than an array of strings, with the TTL expressed in seconds.callback{Function}err{Error}addresses{string[] | Object[]}
Uses the DNS protocol to resolve an IPv4 addresses (A records) for the
hostname. The addresses argument passed to the callback function
will contain an array of IPv4 addresses (e.g.
['74.125.79.104', '74.125.79.105', '74.125.79.106']).
dns.resolve6(hostname[, options], callback)
<!-- YAML
added: v0.1.16
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
- version: v7.2.0
pr-url: https://github.com/nodejs/node/pull/9296
description: This method now supports passing options,
specifically options.ttl.
-->
hostname{string} Host name to resolve.options{Object}ttl{boolean} Retrieve the Time-To-Live value (TTL) of each record. Whentrue, the callback receives an array of{ address: '0:1:2:3:4:5:6:7', ttl: 60 }objects rather than an array of strings, with the TTL expressed in seconds.callback{Function}err{Error}addresses{string[] | Object[]}
Uses the DNS protocol to resolve IPv6 addresses (AAAA records) for the
hostname. The addresses argument passed to the callback function
will contain an array of IPv6 addresses.
dns.resolveAny(hostname, callback)
<!-- YAML
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}ret{Object[]}
Uses the DNS protocol to resolve all records (also known as ANY or * query).
The ret argument passed to the callback function will be an array containing
various types of records. Each object has a property type that indicates the
type of the current record. And depending on the type, additional properties
will be present on the object:
| Type | Properties |
|---|---|
'A' |
address/ttl |
'AAAA' |
address/ttl |
'CAA' |
Refer to [dns.resolveCaa()][] |
'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()][] |
'TLSA' |
Refer to [dns.resolveTlsa()][] |
'TXT' |
This type of record contains an array property called entries which refers to [dns.resolveTxt()][], e.g. { entries: ['...'], type: 'TXT' } |
Here is an example of the ret object passed to the callback:
[ { type: 'A', address: '127.0.0.1', ttl: 299 },
{ type: 'CNAME', value: 'example.com' },
{ type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
{ type: 'NS', value: 'ns1.example.com' },
{ type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
{ type: 'SOA',
nsname: 'ns1.example.com',
hostmaster: 'admin.example.com',
serial: 156696742,
refresh: 900,
retry: 900,
expire: 1800,
minttl: 60 } ];
DNS server operators may choose not to respond to ANY
queries. It may be better to call individual methods like [dns.resolve4()][],
[dns.resolveMx()][], and so on. For more details, see [RFC 8482][].
dns.resolveCname(hostname, callback)
<!-- YAML
added: v0.3.2
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{string[]}
Uses the DNS protocol to resolve CNAME records for the hostname. The
addresses argument passed to the callback function
will contain an array of canonical name records available for the hostname
(e.g. ['bar.example.com']).
dns.resolveCaa(hostname, callback)
<!-- YAML
added:
- v15.0.0
- v14.17.0
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}records{Object[]}
Uses the DNS protocol to resolve CAA records for the hostname. The
addresses argument passed to the callback function
will contain an array of certification authority authorization records
available for the hostname (e.g. [{critical: 0, iodef:
'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]).
dns.resolveMx(hostname, callback)
<!-- YAML
added: v0.1.27
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{Object[]}
Uses the DNS protocol to resolve mail exchange records (MX records) for the
hostname. The addresses argument passed to the callback function will
contain an array of objects containing both a priority and exchange
property (e.g. [{priority: 10, exchange: 'mx.example.com'}, ...]).
dns.resolveNaptr(hostname, callback)
<!-- YAML
added: v0.9.12
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{Object[]}
Uses the DNS protocol to resolve regular expression-based records (NAPTR
records) for the hostname. The addresses argument passed to the callback
function will contain an array of objects with the following properties:
flagsserviceregexpreplacementorderpreference
({
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100,
});
dns.resolveNs(hostname, callback)
<!-- YAML
added: v0.1.90
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{string[]}
Uses the DNS protocol to resolve name server records (NS records) for the
hostname. The addresses argument passed to the callback function will
contain an array of name server records available for hostname
(e.g. ['ns1.example.com', 'ns2.example.com']).
dns.resolvePtr(hostname, callback)
<!-- YAML
added: v6.0.0
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{string[]}
Uses the DNS protocol to resolve pointer records (PTR records) for the
hostname. The addresses argument passed to the callback function will
be an array of strings containing the reply records.
dns.resolveSoa(hostname, callback)
<!-- YAML
added: v0.11.10
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}address{Object}
Uses the DNS protocol to resolve a start of authority record (SOA record) for
the hostname. The address argument passed to the callback function will
be an object with the following properties:
nsnamehostmasterserialrefreshretryexpireminttl
({
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600,
});
dns.resolveSrv(hostname, callback)
<!-- YAML
added: v0.1.27
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}addresses{Object[]}
Uses the DNS protocol to resolve service records (SRV records) for the
hostname. The addresses argument passed to the callback function will
be an array of objects with the following properties:
priorityweightportname
({
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com',
});
dns.resolveTlsa(hostname, callback)
<!-- YAML added: - v23.9.0 - v22.15.0 -->
<!--lint disable no-undefined-references list-item-bullet-indent-->
hostname{string}callback{Function}err{Error}records{Object[]}
<!--lint enable no-undefined-references list-item-bullet-indent-->
Uses the DNS protocol to resolve certificate associations (TLSA records) for
the hostname. The records argument passed to the callback function is an
array of objects with these properties:
certUsageselectormatchdata
({
certUsage: 3,
selector: 1,
match: 1,
data: [ArrayBuffer],
});
dns.resolveTxt(hostname, callback)
<!-- YAML
added: v0.1.27
changes:
- version: v18.0.0
pr-url: https://github.com/nodejs/node/pull/41678
description: Passing an invalid callback to the callback argument
now throws ERR_INVALID_ARG_TYPE instead of
ERR_INVALID_CALLBACK.
-->
hostname{string}callback{Function}err{Error}records{string[]}
Uses the DNS protocol to resolve text queries (TXT records) for the
hostname. The records argument passed to the callback function is a
two-dimensional 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, these could be either joined together or
treated separately.
dns.reverse(ip, callback)
<!-- YAML added: v0.1.16 -->
ip{string}callback{Function}err{Error}hostnames{string[]}
Performs a reverse DNS query that resolves an IPv4 or IPv6 address to an array of host names.
On error, err is an [Error][] object, where err.code is
one of the [DNS error codes][].
dns.setDefaultResultOrder(order)
<!-- YAML
added:
- v16.4.0
- v14.18.0
changes:
- version:
- v22.1.0
- v20.13.0
pr-url: https://github.com/nodejs/node/pull/52492
description: The ipv6first value is supported now.
- version: v17.0.0
pr-url: https://github.com/nodejs/node/pull/39987
description: Changed default value to verbatim.
-->
order{string} must be'ipv4first','ipv6first'or'verbatim'.
Set the default value of order in [dns.lookup()][] and
[dnsPromises.lookup()][]. The value could be:
ipv4first: sets defaultordertoipv4first.ipv6first: sets defaultordertoipv6first.verbatim: sets defaultordertoverbatim.
The default is verbatim and [dns.setDefaultResultOrder()][] have higher
priority than [--dns-result-order][]. When using [worker threads][],
[dns.setDefaultResultOrder()][] from the main thread won't affect the default
dns orders in workers.
dns.getDefaultResultOrder()
<!-- YAML
added:
- v20.1.0
- v18.17.0
changes:
- version:
- v22.1.0
- v20.13.0
pr-url: https://github.com/nodejs/node/pull/52492
description: The ipv6first value is supported now.
-->
Get the default value for order in [dns.lookup()][] and
[dnsPromises.lookup()][]. The value could be:
ipv4first: fororderdefaulting toipv4first.ipv6first: fororderdefaulting toipv6first.verbatim: fororderdefaulting toverbatim.
dns.setServers(servers)
<!-- YAML added: v0.11.3 -->
servers{string[]} array of [RFC 5952][] formatted addresses
Sets the IP address and port of servers to be used when performing DNS
resolution. The servers argument is an array of [RFC 5952][] formatted
addresses. If the port is the IANA default DNS port (53) it can be omitted.
dns.setServers([
'8.8.8.8',
'[2001:4860:4860::8888]',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]);
An error will be thrown if an invalid address is provided.
The dns.setServers() method must not be called while a DNS query is in
progress.
The [dns.setServers()][] method affects only [dns.resolve()][],
dns.resolve*() and [dns.reverse()][] (and specifically not
[dns.lookup()][]).
This method works much like
resolve.conf.
That is, if attempting to resolve with the first server provided results in a
NOTFOUND error, the resolve() method will not attempt to resolve with
subsequent servers provided. Fallback DNS servers will only be used if the
earlier ones time out or result in some other error.
DNS promises API
<!-- YAML
added: v10.6.0
changes:
- version: v15.0.0
pr-url: https://github.com/nodejs/node/pull/32953
description: Exposed as require('dns/promises').
- version:
- v11.14.0
- v10.17.0
pr-url: https://github.com/nodejs/node/pull/26592
description: This API is no longer experimental.
-->
The dns.promises API provides an alternative set of asynchronous DNS methods
that return Promise objects rather than using callbacks. The API is accessible
via require('node:dns').promises or require('node:dns/promises').
Class: dnsPromises.Resolver
<!-- YAML added: v10.6.0 -->
An independent resolver for DNS requests.
Creating a new resolver uses the default server settings. Setting
the servers used for a resolver using
[resolver.setServers()][dnsPromises.setServers()] does not affect
other resolvers:
import { Resolver } from 'node:dns/promises';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// This request will use the server at 4.4.4.4, independent of global settings.
const addresses = await resolver.resolve4('example.org');
const { Resolver } = require('node:dns').promises;
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org').then((addresses) => {
// ...
});
// Alternatively, the same code can be written using async-await style.
(async function() {
const addresses = await resolver.resolve4('example.org');
})();
The following methods from the dnsPromises API are available:
- [
resolver.getServers()][dnsPromises.getServers()] - [
resolver.resolve()][dnsPromises.resolve()] - [
resolver.resolve4()][dnsPromises.resolve4()] - [
resolver.resolve6()][dnsPromises.resolve6()] - [
resolver.resolveAny()][dnsPromises.resolveAny()] - [
resolver.resolveCaa()][dnsPromises.resolveCaa()] - [
resolver.resolveCname()][dnsPromises.resolveCname()] - [
resolver.resolveMx()][dnsPromises.resolveMx()] - [
resolver.resolveNaptr()][dnsPromises.resolveNaptr()] - [
resolver.resolveNs()][dnsPromises.resolveNs()] - [
resolver.resolvePtr()][dnsPromises.resolvePtr()] - [
resolver.resolveSoa()][dnsPromises.resolveSoa()] - [
resolver.resolveSrv()][dnsPromises.resolveSrv()] - [
resolver.resolveTlsa()][dnsPromises.resolveTlsa()] - [
resolver.resolveTxt()][dnsPromises.resolveTxt()] - [
resolver.reverse()][dnsPromises.reverse()] - [
resolver.setServers()][dnsPromises.setServers()]
resolver.cancel()
<!-- YAML added: - v15.3.0 - v14.17.0 -->
Cancel all outstanding DNS queries made by this resolver. The corresponding
promises will be rejected with an error with the code ECANCELLED.
dnsPromises.getServers()
<!-- YAML added: v10.6.0 -->
- Returns: {string[]}
Returns an array of IP address strings, formatted according to [RFC 5952][], that are currently configured for DNS resolution. A string will include a port section if a custom port is used.
[
"8.8.8.8",
"2001:4860:4860::8888",
"8.8.8.8:1053",
"[2001:4860:4860::8888]:1053"
]
dnsPromises.lookup(hostname[, options])
<!-- YAML
added: v10.6.0
changes:
- version:
- v22.1.0
- v20.13.0
pr-url: https://github.com/nodejs/node/pull/52492
description: The verbatim option is now deprecated in favor of the new order option.
-->
hostname{string}options{integer | Object}family{integer} The record family. Must be4,6, or0. The value0indicates that either an IPv4 or IPv6 address is returned. If the value0is used with{ all: true }(see below), either one of or both IPv4 and IPv6 addresses are returned, depending on the system's DNS resolver. Default:0.hints{number} One or more [supportedgetaddrinfoflags][]. Multiple flags may be passed by bitwiseORing their values.all{boolean} Whentrue, thePromiseis resolved with all addresses in an array. Otherwise, returns a single address. Default:false.order{string} Whenverbatim, thePromiseis resolved with IPv4 and IPv6 addresses in the order the DNS resolver returned them. Whenipv4first, IPv4 addresses are placed before IPv6 addresses. Whenipv6first, IPv6 addresses are placed before IPv4 addresses. Default:verbatim(addresses are not reordered). Default value is configurable using [dns.setDefaultResultOrder()][] or [--dns-result-order][]. New code should use{ order: 'verbatim' }.verbatim{boolean} Whentrue, thePromiseis resolved with IPv4 and IPv6 addresses in the order the DNS resolver returned them. Whenfalse, IPv4 addresses are placed before IPv6 addresses. This option will be deprecated in favor oforder. When both are specified,orderhas higher precedence. New code should only useorder. Default:true(addresses are not reordered). Default value is configurable using [dns.setDefaultResultOrder()][] or [--dns-result-order][].
Resolves a host name (e.g. 'nodejs.org') into the first found A (IPv4) or
AAAA (IPv6) record. All option properties are optional. If options is an
integer, then it must be 4 or 6 – if options is not provided, then
either IPv4 or IPv6 addresses, or both, are returned if found.
With the all option set to true, the Promise is resolved with addresses
being an array of objects with the properties address and family.
On error, the Promise is rejected with an [Error][] object, where err.code
is the error code.
Keep in mind that err.code will be set to 'ENOTFOUND' not only when
the host name does not exist but also when the lookup fails in other ways
such as no available file descriptors.
[dnsPromises.lookup()][] does not necessarily have anything to do with the DNS
protocol. The implementation uses an operating system facility that can
associate names with addresses and vice versa. This implementation can have
subtle but important consequences on the behavior of any Node.js program. Please
take some time to consult the [Implementation considerations section][] before
using dnsPromises.lookup().
Example usage:
import dns from 'node:dns';
const dnsPromises = dns.promises;
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
await dnsPromises.lookup('example.org', options).then((result) => {
console.log('address: %j family: IPv%s', result.address, result.family);
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});
// When options.all is true, the result will be an Array.
options.all = true;
await dnsPromises.lookup('example.org', options).then((result) => {
console.log('addresses: %j', result);
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});
const dns = require('node:dns');
const dnsPromises = dns.promises;
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dnsPromises.lookup('example.org', options).then((result) => {
console.log('address: %j family: IPv%s', result.address, result.family);
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});
// When options.all is true, the result will be an Array.
options.all = true;
dnsPromises.lookup('example.org', options).then((result) => {
console.log('addresses: %j', result);
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});
dnsPromises.lookupService(address, port)
<!-- YAML added: v10.6.0 -->
address{string}port{number}
Resolves the given address and port into a host name and service using
the operating system's underlying getnameinfo implementation.
If address is not a valid IP address, a TypeError will be thrown.
The port will be coerced to a number. If it is not a legal port, a TypeError
will be thrown.
On error, the Promise is rejected with an [Error][] object, where err.code
is the error code.
import dnsPromises from 'node:dns/promises';
const result = await dnsPromises.lookupService('127.0.0.1', 22);
console.log(result.hostname, result.service); // Prints: localhost ssh
const dnsPromises = require('node:dns').promises;
dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
console.log(result.hostname, result.service);
// Prints: localhost ssh
});
dnsPromises.resolve(hostname[, rrtype])
<!-- YAML added: v10.6.0 -->
hostname{string} Host name to resolve.rrtype{string} Resource record type. Default:'A'.
Uses the DNS protocol to resolve a host name (e.g. 'nodejs.org') into an array
of the resource records. When successful, the Promise is resolved with an
array of resource records. The type and structure of individual results vary
based on rrtype:
rrtype |
records contains |
Result type | Shorthand method |
|---|---|---|---|
'A' |
IPv4 addresses (default) | {string} | [dnsPromises.resolve4()][] |
'AAAA' |
IPv6 addresses | {string} | [dnsPromises.resolve6()][] |
'ANY' |
any records | {Object} | [dnsPromises.resolveAny()][] |
'CAA' |
CA authorization records | {Object} | [dnsPromises.resolveCaa()][] |
'CNAME' |
canonical name records | {string} | [dnsPromises.resolveCname()][] |
'MX' |
mail exchange records | {Object} | [dnsPromises.resolveMx()][] |
'NAPTR' |
name authority pointer records | {Object} | [dnsPromises.resolveNaptr()][] |
'NS' |
name server records | {string} | [dnsPromises.resolveNs()][] |
'PTR' |
pointer records | {string} | [dnsPromises.resolvePtr()][] |
'SOA' |
start of authority records | {Object} | [dnsPromises.resolveSoa()][] |
'SRV' |
service records | {Object} | [dnsPromises.resolveSrv()][] |
'TLSA' |
certificate associations | {Object} | [dnsPromises.resolveTlsa()][] |
'TXT' |
text records | {string[]} | [dnsPromises.resolveTxt()][] |
On error, the Promise is rejected with an [Error][] object, where err.code
is one of the [DNS error codes][].
dnsPromises.resolve4(hostname[, options])
<!-- YAML added: v10.6.0 -->
hostname{string} Host name to resolve.options{Object}ttl{boolean} Retrieve the Time-To-Live value (TTL) of each record. Whentrue, thePromiseis resolved with an array of{ address: '1.2.3.4', ttl: 60 }objects rather than an array of strings, with the TTL expressed in seconds.
Uses the DNS protocol to resolve IPv4 addresses (A records) for the
hostname. On success, the Promise is resolved with an array of IPv4
addresses (e.g. ['74.125.79.104', '74.125.79.105', '74.125.79.106']).
dnsPromises.resolve6(hostname[, options])
<!-- YAML added: v10.6.0 -->
hostname{string} Host name to resolve.options{Object}ttl{boolean} Retrieve the Time-To-Live value (TTL) of each record. Whentrue, thePromiseis resolved with an array of{ address: '0:1:2:3:4:5:6:7', ttl: 60 }objects rather than an array of strings, with the TTL expressed in seconds.
Uses the DNS protocol to resolve IPv6 addresses (AAAA records) for the
hostname. On success, the Promise is resolved with an array of IPv6
addresses.
dnsPromises.resolveAny(hostname)
<!-- YAML added: v10.6.0 -->
hostname{string}
Uses the DNS protocol to resolve all records (also known as ANY or * query).
On success, the Promise is resolved with an array containing various types of
records. Each object has a p
(本文超出站点单文档体积上限,已截断)
