dns.lookup
History
verbatim option is now deprecated in favor of the new order option.node:net, when passing an option object the family option can be the string 'IPv4' or the string 'IPv6'.callback argument now throws ERR_INVALID_ARG_TYPE instead of ERR_INVALID_CALLBACK.verbatim options defaults to true now.verbatim option is supported now.all option is supported now.dns.lookup(hostname, options?, callback): void
string4, 6, or 0. For
backward compatibility reasons,'IPv4' and 'IPv6' are interpreted as 4
and 6 respectively. The value 0 indicates that either an IPv4 or IPv6
address is returned. If the value 0 is 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.numbergetaddrinfo flags. Multiple
flags may be passed by bitwise ORing their values.booleantrue, the callback returns all resolved addresses in
an array. Otherwise, returns a single address. Default: false.stringverbatim, the resolved addresses are returned
unsorted. When ipv4first, the resolved addresses are sorted by placing
IPv4 addresses before IPv6 addresses. When ipv6first, 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.booleantrue, the callback receives IPv4 and IPv6
addresses in the order the DNS resolver returned them. When false,
IPv4 addresses are placed before IPv6 addresses.
This option will be deprecated in favor of order. When both are specified,
order has higher precedence. New code should only use order.
Default: true (addresses are not reordered). Default value is
configurable using dns.setDefaultResultOrder() or
--dns-result-order.FunctionErrorstringoptions.all is true.integer4 or 6, denoting the family of address, or 0 if
the address is not an IPv4 or IPv6 address. 0 is a likely indicator of a
bug in the name resolution service used by the operating system.
Not provided when options.all is true.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.
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.