DNS
[Stable: 2 - Stable]
Stable: 2 Стабильность: 2 - Стабильный
Исходный код: lib/dns.js
Модуль node:dns
позволяет разрешать имена. Например, используйте его для поиска IP-адресов имен хостов.
Хотя он и назван в честь Системы доменных имен (DNS), он не всегда использует протокол DNS для поиска. dns.lookup()
использует средства операционной системы для выполнения разрешения имен. Возможно, ему не потребуется выполнять никаких сетевых коммуникаций. Чтобы выполнить разрешение имен так же, как это делают другие приложения в той же системе, используйте 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
Все остальные функции в модуле node:dns
подключаются к реальному DNS-серверу для выполнения разрешения имен. Они всегда будут использовать сеть для выполнения DNS-запросов. Эти функции не используют тот же набор файлов конфигурации, что и dns.lookup()
(например, /etc/hosts
). Используйте эти функции, чтобы всегда выполнять DNS-запросы, минуя другие средства разрешения имен.
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)}`)
})
})
})
См. раздел Соображения по реализации для получения дополнительной информации.
Класс: dns.Resolver
Добавлено в: v8.3.0
Независимый резольвер для DNS-запросов.
Создание нового резольвера использует настройки сервера по умолчанию. Установка серверов, используемых для резольвера, с помощью resolver.setServers()
не влияет на другие резольверы:
import { Resolver } from 'node:dns'
const resolver = new Resolver()
resolver.setServers(['4.4.4.4'])
// Этот запрос будет использовать сервер 4.4.4.4, независимо от глобальных настроек.
resolver.resolve4('example.org', (err, addresses) => {
// ...
})
const { Resolver } = require('node:dns')
const resolver = new Resolver()
resolver.setServers(['4.4.4.4'])
// Этот запрос будет использовать сервер 4.4.4.4, независимо от глобальных настроек.
resolver.resolve4('example.org', (err, addresses) => {
// ...
})
Доступны следующие методы из модуля node:dns
:
resolver.getServers()
resolver.resolve()
resolver.resolve4()
resolver.resolve6()
resolver.resolveAny()
resolver.resolveCaa()
resolver.resolveCname()
resolver.resolveMx()
resolver.resolveNaptr()
resolver.resolveNs()
resolver.resolvePtr()
resolver.resolveSoa()
resolver.resolveSrv()
resolver.resolveTxt()
resolver.reverse()
resolver.setServers()
Resolver([options])
[История]
Версия | Изменения |
---|---|
v16.7.0, v14.18.0 | Объект options теперь принимает опцию tries . |
v12.18.3 | Конструктор теперь принимает объект options . Единственная поддерживаемая опция — timeout . |
v8.3.0 | Добавлено в: v8.3.0 |
Создать новый резольвер.
options
<Object>
resolver.cancel()
Добавлено в версии: v8.3.0
Отменяет все ожидающие DNS-запросы, сделанные этим резолвером. Соответствующие обратные вызовы будут вызваны с ошибкой с кодом ECANCELLED
.
resolver.setLocalAddress([ipv4][, ipv6])
Добавлено в версии: v15.1.0, v14.17.0
ipv4
<string> Строковое представление IPv4-адреса. По умолчанию:'0.0.0.0'
ipv6
<string> Строковое представление IPv6-адреса. По умолчанию:'::0'
Экземпляр резолвера будет отправлять свои запросы с указанного IP-адреса. Это позволяет программам указывать исходящие интерфейсы при использовании в многоинтерфейсных системах.
Если адрес v4 или v6 не указан, он устанавливается по умолчанию, и операционная система автоматически выберет локальный адрес.
Резолвер будет использовать локальный адрес v4 при выполнении запросов к DNS-серверам IPv4 и локальный адрес v6 при выполнении запросов к DNS-серверам IPv6. rrtype
запросов на разрешение не влияет на используемый локальный адрес.
dns.getServers()
Добавлено в версии: v0.11.3
- Возвращает: <string[]>
Возвращает массив строк IP-адресов, отформатированных в соответствии с RFC 5952, которые в настоящее время настроены для разрешения DNS. Строка будет включать раздел порта, если используется пользовательский порт.
;['8.8.8.8', '2001:4860:4860::8888', '8.8.8.8:1053', '[2001:4860:4860::8888]:1053']
dns.lookup(hostname[, options], callback)
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Опция verbatim теперь устарела в пользу новой опции order . |
v18.4.0 | Для совместимости с node:net , при передаче объекта опций опция family может быть строкой 'IPv4' или строкой 'IPv6' . |
v18.0.0 | Передача недействительного обратного вызова аргументу callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v17.0.0 | Параметр verbatim теперь по умолчанию имеет значение true . |
v8.5.0 | Теперь поддерживается параметр verbatim . |
v1.2.0 | Теперь поддерживается параметр all . |
v0.1.90 | Добавлено в версии: v0.1.90 |
hostname
<string>family
<integer> | <string> Семейство записей. Должно быть4
,6
или0
. По причинам обратной совместимости'IPv4'
и'IPv6'
интерпретируются как4
и6
соответственно. Значение0
указывает, что возвращается либо IPv4-, либо IPv6-адрес. Если значение0
используется с{ all: true }
(см. ниже), возвращается либо один из, либо оба IPv4- и IPv6-адреса, в зависимости от DNS-резолвера системы. По умолчанию:0
.hints
<number> Один или несколько поддерживаемых флаговgetaddrinfo
. Несколько флагов можно передать, используя побитовоеOR
их значения.all
<boolean> Еслиtrue
, обратный вызов возвращает все разрешенные адреса в массиве. В противном случае возвращает один адрес. По умолчанию:false
.order
<string> Еслиverbatim
, разрешенные адреса возвращаются неотсортированными. Еслиipv4first
, разрешенные адреса сортируются путем размещения IPv4-адресов перед IPv6-адресами. Еслиipv6first
, разрешенные адреса сортируются путем размещения IPv6-адресов перед IPv4-адресами. По умолчанию:verbatim
(адреса не переупорядочиваются). Значение по умолчанию настраивается с помощьюdns.setDefaultResultOrder()
или--dns-result-order
.verbatim
<boolean> Еслиtrue
, обратный вызов получает IPv4- и IPv6-адреса в том порядке, в котором их вернул DNS-резолвер. Еслиfalse
, IPv4-адреса помещаются перед IPv6-адресами. Эта опция будет устаревшей в пользуorder
. Если указаны оба параметра,order
имеет более высокий приоритет. Новый код должен использовать толькоorder
. По умолчанию:true
(адреса не переупорядочиваются). Значение по умолчанию настраивается с помощьюdns.setDefaultResultOrder()
или--dns-result-order
.
callback
<Function>
Разрешает имя хоста (например, 'nodejs.org'
) в первую найденную запись A (IPv4) или AAAA (IPv6). Все свойства option
являются необязательными. Если options
является целым числом, то оно должно быть 4
или 6
– если options
не указано, то возвращаются либо IPv4, либо IPv6-адреса, либо оба, если они найдены.
Если для параметра all
установлено значение true
, аргументы для callback
изменяются на (err, addresses)
, где addresses
является массивом объектов со свойствами address
и family
.
В случае ошибки err
является объектом Error
, где err.code
является кодом ошибки. Имейте в виду, что err.code
будет установлен в 'ENOTFOUND'
не только тогда, когда имя хоста не существует, но и когда поиск не удается другими способами, например, при отсутствии доступных файловых дескрипторов.
dns.lookup()
не обязательно имеет какое-либо отношение к протоколу DNS. Реализация использует средство операционной системы, которое может связывать имена с адресами и наоборот. Эта реализация может иметь тонкие, но важные последствия для поведения любой программы Node.js. Пожалуйста, уделите некоторое время изучению раздела Соображения по реализации перед использованием dns.lookup()
.
Пример использования:
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
// Когда options.all имеет значение true, результатом будет 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
// Когда options.all имеет значение true, результатом будет 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}]
Если этот метод вызывается как его версия, созданная с помощью util.promisify()
, и all
не установлено в значение true
, он возвращает Promise
для Object
со свойствами address
и family
.
Поддерживаемые флаги getaddrinfo
[История]
Версия | Изменения |
---|---|
v13.13.0, v12.17.0 | Добавлена поддержка флага dns.ALL . |
Следующие флаги могут быть переданы в качестве подсказок в dns.lookup()
.
dns.ADDRCONFIG
: Ограничивает типы возвращаемых адресов типами не-loopback адресов, настроенных в системе. Например, IPv4 адреса возвращаются только в том случае, если в текущей системе настроен хотя бы один IPv4 адрес.dns.V4MAPPED
: Если было указано семейство IPv6, но адреса IPv6 не были найдены, то возвращаются IPv4-отображенные IPv6 адреса. Не поддерживается в некоторых операционных системах (например, FreeBSD 10.1).dns.ALL
: Если указанdns.V4MAPPED
, возвращает как разрешенные адреса IPv6, так и IPv4-отображенные адреса IPv6.
dns.lookupService(address, port, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.11.14 | Добавлено в: v0.11.14 |
address
<string>port
<number>callback
<Function>
Преобразует заданные address
и port
в имя хоста и службу, используя базовую реализацию getnameinfo
операционной системы.
Если address
не является действительным IP-адресом, будет выброшено исключение TypeError
. port
будет приведен к числу. Если это не допустимый порт, будет выброшено исключение TypeError
.
В случае ошибки, err
- это объект Error
, где err.code
является кодом ошибки.
import dns from 'node:dns'
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service)
// Выводит: localhost ssh
})
const dns = require('node:dns')
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service)
// Выводит: localhost ssh
})
Если этот метод вызывается как его util.promisify()
версия, он возвращает Promise
для Object
со свойствами hostname
и service
.
dns.resolve(hostname[, rrtype], callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.27 | Добавлено в: v0.1.27 |
hostname
<string> Имя хоста для разрешения.rrtype
<string> Тип ресурсной записи. По умолчанию:'A'
.callback
<Function>err
<Error>records
<string[]> | <Object[]> | <Object>
Использует протокол DNS для разрешения имени хоста (например, 'nodejs.org'
) в массив ресурсных записей. Функция callback
имеет аргументы (err, records)
. При успехе records
будет массивом ресурсных записей. Тип и структура отдельных результатов зависят от rrtype
:
rrtype | records содержит | Тип результата | Сокращенный метод |
---|---|---|---|
'A' | IPv4-адреса (по умолчанию) | <string> | dns.resolve4() |
'AAAA' | IPv6-адреса | <string> | dns.resolve6() |
'ANY' | любые записи | <Object> | dns.resolveAny() |
'CAA' | записи авторизации ЦС | <Object> | dns.resolveCaa() |
'CNAME' | записи канонических имен | <string> | dns.resolveCname() |
'MX' | записи почтового обмена | <Object> | dns.resolveMx() |
'NAPTR' | записи указателя полномочий имени | <Object> | dns.resolveNaptr() |
'NS' | записи сервера имен | <string> | dns.resolveNs() |
'PTR' | записи указателя | <string> | dns.resolvePtr() |
'SOA' | записи начала зоны полномочий | <Object> | dns.resolveSoa() |
'SRV' | записи служб | <Object> | dns.resolveSrv() |
'TXT' | текстовые записи | <string[]> | dns.resolveTxt() |
В случае ошибки err
является объектом Error
, где err.code
является одним из кодов ошибок DNS.
dns.resolve4(hostname[, options], callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недопустимого обратного вызова в аргумент callback теперь выдает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v7.2.0 | Этот метод теперь поддерживает передачу options , в частности options.ttl . |
v0.1.16 | Добавлено в: v0.1.16 |
hostname
<string> Имя хоста для разрешения.options
<Object>ttl
<boolean> Извлекает значение Time-To-Live (TTL) каждой записи. Еслиtrue
, обратный вызов получает массив объектов{ address: '1.2.3.4', ttl: 60 }
, а не массив строк, с TTL, выраженным в секундах.
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
Использует протокол DNS для разрешения IPv4-адресов (записи A
) для hostname
. Аргумент addresses
, передаваемый в функцию callback
, будет содержать массив IPv4-адресов (например, ['74.125.79.104', '74.125.79.105', '74.125.79.106']
).
dns.resolve6(hostname[, options], callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недопустимого обратного вызова в аргумент callback теперь выдает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v7.2.0 | Этот метод теперь поддерживает передачу options , в частности options.ttl . |
v0.1.16 | Добавлено в: v0.1.16 |
hostname
<string> Имя хоста для разрешения.options
<Object>ttl
<boolean> Извлекает значение Time-To-Live (TTL) каждой записи. Еслиtrue
, обратный вызов получает массив объектов{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
, а не массив строк, с TTL, выраженным в секундах.
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
Использует протокол DNS для разрешения IPv6-адресов (записи AAAA
) для hostname
. Аргумент addresses
, передаваемый в функцию callback
, будет содержать массив IPv6-адресов.
dns.resolveAny(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недопустимого обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
hostname
<string>callback
<Function>err
<Error>ret
<Object[]>
Использует протокол DNS для разрешения всех записей (также известных как запрос ANY
или *
). Аргумент ret
, переданный функции callback
, будет массивом, содержащим различные типы записей. Каждый объект имеет свойство type
, которое указывает тип текущей записи. И в зависимости от type
в объекте будут присутствовать дополнительные свойства:
Тип | Свойства |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | См. dns.resolveMx() |
'NAPTR' | См. dns.resolveNaptr() |
'NS' | value |
'PTR' | value |
'SOA' | См. dns.resolveSoa() |
'SRV' | См. dns.resolveSrv() |
'TXT' | Этот тип записи содержит свойство массива под названием entries , которое ссылается на dns.resolveTxt() , например, { entries: ['...'], type: 'TXT' } |
Вот пример объекта ret
, переданного обратному вызову:
;[
{ 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-серверов могут не отвечать на запросы ANY
. Может быть лучше вызывать отдельные методы, такие как dns.resolve4()
, dns.resolveMx()
и так далее. Подробнее см. RFC 8482.
dns.resolveCname(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.3.2 | Добавлено в: v0.3.2 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Использует протокол DNS для разрешения записей CNAME
для hostname
. Аргумент addresses
, переданный в функцию callback
, будет содержать массив записей канонических имен, доступных для hostname
(например, ['bar.example.com']
).
dns.resolveCaa(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v15.0.0, v14.17.0 | Добавлено в: v15.0.0, v14.17.0 |
hostname
<string>callback
<Function>err
<Error>records
<Object[]>
Использует протокол DNS для разрешения записей CAA
для hostname
. Аргумент addresses
, переданный в функцию callback
, будет содержать массив записей авторизации центра сертификации, доступных для hostname
(например, [{critical: 0, iodef: 'mailto:[email protected]'}, {critical: 128, issue: 'pki.example.com'}]
).
dns.resolveMx(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.27 | Добавлено в: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Использует протокол DNS для разрешения записей обмена почтой (MX
записей) для hostname
. Аргумент addresses
, переданный в функцию callback
, будет содержать массив объектов, содержащих как свойство priority
, так и exchange
(например, [{priority: 10, exchange: 'mx.example.com'}, ...]
).
dns.resolveNaptr(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.9.12 | Добавлено в: v0.9.12 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Использует протокол DNS для разрешения записей на основе регулярных выражений (NAPTR
записей) для hostname
. Аргумент addresses
, переданный в функцию callback
, будет содержать массив объектов со следующими свойствами:
flags
service
regexp
replacement
order
preference
{
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100
}
dns.resolveNs(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача неверного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.90 | Добавлено в: v0.1.90 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Использует протокол DNS для разрешения записей сервера имен (записей NS
) для hostname
. Аргумент addresses
, передаваемый в функцию callback
, будет содержать массив записей сервера имен, доступных для hostname
(например, ['ns1.example.com', 'ns2.example.com']
).
dns.resolvePtr(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача неверного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v6.0.0 | Добавлено в: v6.0.0 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Использует протокол DNS для разрешения указательных записей (записей PTR
) для hostname
. Аргумент addresses
, передаваемый в функцию callback
, будет массивом строк, содержащих записи ответа.
dns.resolveSoa(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача неверного обратного вызова в аргумент callback теперь вызывает ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.11.10 | Добавлено в: v0.11.10 |
hostname
<string>callback
<Function>
Использует протокол DNS для разрешения записи начала зоны полномочий (записи SOA
) для hostname
. Аргумент address
, передаваемый в функцию callback
, будет объектом со следующими свойствами:
nsname
hostmaster
serial
refresh
retry
expire
minttl
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dns.resolveSrv(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова аргументу callback теперь вызывает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.27 | Добавлено в: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Использует протокол DNS для разрешения сервисных записей (записей SRV
) для hostname
. Аргумент addresses
, передаваемый в функцию callback
, будет массивом объектов со следующими свойствами:
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dns.resolveTxt(hostname, callback)
[История]
Версия | Изменения |
---|---|
v18.0.0 | Передача недействительного обратного вызова аргументу callback теперь вызывает ошибку ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK . |
v0.1.27 | Добавлено в: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>records
<string[][]>
Использует протокол DNS для разрешения текстовых запросов (записей TXT
) для hostname
. Аргумент records
, передаваемый в функцию callback
, представляет собой двумерный массив текстовых записей, доступных для hostname
(например, [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
). Каждый подмассив содержит фрагменты TXT одной записи. В зависимости от варианта использования их можно либо объединить вместе, либо рассматривать отдельно.
dns.reverse(ip, callback)
Добавлено в: v0.1.16
ip
<string>callback
<Function>err
<Error>hostnames
<string[]>
Выполняет обратный DNS-запрос, который преобразует IPv4 или IPv6-адрес в массив имен хостов.
В случае ошибки, err
является объектом Error
, где err.code
является одним из кодов ошибок DNS.
dns.setDefaultResultOrder(order)
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Теперь поддерживается значение ipv6first . |
v17.0.0 | Изменено значение по умолчанию на verbatim . |
v16.4.0, v14.18.0 | Добавлено в: v16.4.0, v14.18.0 |
order
<string> должен быть'ipv4first'
,'ipv6first'
или'verbatim'
.
Устанавливает значение по умолчанию для order
в dns.lookup()
и dnsPromises.lookup()
. Значение может быть:
ipv4first
: устанавливаетorder
по умолчанию вipv4first
.ipv6first
: устанавливаетorder
по умолчанию вipv6first
.verbatim
: устанавливаетorder
по умолчанию вverbatim
.
Значение по умолчанию - verbatim
, и dns.setDefaultResultOrder()
имеет более высокий приоритет, чем --dns-result-order
. При использовании рабочих потоков, dns.setDefaultResultOrder()
из основного потока не повлияет на порядок dns по умолчанию в рабочих потоках.
dns.getDefaultResultOrder()
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Теперь поддерживается значение ipv6first . |
v20.1.0, v18.17.0 | Добавлено в: v20.1.0, v18.17.0 |
Получает значение по умолчанию для order
в dns.lookup()
и dnsPromises.lookup()
. Значение может быть:
ipv4first
: дляorder
, по умолчанию используетсяipv4first
.ipv6first
: дляorder
, по умолчанию используетсяipv6first
.verbatim
: дляorder
, по умолчанию используетсяverbatim
.
dns.setServers(servers)
Добавлено в: v0.11.3
servers
<string[]> массив адресов в формате RFC 5952
Устанавливает IP-адрес и порт серверов, которые будут использоваться при выполнении разрешения DNS. Аргумент servers
представляет собой массив адресов в формате RFC 5952. Если порт является портом DNS по умолчанию IANA (53), его можно опустить.
dns.setServers(['8.8.8.8', '[2001:4860:4860::8888]', '8.8.8.8:1053', '[2001:4860:4860::8888]:1053'])
Если предоставлен недопустимый адрес, будет выдана ошибка.
Метод dns.setServers()
нельзя вызывать во время выполнения запроса DNS.
Метод dns.setServers()
влияет только на dns.resolve()
, dns.resolve*()
и dns.reverse()
(и не на dns.lookup()
).
Этот метод работает аналогично resolve.conf. То есть, если попытка разрешения с использованием первого предоставленного сервера приводит к ошибке NOTFOUND
, метод resolve()
не будет пытаться выполнить разрешение с использованием последующих предоставленных серверов. Запасные DNS-серверы будут использоваться только в том случае, если предыдущие серверы тайм-аутируют или приводят к какой-либо другой ошибке.
API промисов DNS
[История]
Версия | Изменения |
---|---|
v15.0.0 | Предоставлен как require('dns/promises') . |
v11.14.0, v10.17.0 | Этот API больше не является экспериментальным. |
v10.6.0 | Добавлено в: v10.6.0 |
API dns.promises
предоставляет альтернативный набор асинхронных методов DNS, которые возвращают объекты Promise
вместо использования обратных вызовов. API доступен через require('node:dns').promises
или require('node:dns/promises')
.
Класс: dnsPromises.Resolver
Добавлено в: v10.6.0
Независимый преобразователь для DNS-запросов.
Создание нового преобразователя использует настройки сервера по умолчанию. Установка серверов, используемых для преобразователя, с помощью resolver.setServers()
не влияет на другие преобразователи:
import { Resolver } from 'node:dns/promises'
const resolver = new Resolver()
resolver.setServers(['4.4.4.4'])
// Этот запрос будет использовать сервер на 4.4.4.4, независимо от глобальных настроек.
const addresses = await resolver.resolve4('example.org')
const { Resolver } = require('node:dns').promises
const resolver = new Resolver()
resolver.setServers(['4.4.4.4'])
// Этот запрос будет использовать сервер на 4.4.4.4, независимо от глобальных настроек.
resolver.resolve4('example.org').then(addresses => {
// ...
})
// Альтернативно, тот же код можно записать в стиле async-await.
;(async function () {
const addresses = await resolver.resolve4('example.org')
})()
Доступны следующие методы из API dnsPromises
:
resolver.getServers()
resolver.resolve()
resolver.resolve4()
resolver.resolve6()
resolver.resolveAny()
resolver.resolveCaa()
resolver.resolveCname()
resolver.resolveMx()
resolver.resolveNaptr()
resolver.resolveNs()
resolver.resolvePtr()
resolver.resolveSoa()
resolver.resolveSrv()
resolver.resolveTxt()
resolver.reverse()
resolver.setServers()
resolver.cancel()
Добавлено в: v15.3.0, v14.17.0
Отменяет все ожидающие DNS-запросы, сделанные этим резолвером. Соответствующие промисы будут отклонены с ошибкой с кодом ECANCELLED
.
dnsPromises.getServers()
Добавлено в: v10.6.0
- Возвращает: <string[]>
Возвращает массив строк IP-адресов, отформатированных в соответствии с RFC 5952, которые в настоящее время настроены для разрешения DNS. Строка будет включать раздел порта, если используется пользовательский порт.
;['8.8.8.8', '2001:4860:4860::8888', '8.8.8.8:1053', '[2001:4860:4860::8888]:1053']
dnsPromises.lookup(hostname[, options])
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Параметр verbatim теперь устарел в пользу нового параметра order . |
v10.6.0 | Добавлено в: v10.6.0 |
hostname
<string>options
<integer> | <Object>family
<integer> Семейство записей. Должно быть4
,6
или0
. Значение0
указывает, что возвращается либо адрес IPv4, либо IPv6. Если значение0
используется с{ all: true }
(см. ниже), возвращается либо один, либо оба адреса IPv4 и IPv6, в зависимости от DNS-резолвера системы. По умолчанию:0
.hints
<number> Один или несколько поддерживаемых флаговgetaddrinfo
. Несколько флагов можно передать, выполнив побитовоеOR
их значений.all
<boolean> Еслиtrue
,Promise
разрешается со всеми адресами в массиве. В противном случае возвращается один адрес. По умолчанию:false
.order
<string> Еслиverbatim
,Promise
разрешается с адресами IPv4 и IPv6 в том порядке, в котором их вернул DNS-резолвер. Еслиipv4first
, адреса IPv4 помещаются перед адресами IPv6. Еслиipv6first
, адреса IPv6 помещаются перед адресами IPv4. По умолчанию:verbatim
(адреса не переупорядочиваются). Значение по умолчанию можно настроить с помощьюdns.setDefaultResultOrder()
или--dns-result-order
. В новом коде следует использовать{ order: 'verbatim' }
.verbatim
<boolean> Еслиtrue
,Promise
разрешается с адресами IPv4 и IPv6 в том порядке, в котором их вернул DNS-резолвер. Еслиfalse
, адреса IPv4 помещаются перед адресами IPv6. Этот параметр будет объявлен устаревшим в пользуorder
. Если указаны оба,order
имеет более высокий приоритет. В новом коде следует использовать толькоorder
. По умолчанию: в настоящее времяfalse
(адреса переупорядочиваются), но ожидается, что это изменится в недалеком будущем. Значение по умолчанию можно настроить с помощьюdns.setDefaultResultOrder()
или--dns-result-order
.
Разрешает имя хоста (например, 'nodejs.org'
) в первую найденную запись A (IPv4) или AAAA (IPv6). Все свойства option
являются необязательными. Если options
является целым числом, то оно должно быть 4
или 6
- если options
не указано, то возвращаются либо адреса IPv4, либо IPv6, либо оба, если они найдены.
Если для параметра all
установлено значение true
, Promise
разрешается, при этом addresses
будет массивом объектов со свойствами address
и family
.
При ошибке Promise
отклоняется с объектом Error
, где err.code
- это код ошибки. Имейте в виду, что err.code
будет установлен в 'ENOTFOUND'
не только тогда, когда имя хоста не существует, но и когда поиск завершается неудачей другими способами, например, из-за отсутствия доступных файловых дескрипторов.
dnsPromises.lookup()
не обязательно имеет какое-либо отношение к протоколу DNS. В реализации используется механизм операционной системы, который может связывать имена с адресами и наоборот. Эта реализация может иметь тонкие, но важные последствия для поведения любой программы Node.js. Пожалуйста, потратьте некоторое время на ознакомление с разделом Рекомендации по реализации перед использованием dnsPromises.lookup()
.
Пример использования:
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
})
// Когда options.all истинно, результатом будет массив.
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
})
// Когда options.all истинно, результатом будет массив.
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)
Добавлено в: v10.6.0
Разрешает заданный address
и port
в имя хоста и сервис, используя базовую реализацию getnameinfo
операционной системы.
Если address
не является допустимым IP-адресом, будет выдана ошибка TypeError
. port
будет преобразован в число. Если он не является допустимым портом, будет выдана ошибка TypeError
.
В случае ошибки Promise
отклоняется с объектом Error
, где err.code
является кодом ошибки.
import dnsPromises from 'node:dns/promises'
const result = await dnsPromises.lookupService('127.0.0.1', 22)
console.log(result.hostname, result.service) // Выводит: localhost ssh
const dnsPromises = require('node:dns').promises
dnsPromises.lookupService('127.0.0.1', 22).then(result => {
console.log(result.hostname, result.service)
// Выводит: localhost ssh
})
dnsPromises.resolve(hostname[, rrtype])
Добавлено в: v10.6.0
Использует протокол DNS для разрешения имени хоста (например, 'nodejs.org'
) в массив ресурсных записей. При успехе Promise
разрешается с массивом ресурсных записей. Тип и структура отдельных результатов зависят от rrtype
:
rrtype | records содержит | Тип результата | Сокращенный метод |
---|---|---|---|
'A' | IPv4-адреса (по умолчанию) | <string> | dnsPromises.resolve4() |
'AAAA' | IPv6-адреса | <string> | dnsPromises.resolve6() |
'ANY' | любые записи | <Object> | dnsPromises.resolveAny() |
'CAA' | записи авторизации CA | <Object> | dnsPromises.resolveCaa() |
'CNAME' | записи канонических имен | <string> | dnsPromises.resolveCname() |
'MX' | записи почтового обмена | <Object> | dnsPromises.resolveMx() |
'NAPTR' | записи указателя полномочий имени | <Object> | dnsPromises.resolveNaptr() |
'NS' | записи сервера имен | <string> | dnsPromises.resolveNs() |
'PTR' | указательные записи | <string> | dnsPromises.resolvePtr() |
'SOA' | записи начала зоны полномочий | <Object> | dnsPromises.resolveSoa() |
'SRV' | записи служб | <Object> | dnsPromises.resolveSrv() |
'TXT' | текстовые записи | <string[]> | dnsPromises.resolveTxt() |
В случае ошибки Promise
отклоняется с объектом Error
, где err.code
является одним из кодов ошибок DNS.
dnsPromises.resolve4(hostname[, options])
Добавлено в: v10.6.0
hostname
<string> Имя хоста для разрешения.options
<Object>ttl
<boolean> Получить значение Time-To-Live (TTL) для каждой записи. Еслиtrue
,Promise
разрешается массивом объектов{ address: '1.2.3.4', ttl: 60 }
, а не массивом строк, при этом TTL выражается в секундах.
Использует протокол DNS для разрешения IPv4-адресов (записи A
) для hostname
. При успехе Promise
разрешается массивом IPv4-адресов (например, ['74.125.79.104', '74.125.79.105', '74.125.79.106']
).
dnsPromises.resolve6(hostname[, options])
Добавлено в: v10.6.0
hostname
<string> Имя хоста для разрешения.options
<Object>ttl
<boolean> Получить значение Time-To-Live (TTL) для каждой записи. Еслиtrue
,Promise
разрешается массивом объектов{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
, а не массивом строк, при этом TTL выражается в секундах.
Использует протокол DNS для разрешения IPv6-адресов (записи AAAA
) для hostname
. При успехе Promise
разрешается массивом IPv6-адресов.
dnsPromises.resolveAny(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения всех записей (также известных как запрос ANY
или *
). При успехе Promise
разрешается массивом, содержащим различные типы записей. Каждый объект имеет свойство type
, которое указывает тип текущей записи. И в зависимости от type
, в объекте будут присутствовать дополнительные свойства:
Тип | Свойства |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | См. dnsPromises.resolveMx() |
'NAPTR' | См. dnsPromises.resolveNaptr() |
'NS' | value |
'PTR' | value |
'SOA' | См. dnsPromises.resolveSoa() |
'SRV' | См. dnsPromises.resolveSrv() |
'TXT' | Этот тип записи содержит свойство массива entries , которое ссылается на dnsPromises.resolveTxt() , например, { entries: ['...'], type: 'TXT' } |
Вот пример результирующего объекта:
;[
{ 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,
},
]
dnsPromises.resolveCaa(hostname)
Добавлено в: v15.0.0, v14.17.0
hostname
<string>
Использует протокол DNS для разрешения CAA
записей для hostname
. При успехе Promise
разрешается массивом объектов, содержащих доступные записи авторизации центра сертификации для hostname
(например, [{critical: 0, iodef: 'mailto:[email protected]'},{critical: 128, issue: 'pki.example.com'}]
).
dnsPromises.resolveCname(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения CNAME
записей для hostname
. При успехе Promise
разрешается массивом записей канонических имен, доступных для hostname
(например, ['bar.example.com']
).
dnsPromises.resolveMx(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записей обмена почтой (MX
записей) для hostname
. При успехе Promise
разрешается массивом объектов, содержащих свойство priority
и exchange
(например, [{priority: 10, exchange: 'mx.example.com'}, ...]
).
dnsPromises.resolveNaptr(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записей на основе регулярных выражений (NAPTR
записей) для hostname
. При успехе Promise
разрешается массивом объектов со следующими свойствами:
flags
service
regexp
replacement
order
preference
{
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100
}
dnsPromises.resolveNs(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записей сервера имен (NS
записей) для hostname
. При успехе Promise
разрешается массивом записей сервера имен, доступных для hostname
(например, ['ns1.example.com', 'ns2.example.com']
).
dnsPromises.resolvePtr(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записей указателей (PTR
-записей) для hostname
. В случае успеха Promise
разрешается массивом строк, содержащих записи ответа.
dnsPromises.resolveSoa(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записи начала зоны ответственности (SOA
-записи) для hostname
. В случае успеха Promise
разрешается объектом со следующими свойствами:
nsname
hostmaster
serial
refresh
retry
expire
minttl
{
nsname: 'ns.example.com',
hostmaster: 'root.example.com',
serial: 2013101809,
refresh: 10000,
retry: 2400,
expire: 604800,
minttl: 3600
}
dnsPromises.resolveSrv(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения сервисных записей (SRV
-записей) для hostname
. В случае успеха Promise
разрешается массивом объектов со следующими свойствами:
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dnsPromises.resolveTxt(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения текстовых запросов (TXT
-записей) для hostname
. В случае успеха Promise
разрешается двумерным массивом текстовых записей, доступных для hostname
(например, [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
). Каждый подмассив содержит фрагменты TXT одной записи. В зависимости от варианта использования их можно либо объединить, либо обрабатывать отдельно.
dnsPromises.reverse(ip)
Добавлено в версии: v10.6.0
ip
<string>
Выполняет обратный DNS-запрос, который преобразует IPv4 или IPv6 адрес в массив имен хостов.
В случае ошибки, Promise
отклоняется с объектом Error
, где err.code
является одним из кодов ошибок DNS.
dnsPromises.setDefaultResultOrder(order)
[История]
Версия | Изменения |
---|---|
v22.1.0, v20.13.0 | Теперь поддерживается значение ipv6first . |
v17.0.0 | Значение по умолчанию изменено на verbatim . |
v16.4.0, v14.18.0 | Добавлено в: v16.4.0, v14.18.0 |
order
<string> должен быть'ipv4first'
,'ipv6first'
или'verbatim'
.
Устанавливает значение по умолчанию для order
в dns.lookup()
и dnsPromises.lookup()
. Значение может быть:
ipv4first
: устанавливает значениеorder
по умолчанию вipv4first
.ipv6first
: устанавливает значениеorder
по умолчанию вipv6first
.verbatim
: устанавливает значениеorder
по умолчанию вverbatim
.
Значение по умолчанию — verbatim
, и dnsPromises.setDefaultResultOrder()
имеет более высокий приоритет, чем --dns-result-order
. При использовании рабочих потоков, dnsPromises.setDefaultResultOrder()
из основного потока не повлияет на порядок DNS по умолчанию в рабочих потоках.
dnsPromises.getDefaultResultOrder()
Добавлено в версии: v20.1.0, v18.17.0
Получает значение dnsOrder
.
dnsPromises.setServers(servers)
Добавлено в версии: v10.6.0
servers
<string[]> массив адресов в формате RFC 5952
Устанавливает IP-адрес и порт серверов, которые будут использоваться при выполнении DNS-разрешения. Аргумент servers
является массивом адресов в формате RFC 5952. Если порт является портом DNS по умолчанию IANA (53), его можно опустить.
dnsPromises.setServers(['8.8.8.8', '[2001:4860:4860::8888]', '8.8.8.8:1053', '[2001:4860:4860::8888]:1053'])
Ошибка будет выброшена, если указан неверный адрес.
Метод dnsPromises.setServers()
не должен вызываться во время выполнения DNS-запроса.
Этот метод работает аналогично resolve.conf. То есть, если попытка разрешения с первым предоставленным сервером приводит к ошибке NOTFOUND
, метод resolve()
не будет пытаться выполнить разрешение со следующими предоставленными серверами. Резервные DNS-серверы будут использоваться только в том случае, если у предыдущих истечет время ожидания или возникнет какая-либо другая ошибка.
Коды ошибок
Каждый DNS-запрос может вернуть один из следующих кодов ошибок:
dns.NODATA
: DNS-сервер вернул ответ без данных.dns.FORMERR
: DNS-сервер утверждает, что запрос был неправильно сформирован.dns.SERVFAIL
: DNS-сервер вернул общую ошибку.dns.NOTFOUND
: Доменное имя не найдено.dns.NOTIMP
: DNS-сервер не реализует запрошенную операцию.dns.REFUSED
: DNS-сервер отклонил запрос.dns.BADQUERY
: Неправильно сформированный DNS-запрос.dns.BADNAME
: Неправильно сформированное имя хоста.dns.BADFAMILY
: Неподдерживаемое семейство адресов.dns.BADRESP
: Неправильно сформированный DNS-ответ.dns.CONNREFUSED
: Не удалось связаться с DNS-серверами.dns.TIMEOUT
: Истекло время ожидания при связи с DNS-серверами.dns.EOF
: Конец файла.dns.FILE
: Ошибка чтения файла.dns.NOMEM
: Недостаточно памяти.dns.DESTRUCTION
: Канал уничтожается.dns.BADSTR
: Неправильно сформированная строка.dns.BADFLAGS
: Указаны недопустимые флаги.dns.NONAME
: Заданное имя хоста не является числовым.dns.BADHINTS
: Указаны недопустимые флаги подсказок.dns.NOTINITIALIZED
: Инициализация библиотеки c-ares еще не выполнена.dns.LOADIPHLPAPI
: Ошибка загрузкиiphlpapi.dll
.dns.ADDRGETNETWORKPARAMS
: Не удалось найти функциюGetNetworkParams
.dns.CANCELLED
: DNS-запрос отменен.
API dnsPromises
также экспортирует вышеуказанные коды ошибок, например, dnsPromises.NODATA
.
Соображения по реализации
Хотя dns.lookup()
и различные функции dns.resolve*()/dns.reverse()
имеют одну и ту же цель – связать сетевое имя с сетевым адресом (или наоборот), их поведение довольно сильно отличается. Эти различия могут иметь тонкие, но существенные последствия для поведения программ Node.js.
dns.lookup()
Под капотом dns.lookup()
использует те же средства операционной системы, что и большинство других программ. Например, dns.lookup()
почти всегда разрешит данное имя так же, как команда ping
. В большинстве POSIX-подобных операционных систем поведение функции dns.lookup()
можно изменить, изменив настройки в nsswitch.conf(5)
и/или resolv.conf(5)
, но изменение этих файлов изменит поведение всех других программ, работающих в той же операционной системе.
Хотя вызов dns.lookup()
будет асинхронным с точки зрения JavaScript, он реализован как синхронный вызов getaddrinfo(3)
, который выполняется в пуле потоков libuv. Это может иметь неожиданные негативные последствия для производительности некоторых приложений, см. документацию UV_THREADPOOL_SIZE
для получения дополнительной информации.
Различные сетевые API будут вызывать dns.lookup()
внутри для разрешения имен хостов. Если это является проблемой, рассмотрите возможность разрешения имени хоста в адрес с помощью dns.resolve()
и использования адреса вместо имени хоста. Кроме того, некоторые сетевые API (такие как socket.connect()
и dgram.createSocket()
) позволяют заменить используемый по умолчанию резолвер, dns.lookup()
.
dns.resolve()
, dns.resolve*()
, и dns.reverse()
Эти функции реализованы совершенно иначе, чем dns.lookup()
. Они не используют getaddrinfo(3)
и всегда выполняют DNS-запрос по сети. Эта сетевая коммуникация всегда выполняется асинхронно и не использует пул потоков libuv.
В результате, эти функции не могут оказывать такого же негативного воздействия на другую обработку, происходящую в пуле потоков libuv, как это может делать dns.lookup()
.
Они не используют тот же набор конфигурационных файлов, что и dns.lookup()
. Например, они не используют конфигурацию из /etc/hosts
.