DNS
[Стабильно: 2 - Стабильно]
Стабильно: 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
// 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}]
Если этот метод вызывается как его util.promisify()
ed версия, и 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);
// 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
});
Если этот метод вызывается как его util.promisify()
ed версия, он возвращает 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
records) для 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
records) для 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
records) для 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
records) для hostname
. Аргумент records
, передаваемый функции callback
, представляет собой двумерный массив текстовых записей, доступных для hostname
(например, [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
). Каждый подмассив содержит TXT-фрагменты одной записи. В зависимости от варианта использования, их можно либо объединить вместе, либо рассматривать отдельно.
dns.reverse(ip, callback)
Added in: 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-серверы будут использоваться только в том случае, если у предыдущих серверов истечет время ожидания или возникнет какая-либо другая ошибка.
DNS promises API
[История]
Версия | Изменения |
---|---|
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
});
// 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)
Добавлено в: 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' | записи авторизации ЦС | <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
records) для hostname
. При успехе Promise
разрешается массивом строк, содержащих записи ответа.
dnsPromises.resolveSoa(hostname)
Добавлено в: v10.6.0
hostname
<string>
Использует протокол DNS для разрешения записи начала зоны (SOA
record) для 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
records) для 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
records) для 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
.