DNS
[Stable: 2 - Stable]
Stable: 2 Stability: 2 - Estável
Código-fonte: lib/dns.js
O módulo node:dns
permite a resolução de nomes. Por exemplo, use-o para procurar endereços IP de nomes de host.
Embora nomeado para o Sistema de Nomes de Domínio (DNS), nem sempre usa o protocolo DNS para pesquisas. dns.lookup()
usa os recursos do sistema operacional para realizar a resolução de nomes. Pode não ser necessário realizar nenhuma comunicação de rede. Para realizar a resolução de nomes da mesma forma que outros aplicativos no mesmo sistema, use dns.lookup()
.
import dns from 'node:dns';
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
const dns = require('node:dns');
dns.lookup('example.org', (err, address, family) => {
console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
Todas as outras funções no módulo node:dns
se conectam a um servidor DNS real para realizar a resolução de nomes. Eles sempre usarão a rede para realizar consultas DNS. Essas funções não usam o mesmo conjunto de arquivos de configuração usado por dns.lookup()
(por exemplo, /etc/hosts
). Use essas funções para sempre realizar consultas DNS, ignorando outros recursos de resolução de nomes.
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)}`);
});
});
});
Consulte a seção Considerações de implementação para obter mais informações.
Classe: dns.Resolver
Adicionado em: v8.3.0
Um resolvedor independente para solicitações de DNS.
Criar um novo resolvedor usa as configurações de servidor padrão. Definir os servidores usados para um resolvedor usando resolver.setServers()
não afeta outros resolvedores:
import { Resolver } from 'node:dns';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// Esta solicitação usará o servidor em 4.4.4.4, independente das configurações globais.
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
const { Resolver } = require('node:dns');
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// Esta solicitação usará o servidor em 4.4.4.4, independente das configurações globais.
resolver.resolve4('example.org', (err, addresses) => {
// ...
});
Os seguintes métodos do módulo node:dns
estão disponíveis:
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])
[Histórico]
Versão | Mudanças |
---|---|
v16.7.0, v14.18.0 | O objeto options agora aceita uma opção tries . |
v12.18.3 | O construtor agora aceita um objeto options . A única opção suportada é timeout . |
v8.3.0 | Adicionado em: v8.3.0 |
Cria um novo resolvedor.
options
<Objeto>
resolver.cancel()
Adicionado em: v8.3.0
Cancela todas as consultas DNS pendentes feitas por este resolvedor. Os retornos de chamada correspondentes serão chamados com um erro com o código ECANCELLED
.
resolver.setLocalAddress([ipv4][, ipv6])
Adicionado em: v15.1.0, v14.17.0
ipv4
<string> Uma representação de string de um endereço IPv4. Padrão:'0.0.0.0'
ipv6
<string> Uma representação de string de um endereço IPv6. Padrão:'::0'
A instância do resolvedor enviará suas solicitações do endereço IP especificado. Isso permite que os programas especifiquem interfaces de saída quando usados em sistemas multi-homed.
Se um endereço v4 ou v6 não for especificado, ele será definido como o padrão e o sistema operacional escolherá um endereço local automaticamente.
O resolvedor usará o endereço local v4 ao fazer solicitações para servidores DNS IPv4 e o endereço local v6 ao fazer solicitações para servidores DNS IPv6. O rrtype
das solicitações de resolução não tem impacto no endereço local usado.
dns.getServers()
Adicionado em: v0.11.3
- Retorna: <string[]>
Retorna uma matriz de strings de endereço IP, formatadas de acordo com RFC 5952, que estão atualmente configuradas para resolução de DNS. Uma string incluirá uma seção de porta se uma porta personalizada for usada.
[
'8.8.8.8',
'2001:4860:4860::8888',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]
dns.lookup(hostname[, options], callback)
[Histórico]
Versão | Mudanças |
---|---|
v22.1.0, v20.13.0 | A opção verbatim agora está obsoleta em favor da nova opção order . |
v18.4.0 | Para compatibilidade com node:net , ao passar um objeto de opção, a opção family pode ser a string 'IPv4' ou a string 'IPv6' . |
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v17.0.0 | As opções verbatim agora são padronizadas como true . |
v8.5.0 | A opção verbatim agora é suportada. |
v1.2.0 | A opção all agora é suportada. |
v0.1.90 | Adicionado em: v0.1.90 |
hostname
<string>family
<integer> | <string> A família de registros. Deve ser4
,6
ou0
. Por razões de compatibilidade com versões anteriores,'IPv4'
e'IPv6'
são interpretados como4
e6
, respectivamente. O valor0
indica que um endereço IPv4 ou IPv6 é retornado. Se o valor0
for usado com{ all: true }
(veja abaixo), um ou ambos os endereços IPv4 e IPv6 serão retornados, dependendo do resolvedor DNS do sistema. Padrão:0
.hints
<number> Um ou mais flagsgetaddrinfo
suportados. Vários flags podem ser passados porOR
bit a bit de seus valores.all
<boolean> Quandotrue
, o callback retorna todos os endereços resolvidos em um array. Caso contrário, retorna um único endereço. Padrão:false
.order
<string> Quandoverbatim
, os endereços resolvidos são retornados não ordenados. Quandoipv4first
, os endereços resolvidos são classificados colocando os endereços IPv4 antes dos endereços IPv6. Quandoipv6first
, os endereços resolvidos são classificados colocando os endereços IPv6 antes dos endereços IPv4. Padrão:verbatim
(os endereços não são reordenados). O valor padrão é configurável usandodns.setDefaultResultOrder()
ou--dns-result-order
.verbatim
<boolean> Quandotrue
, o callback recebe endereços IPv4 e IPv6 na ordem em que o resolvedor DNS os retornou. Quandofalse
, os endereços IPv4 são colocados antes dos endereços IPv6. Esta opção será preterida em favor deorder
. Quando ambos são especificados,order
tem maior precedência. O novo código deve usar apenasorder
. Padrão:true
(os endereços não são reordenados). O valor padrão é configurável usandodns.setDefaultResultOrder()
ou--dns-result-order
.
callback
<Function>
Resolve um nome de host (por exemplo, 'nodejs.org'
) no primeiro registro A (IPv4) ou AAAA (IPv6) encontrado. Todas as propriedades de option
são opcionais. Se options
for um inteiro, então deve ser 4
ou 6
- se options
não for fornecido, então endereços IPv4 ou IPv6, ou ambos, serão retornados se encontrados.
Com a opção all
definida como true
, os argumentos para callback
mudam para (err, addresses)
, com addresses
sendo um array de objetos com as propriedades address
e family
.
Em caso de erro, err
é um objeto Error
, onde err.code
é o código de erro. Tenha em mente que err.code
será definido como 'ENOTFOUND'
não apenas quando o nome do host não existir, mas também quando a pesquisa falhar de outras maneiras, como nenhum descritor de arquivo disponível.
dns.lookup()
não tem necessariamente nada a ver com o protocolo DNS. A implementação usa uma facilidade do sistema operacional que pode associar nomes a endereços e vice-versa. Esta implementação pode ter consequências sutis, mas importantes no comportamento de qualquer programa Node.js. Por favor, reserve algum tempo para consultar a seção de considerações de implementação antes de usar dns.lookup()
.
Exemplo de uso:
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}]
Se este método for invocado como sua versão util.promisify()
ed, e all
não estiver definido como true
, ele retorna uma Promise
para um Object
com propriedades address
e family
.
Flags getaddrinfo
suportadas
[Histórico]
Versão | Mudanças |
---|---|
v13.13.0, v12.17.0 | Adicionado suporte para o flag dns.ALL . |
Os seguintes flags podem ser passados como dicas para dns.lookup()
.
dns.ADDRCONFIG
: Limita os tipos de endereços retornados aos tipos de endereços não-loopback configurados no sistema. Por exemplo, endereços IPv4 são retornados somente se o sistema atual tiver pelo menos um endereço IPv4 configurado.dns.V4MAPPED
: Se a família IPv6 foi especificada, mas nenhum endereço IPv6 foi encontrado, então retorna endereços IPv4 mapeados para IPv6. Não é suportado em alguns sistemas operacionais (por exemplo, FreeBSD 10.1).dns.ALL
: Sedns.V4MAPPED
for especificado, retorna endereços IPv6 resolvidos assim como endereços IPv4 mapeados para IPv6.
dns.lookupService(address, port, callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.11.14 | Adicionado em: v0.11.14 |
address
<string>port
<number>callback
<Function>
Resolve o address
e port
fornecidos em um nome de host e serviço usando a implementação getnameinfo
subjacente do sistema operacional.
Se address
não for um endereço IP válido, um TypeError
será lançado. A port
será forçada a ser um número. Se não for uma porta legal, um TypeError
será lançado.
Em caso de erro, err
é um objeto Error
, onde err.code
é o código de erro.
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
});
Se este método for invocado como sua versão util.promisify()
ed, ele retorna uma Promise
para um Object
com propriedades hostname
e service
.
dns.resolve(hostname[, rrtype], callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.1.27 | Adicionado em: v0.1.27 |
hostname
<string> Nome do host a ser resolvido.rrtype
<string> Tipo de registro de recurso. Padrão:'A'
.callback
<Function>err
<Error>records
<string[]> | <Object[]> | <Object>
Usa o protocolo DNS para resolver um nome de host (por exemplo, 'nodejs.org'
) em um array de registros de recursos. A função callback
tem argumentos (err, records)
. Quando bem-sucedido, records
será um array de registros de recursos. O tipo e a estrutura dos resultados individuais variam com base em rrtype
:
rrtype | records contém | Tipo de resultado | Método abreviado |
---|---|---|---|
'A' | Endereços IPv4 (padrão) | <string> | dns.resolve4() |
'AAAA' | Endereços IPv6 | <string> | dns.resolve6() |
'ANY' | quaisquer registros | <Object> | dns.resolveAny() |
'CAA' | registros de autorização de CA | <Object> | dns.resolveCaa() |
'CNAME' | registros de nome canônico | <string> | dns.resolveCname() |
'MX' | registros de troca de e-mail | <Object> | dns.resolveMx() |
'NAPTR' | registros de ponteiro de autoridade de nome | <Object> | dns.resolveNaptr() |
'NS' | registros de servidor de nomes | <string> | dns.resolveNs() |
'PTR' | registros de ponteiro | <string> | dns.resolvePtr() |
'SOA' | registros de início de autoridade | <Object> | dns.resolveSoa() |
'SRV' | registros de serviço | <Object> | dns.resolveSrv() |
'TXT' | registros de texto | <string[]> | dns.resolveTxt() |
Em caso de erro, err
é um objeto Error
, onde err.code
é um dos códigos de erro DNS.
dns.resolve4(hostname[, options], callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v7.2.0 | Este método agora suporta passar options , especificamente options.ttl . |
v0.1.16 | Adicionado em: v0.1.16 |
hostname
<string> Nome do host a ser resolvido.options
<Object>ttl
<boolean> Recupera o valor Time-To-Live (TTL) de cada registro. Quandotrue
, o callback recebe um array de objetos{ address: '1.2.3.4', ttl: 60 }
em vez de um array de strings, com o TTL expresso em segundos.
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
Usa o protocolo DNS para resolver endereços IPv4 (registros A
) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de endereços IPv4 (por exemplo, ['74.125.79.104', '74.125.79.105', '74.125.79.106']
).
dns.resolve6(hostname[, options], callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v7.2.0 | Este método agora suporta passar options , especificamente options.ttl . |
v0.1.16 | Adicionado em: v0.1.16 |
hostname
<string> Nome do host a ser resolvido.options
<Object>ttl
<boolean> Recupera o valor Time-To-Live (TTL) de cada registro. Quandotrue
, o callback recebe um array de objetos{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
em vez de um array de strings, com o TTL expresso em segundos.
callback
<Function>err
<Error>addresses
<string[]> | <Object[]>
Usa o protocolo DNS para resolver endereços IPv6 (registros AAAA
) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de endereços IPv6.
dns.resolveAny(hostname, callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
hostname
<string>callback
<Function>err
<Error>ret
<Object[]>
Usa o protocolo DNS para resolver todos os registros (também conhecido como consulta ANY
ou *
). O argumento ret
passado para a função callback
será um array contendo vários tipos de registros. Cada objeto tem uma propriedade type
que indica o tipo do registro atual. E, dependendo do type
, propriedades adicionais estarão presentes no objeto:
Tipo | Propriedades |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | Consulte dns.resolveMx() |
'NAPTR' | Consulte dns.resolveNaptr() |
'NS' | value |
'PTR' | value |
'SOA' | Consulte dns.resolveSoa() |
'SRV' | Consulte dns.resolveSrv() |
'TXT' | Este tipo de registro contém uma propriedade de array chamada entries que se refere a dns.resolveTxt() , por exemplo, { entries: ['...'], type: 'TXT' } |
Aqui está um exemplo do objeto ret passado para o callback: |
[ { type: 'A', address: '127.0.0.1', ttl: 299 },
{ type: 'CNAME', value: 'example.com' },
{ type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
{ type: 'NS', value: 'ns1.example.com' },
{ type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
{ type: 'SOA',
nsname: 'ns1.example.com',
hostmaster: 'admin.example.com',
serial: 156696742,
refresh: 900,
retry: 900,
expire: 1800,
minttl: 60 } ]
Os operadores de servidores DNS podem optar por não responder a consultas ANY
. Pode ser melhor chamar métodos individuais como dns.resolve4()
, dns.resolveMx()
e assim por diante. Para mais detalhes, consulte RFC 8482.
dns.resolveCname(hostname, callback)
[Histórico]
Versão | Alterações |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.3.2 | Adicionado em: v0.3.2 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Usa o protocolo DNS para resolver registros CNAME
para o hostname
. O argumento addresses
passado para a função callback
conterá um array de registros de nomes canônicos disponíveis para o hostname
(por exemplo, ['bar.example.com']
).
dns.resolveCaa(hostname, callback)
[Histórico]
Versão | Alterações |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v15.0.0, v14.17.0 | Adicionado em: v15.0.0, v14.17.0 |
hostname
<string>callback
<Function>err
<Error>records
<Object[]>
Usa o protocolo DNS para resolver registros CAA
para o hostname
. O argumento addresses
passado para a função callback
conterá um array de registros de autorização de autoridade de certificação disponíveis para o hostname
(por exemplo, [{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]
).
dns.resolveMx(hostname, callback)
[Histórico]
Versão | Alterações |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.1.27 | Adicionado em: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Usa o protocolo DNS para resolver registros de troca de correio (MX
records) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de objetos contendo uma propriedade priority
e exchange
(ex: [{priority: 10, exchange: 'mx.example.com'}, ...])
.
dns.resolveNaptr(hostname, callback)
[Histórico]
Versão | Alterações |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.9.12 | Adicionado em: v0.9.12 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Usa o protocolo DNS para resolver registros baseados em expressão regular (NAPTR
records) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de objetos com as seguintes propriedades:
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)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.1.90 | Adicionado em: v0.1.90 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Usa o protocolo DNS para resolver registros de servidor de nomes (registros NS
) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de registros de servidor de nomes disponíveis para hostname
(por exemplo, ['ns1.example.com', 'ns2.example.com']
).
dns.resolvePtr(hostname, callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v6.0.0 | Adicionado em: v6.0.0 |
hostname
<string>callback
<Function>err
<Error>addresses
<string[]>
Usa o protocolo DNS para resolver registros de ponteiro (registros PTR
) para o hostname
. O argumento addresses
passado para a função callback
será um array de strings contendo os registros de resposta.
dns.resolveSoa(hostname, callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.11.10 | Adicionado em: v0.11.10 |
hostname
<string>callback
<Function>
Usa o protocolo DNS para resolver um registro de início de autoridade (registro SOA
) para o hostname
. O argumento address
passado para a função callback
será um objeto com as seguintes propriedades:
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)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.1.27 | Adicionado em: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Utiliza o protocolo DNS para resolver registros de serviço (registros SRV
) para o hostname
. O argumento addresses
passado para a função callback
será um array de objetos com as seguintes propriedades:
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dns.resolveTxt(hostname, callback)
[Histórico]
Versão | Mudanças |
---|---|
v18.0.0 | Passar um callback inválido para o argumento callback agora lança ERR_INVALID_ARG_TYPE em vez de ERR_INVALID_CALLBACK . |
v0.1.27 | Adicionado em: v0.1.27 |
hostname
<string>callback
<Function>err
<Error>records
<string[][]>
Utiliza o protocolo DNS para resolver consultas de texto (registros TXT
) para o hostname
. O argumento records
passado para a função callback
é um array bidimensional dos registros de texto disponíveis para hostname
(por exemplo, [ [ 'v=spf1 ip4:0.0.0.0 ', '~all' ] ]
). Cada sub-array contém blocos TXT de um registro. Dependendo do caso de uso, estes podem ser unidos ou tratados separadamente.
dns.reverse(ip, callback)
Adicionado em: v0.1.16
ip
<string>callback
<Function>err
<Error>hostnames
<string[]>
Executa uma consulta DNS reversa que resolve um endereço IPv4 ou IPv6 para um array de nomes de host.
Em caso de erro, err
é um objeto Error
, onde err.code
é um dos códigos de erro DNS.
dns.setDefaultResultOrder(order)
[Histórico]
Versão | Alterações |
---|---|
v22.1.0, v20.13.0 | O valor ipv6first agora é suportado. |
v17.0.0 | Valor padrão alterado para verbatim . |
v16.4.0, v14.18.0 | Adicionado em: v16.4.0, v14.18.0 |
order
<string> deve ser'ipv4first'
,'ipv6first'
ou'verbatim'
.
Define o valor padrão de order
em dns.lookup()
e dnsPromises.lookup()
. O valor pode ser:
ipv4first
: define oorder
padrão comoipv4first
.ipv6first
: define oorder
padrão comoipv6first
.verbatim
: define oorder
padrão comoverbatim
.
O padrão é verbatim
e dns.setDefaultResultOrder()
tem maior prioridade do que --dns-result-order
. Ao usar worker threads, dns.setDefaultResultOrder()
da thread principal não afetará as ordens dns padrão nos workers.
dns.getDefaultResultOrder()
[Histórico]
Versão | Alterações |
---|---|
v22.1.0, v20.13.0 | O valor ipv6first agora é suportado. |
v20.1.0, v18.17.0 | Adicionado em: v20.1.0, v18.17.0 |
Obtém o valor padrão para order
em dns.lookup()
e dnsPromises.lookup()
. O valor pode ser:
ipv4first
: paraorder
com padrão paraipv4first
.ipv6first
: paraorder
com padrão paraipv6first
.verbatim
: paraorder
com padrão paraverbatim
.
dns.setServers(servers)
Adicionado em: v0.11.3
servers
<string[]> array de endereços formatados RFC 5952
Define o endereço IP e a porta dos servidores a serem usados ao realizar a resolução de DNS. O argumento servers
é um array de endereços formatados RFC 5952. Se a porta for a porta DNS padrão da IANA (53), ela pode ser omitida.
dns.setServers([
'8.8.8.8',
'[2001:4860:4860::8888]',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]);
Um erro será lançado se um endereço inválido for fornecido.
O método dns.setServers()
não deve ser chamado enquanto uma consulta DNS estiver em andamento.
O método dns.setServers()
afeta apenas dns.resolve()
, dns.resolve*()
e dns.reverse()
(e especificamente não dns.lookup()
).
Este método funciona de forma muito semelhante ao resolve.conf. Ou seja, se a tentativa de resolver com o primeiro servidor fornecido resultar em um erro NOTFOUND
, o método resolve()
não tentará resolver com os servidores subsequentes fornecidos. Os servidores DNS de fallback só serão usados se os anteriores expirarem ou resultarem em algum outro erro.
API de promessas DNS
[Histórico]
Versão | Mudanças |
---|---|
v15.0.0 | Exposto como require('dns/promises') . |
v11.14.0, v10.17.0 | Esta API não é mais experimental. |
v10.6.0 | Adicionado em: v10.6.0 |
A API dns.promises
fornece um conjunto alternativo de métodos DNS assíncronos que retornam objetos Promise
em vez de usar callbacks. A API é acessível via require('node:dns').promises
ou require('node:dns/promises')
.
Classe: dnsPromises.Resolver
Adicionado em: v10.6.0
Um resolvedor independente para requisições DNS.
Criar um novo resolvedor usa as configurações de servidor padrão. Definir os servidores usados para um resolvedor usando resolver.setServers()
não afeta outros resolvedores:
import { Resolver } from 'node:dns/promises';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// Esta requisição usará o servidor em 4.4.4.4, independente das configurações globais.
const addresses = await resolver.resolve4('example.org');
const { Resolver } = require('node:dns').promises;
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);
// Esta requisição usará o servidor em 4.4.4.4, independente das configurações globais.
resolver.resolve4('example.org').then((addresses) => {
// ...
});
// Alternativamente, o mesmo código pode ser escrito usando o estilo async-await.
(async function() {
const addresses = await resolver.resolve4('example.org');
})();
Os seguintes métodos da API dnsPromises
estão disponíveis:
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()
Adicionado em: v15.3.0, v14.17.0
Cancela todas as consultas de DNS pendentes feitas por este resolvedor. As promessas correspondentes serão rejeitadas com um erro com o código ECANCELLED
.
dnsPromises.getServers()
Adicionado em: v10.6.0
- Retorna: <string[]>
Retorna um array de strings de endereço IP, formatadas de acordo com RFC 5952, que estão atualmente configuradas para resolução de DNS. Uma string incluirá uma seção de porta se uma porta personalizada for usada.
[
'8.8.8.8',
'2001:4860:4860::8888',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]
dnsPromises.lookup(hostname[, options])
[Histórico]
Versão | Mudanças |
---|---|
v22.1.0, v20.13.0 | A opção verbatim agora está obsoleta em favor da nova opção order . |
v10.6.0 | Adicionado em: v10.6.0 |
hostname
<string>options
<integer> | <Object>family
<integer> A família de registro. Deve ser4
,6
ou0
. O valor0
indica que um endereço IPv4 ou IPv6 é retornado. Se o valor0
for usado com{ all: true }
(veja abaixo), um ou ambos os endereços IPv4 e IPv6 serão retornados, dependendo do resolvedor de DNS do sistema. Padrão:0
.hints
<number> Uma ou mais flagsgetaddrinfo
suportadas. Várias flags podem ser passadas porOR
bit a bit de seus valores.all
<boolean> Quandotrue
, aPromise
é resolvida com todos os endereços em um array. Caso contrário, retorna um único endereço. Padrão:false
.order
<string> Quandoverbatim
, aPromise
é resolvida com endereços IPv4 e IPv6 na ordem em que o resolvedor de DNS os retornou. Quandoipv4first
, os endereços IPv4 são colocados antes dos endereços IPv6. Quandoipv6first
, os endereços IPv6 são colocados antes dos endereços IPv4. Padrão:verbatim
(os endereços não são reordenados). O valor padrão é configurável usandodns.setDefaultResultOrder()
ou--dns-result-order
. O novo código deve usar{ order: 'verbatim' }
.verbatim
<boolean> Quandotrue
, aPromise
é resolvida com endereços IPv4 e IPv6 na ordem em que o resolvedor de DNS os retornou. Quandofalse
, os endereços IPv4 são colocados antes dos endereços IPv6. Esta opção será descontinuada em favor deorder
. Quando ambos forem especificados,order
tem maior precedência. O novo código deve usar apenasorder
. Padrão: atualmentefalse
(os endereços são reordenados), mas espera-se que isso mude em um futuro não muito distante. O valor padrão é configurável usandodns.setDefaultResultOrder()
ou--dns-result-order
.
Resolve um nome de host (por exemplo, 'nodejs.org'
) para o primeiro registro A (IPv4) ou AAAA (IPv6) encontrado. Todas as propriedades option
são opcionais. Se options
for um inteiro, então deve ser 4
ou 6
– se options
não for fornecido, então endereços IPv4 ou IPv6, ou ambos, são retornados se encontrados.
Com a opção all
definida como true
, a Promise
é resolvida com addresses
sendo um array de objetos com as propriedades address
e family
.
Em caso de erro, a Promise
é rejeitada com um objeto Error
, onde err.code
é o código de erro. Tenha em mente que err.code
será definido como 'ENOTFOUND'
não apenas quando o nome do host não existir, mas também quando a pesquisa falhar de outras maneiras, como nenhum descritor de arquivo disponível.
dnsPromises.lookup()
não tem necessariamente nada a ver com o protocolo DNS. A implementação usa um recurso do sistema operacional que pode associar nomes a endereços e vice-versa. Esta implementação pode ter consequências sutis, mas importantes, no comportamento de qualquer programa Node.js. Por favor, dedique algum tempo para consultar a seção de considerações de implementação antes de usar dnsPromises.lookup()
.
Exemplo de uso:
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)
Adicionado em: v10.6.0
Resolve o address
e a port
fornecidos em um nome de host e serviço usando a implementação getnameinfo
subjacente do sistema operacional.
Se address
não for um endereço IP válido, um TypeError
será lançado. O port
será forçado a um número. Se não for uma porta legal, um TypeError
será lançado.
Em caso de erro, a Promise
é rejeitada com um objeto Error
, onde err.code
é o código de erro.
import dnsPromises from 'node:dns/promises';
const result = await dnsPromises.lookupService('127.0.0.1', 22);
console.log(result.hostname, result.service); // Prints: localhost ssh
const dnsPromises = require('node:dns').promises;
dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
console.log(result.hostname, result.service);
// Prints: localhost ssh
});
dnsPromises.resolve(hostname[, rrtype])
Adicionado em: v10.6.0
hostname
<string> Nome do host a ser resolvido.rrtype
<string> Tipo de registro de recurso. Padrão:'A'
.
Usa o protocolo DNS para resolver um nome de host (por exemplo, 'nodejs.org'
) em um array dos registros de recursos. Quando bem-sucedida, a Promise
é resolvida com um array de registros de recursos. O tipo e a estrutura dos resultados individuais variam com base em rrtype
:
rrtype | records contém | Tipo de resultado | Método abreviado |
---|---|---|---|
'A' | Endereços IPv4 (padrão) | <string> | dnsPromises.resolve4() |
'AAAA' | Endereços IPv6 | <string> | dnsPromises.resolve6() |
'ANY' | Quaisquer registros | <Object> | dnsPromises.resolveAny() |
'CAA' | Registros de autorização de CA | <Object> | dnsPromises.resolveCaa() |
'CNAME' | Registros de nome canônico | <string> | dnsPromises.resolveCname() |
'MX' | Registros de troca de e-mail | <Object> | dnsPromises.resolveMx() |
'NAPTR' | Registros de ponteiro de autoridade de nome | <Object> | dnsPromises.resolveNaptr() |
'NS' | Registros de servidor de nomes | <string> | dnsPromises.resolveNs() |
'PTR' | Registros de ponteiro | <string> | dnsPromises.resolvePtr() |
'SOA' | Registros de início de autoridade | <Object> | dnsPromises.resolveSoa() |
'SRV' | Registros de serviço | <Object> | dnsPromises.resolveSrv() |
'TXT' | Registros de texto | <string[]> | dnsPromises.resolveTxt() |
Em caso de erro, a Promise
é rejeitada com um objeto Error
, onde err.code
é um dos códigos de erro DNS.
dnsPromises.resolve4(hostname[, options])
Adicionado em: v10.6.0
hostname
<string> Nome do host a ser resolvido.options
<Object>ttl
<boolean> Recupera o valor Time-To-Live (TTL) de cada registro. Quandotrue
, aPromise
é resolvida com um array de objetos{ address: '1.2.3.4', ttl: 60 }
em vez de um array de strings, com o TTL expresso em segundos.
Usa o protocolo DNS para resolver endereços IPv4 (registros A
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de endereços IPv4 (por exemplo, ['74.125.79.104', '74.125.79.105', '74.125.79.106']
).
dnsPromises.resolve6(hostname[, options])
Adicionado em: v10.6.0
hostname
<string> Nome do host a ser resolvido.options
<Object>ttl
<boolean> Recupera o valor Time-To-Live (TTL) de cada registro. Quandotrue
, aPromise
é resolvida com um array de objetos{ address: '0:1:2:3:4:5:6:7', ttl: 60 }
em vez de um array de strings, com o TTL expresso em segundos.
Usa o protocolo DNS para resolver endereços IPv6 (registros AAAA
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de endereços IPv6.
dnsPromises.resolveAny(hostname)
Adicionado em: v10.6.0
hostname
<string>
Usa o protocolo DNS para resolver todos os registros (também conhecido como consulta ANY
ou *
). Em caso de sucesso, a Promise
é resolvida com um array contendo vários tipos de registros. Cada objeto tem uma propriedade type
que indica o tipo do registro atual. E dependendo do type
, propriedades adicionais estarão presentes no objeto:
Tipo | Propriedades |
---|---|
'A' | address / ttl |
'AAAA' | address / ttl |
'CNAME' | value |
'MX' | Consulte dnsPromises.resolveMx() |
'NAPTR' | Consulte dnsPromises.resolveNaptr() |
'NS' | value |
'PTR' | value |
'SOA' | Consulte dnsPromises.resolveSoa() |
'SRV' | Consulte dnsPromises.resolveSrv() |
'TXT' | Este tipo de registro contém uma propriedade de array chamada entries que se refere a dnsPromises.resolveTxt() , por exemplo, { entries: ['...'], type: 'TXT' } |
Aqui está um exemplo do objeto de resultado:
[ { 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)
Adicionado em: v15.0.0, v14.17.0
hostname
<string>
Usa o protocolo DNS para resolver registros CAA
para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de objetos contendo registros de autorização de autoridade de certificação disponíveis para o hostname
(por exemplo, [{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]
).
dnsPromises.resolveCname(hostname)
Adicionado em: v10.6.0
hostname
<string>
Usa o protocolo DNS para resolver registros CNAME
para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de registros de nome canônico disponíveis para o hostname
(por exemplo, ['bar.example.com']
).
dnsPromises.resolveMx(hostname)
Adicionado em: v10.6.0
hostname
<string>
Usa o protocolo DNS para resolver registros de troca de e-mail (registros MX
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de objetos contendo as propriedades priority
e exchange
(por exemplo, [{priority: 10, exchange: 'mx.example.com'}, ...]
).
dnsPromises.resolveNaptr(hostname)
Adicionado em: v10.6.0
hostname
<string>
Usa o protocolo DNS para resolver registros baseados em expressões regulares (registros NAPTR
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de objetos com as seguintes propriedades:
flags
service
regexp
replacement
order
preference
{
flags: 's',
service: 'SIP+D2U',
regexp: '',
replacement: '_sip._udp.example.com',
order: 30,
preference: 100
}
dnsPromises.resolveNs(hostname)
Adicionado em: v10.6.0
hostname
<string>
Usa o protocolo DNS para resolver registros de servidor de nomes (registros NS
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de registros de servidor de nomes disponíveis para hostname
(por exemplo, ['ns1.example.com', 'ns2.example.com']
).
dnsPromises.resolvePtr(hostname)
Adicionado em: v10.6.0
hostname
<string>
Utiliza o protocolo DNS para resolver registros de ponteiro (registros PTR
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de strings contendo os registros de resposta.
dnsPromises.resolveSoa(hostname)
Adicionado em: v10.6.0
hostname
<string>
Utiliza o protocolo DNS para resolver um registro de início de autoridade (registro SOA
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um objeto com as seguintes propriedades:
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)
Adicionado em: v10.6.0
hostname
<string>
Utiliza o protocolo DNS para resolver registros de serviço (registros SRV
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array de objetos com as seguintes propriedades:
priority
weight
port
name
{
priority: 10,
weight: 5,
port: 21223,
name: 'service.example.com'
}
dnsPromises.resolveTxt(hostname)
Adicionado em: v10.6.0
hostname
<string>
Utiliza o protocolo DNS para resolver consultas de texto (registros TXT
) para o hostname
. Em caso de sucesso, a Promise
é resolvida com um array bidimensional dos registros de texto disponíveis para hostname
(ex: [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]
). Cada sub-array contém partes TXT de um registro. Dependendo do caso de uso, estes podem ser unidos ou tratados separadamente.
dnsPromises.reverse(ip)
Adicionado em: v10.6.0
ip
<string>
Realiza uma consulta DNS reversa que resolve um endereço IPv4 ou IPv6 para um array de nomes de host.
Em caso de erro, a Promise
é rejeitada com um objeto Error
, onde err.code
é um dos códigos de erro DNS.
dnsPromises.setDefaultResultOrder(order)
[Histórico]
Versão | Mudanças |
---|---|
v22.1.0, v20.13.0 | O valor ipv6first agora é suportado. |
v17.0.0 | Valor padrão alterado para verbatim . |
v16.4.0, v14.18.0 | Adicionado em: v16.4.0, v14.18.0 |
order
<string> deve ser'ipv4first'
,'ipv6first'
ou'verbatim'
.
Define o valor padrão de order
em dns.lookup()
e dnsPromises.lookup()
. O valor pode ser:
ipv4first
: define oorder
padrão comoipv4first
.ipv6first
: define oorder
padrão comoipv6first
.verbatim
: define oorder
padrão comoverbatim
.
O padrão é verbatim
e dnsPromises.setDefaultResultOrder()
tem maior prioridade do que --dns-result-order
. Ao usar threads de worker, dnsPromises.setDefaultResultOrder()
da thread principal não afetará as ordens DNS padrão nos workers.
dnsPromises.getDefaultResultOrder()
Adicionado em: v20.1.0, v18.17.0
Obtém o valor de dnsOrder
.
dnsPromises.setServers(servers)
Adicionado em: v10.6.0
servers
<string[]> array de endereços formatados RFC 5952
Define o endereço IP e a porta dos servidores a serem usados ao realizar a resolução DNS. O argumento servers
é um array de endereços formatados RFC 5952. Se a porta for a porta DNS padrão da IANA (53), ela pode ser omitida.
dnsPromises.setServers([
'8.8.8.8',
'[2001:4860:4860::8888]',
'8.8.8.8:1053',
'[2001:4860:4860::8888]:1053',
]);
Um erro será lançado se um endereço inválido for fornecido.
O método dnsPromises.setServers()
não deve ser chamado enquanto uma consulta DNS estiver em andamento.
Este método funciona de forma muito semelhante ao resolve.conf. Ou seja, se tentar resolver com o primeiro servidor fornecido resultar em um erro NOTFOUND
, o método resolve()
não tentará resolver com os servidores subsequentes fornecidos. Os servidores DNS de fallback só serão usados se os anteriores expirarem ou resultarem em algum outro erro.
Códigos de erro
Cada consulta DNS pode retornar um dos seguintes códigos de erro:
dns.NODATA
: O servidor DNS retornou uma resposta sem dados.dns.FORMERR
: O servidor DNS afirma que a consulta foi formatada incorretamente.dns.SERVFAIL
: O servidor DNS retornou uma falha geral.dns.NOTFOUND
: Nome de domínio não encontrado.dns.NOTIMP
: O servidor DNS não implementa a operação solicitada.dns.REFUSED
: O servidor DNS recusou a consulta.dns.BADQUERY
: Consulta DNS formatada incorretamente.dns.BADNAME
: Nome de host formatado incorretamente.dns.BADFAMILY
: Família de endereços não suportada.dns.BADRESP
: Resposta DNS formatada incorretamente.dns.CONNREFUSED
: Não foi possível contactar os servidores DNS.dns.TIMEOUT
: Tempo limite ao contactar os servidores DNS.dns.EOF
: Fim do arquivo.dns.FILE
: Erro ao ler o arquivo.dns.NOMEM
: Sem memória.dns.DESTRUCTION
: O canal está sendo destruído.dns.BADSTR
: String formatada incorretamente.dns.BADFLAGS
: Flags ilegais especificadas.dns.NONAME
: O nome de host fornecido não é numérico.dns.BADHINTS
: Flags de dicas ilegais especificadas.dns.NOTINITIALIZED
: A inicialização da biblioteca c-ares ainda não foi realizada.dns.LOADIPHLPAPI
: Erro ao carregariphlpapi.dll
.dns.ADDRGETNETWORKPARAMS
: Não foi possível encontrar a funçãoGetNetworkParams
.dns.CANCELLED
: Consulta DNS cancelada.
A API dnsPromises
também exporta os códigos de erro acima, por exemplo, dnsPromises.NODATA
.
Considerações sobre a implementação
Embora dns.lookup()
e as várias funções dns.resolve*()/dns.reverse()
tenham o mesmo objetivo de associar um nome de rede a um endereço de rede (ou vice-versa), seu comportamento é bem diferente. Essas diferenças podem ter consequências sutis, mas significativas, no comportamento dos programas Node.js.
dns.lookup()
Internamente, dns.lookup()
usa as mesmas facilidades do sistema operacional que a maioria dos outros programas. Por exemplo, dns.lookup()
quase sempre resolverá um determinado nome da mesma forma que o comando ping
. Na maioria dos sistemas operacionais do tipo POSIX, o comportamento da função dns.lookup()
pode ser modificado alterando as configurações em nsswitch.conf(5)
e/ou resolv.conf(5)
, mas alterar esses arquivos mudará o comportamento de todos os outros programas em execução no mesmo sistema operacional.
Embora a chamada para dns.lookup()
seja assíncrona da perspectiva do JavaScript, ela é implementada como uma chamada síncrona para getaddrinfo(3)
que é executada no threadpool do libuv. Isso pode ter implicações negativas surpreendentes no desempenho de algumas aplicações, consulte a documentação UV_THREADPOOL_SIZE
para obter mais informações.
Várias APIs de rede chamarão dns.lookup()
internamente para resolver nomes de host. Se isso for um problema, considere resolver o nome do host para um endereço usando dns.resolve()
e usar o endereço em vez de um nome de host. Além disso, algumas APIs de rede (como socket.connect()
e dgram.createSocket()
) permitem que o resolvedor padrão, dns.lookup()
, seja substituído.
dns.resolve()
, dns.resolve*()
, e dns.reverse()
Essas funções são implementadas de forma bem diferente de dns.lookup()
. Elas não usam getaddrinfo(3)
e sempre realizam uma consulta DNS na rede. Essa comunicação de rede é sempre feita de forma assíncrona e não usa o pool de threads do libuv.
Como resultado, essas funções não podem ter o mesmo impacto negativo em outros processamentos que acontecem no pool de threads do libuv que dns.lookup()
pode ter.
Elas não usam o mesmo conjunto de arquivos de configuração que dns.lookup()
usa. Por exemplo, elas não usam a configuração de /etc/hosts
.