DNS
[Stable: 2 - Estável]
Stable: 2 Estabilidade: 2 - Estável
Código Fonte: lib/dns.js
O módulo node:dns
habilita a resolução de nomes. Por exemplo, use-o para procurar endereços IP de nomes de host.
Embora seja nomeado para o Sistema de Nomes de Domínio (DNS), ele nem sempre usa o protocolo DNS para pesquisas. dns.lookup()
usa as instalações do sistema operacional para realizar a resolução de nomes. Pode não precisar 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
conectam-se a um servidor DNS real para realizar a resolução de nomes. Elas sempre usarão a rede para realizar consultas DNS. Essas funções não usam o mesmo conjunto de arquivos de configuração usados por dns.lookup()
(por exemplo, /etc/hosts
). Use essas funções para sempre realizar consultas DNS, ignorando outras instalações 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 mais informações.
Classe: dns.Resolver
Adicionado em: v8.3.0
Um resolvedor independente para requisições DNS.
Criar um novo resolvedor usa as configurações padrão do servidor. Configurar 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 requisiçã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 requisiçã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
<Object>
resolver.cancel()
Adicionado em: v8.3.0
Cancela todas as consultas DNS pendentes feitas por este resolvedor. Os callbacks 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 um array de strings de endereço IP, formatado de acordo com RFC 5952, que estão atualmente configurados 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 gera 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 do registro. Deve ser4
,6
ou0
. Por motivos 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 de DNS do sistema. Padrão:0
.hints
<number> Um ou mais flagsgetaddrinfo
suportados. Vários flags podem ser passados por meio deOR
bit a bit 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á descontinuada 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 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. Lembre-se de 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 um recurso do sistema operacional que pode associar nomes a endereços e vice-versa. Essa implementação pode ter consequências sutis, mas importantes, no comportamento de qualquer programa Node.js. Reserve algum tempo para consultar a seção Considerações sobre a 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
// Quando options.all é true, o resultado será um 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
// Quando options.all é true, o resultado será um 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 for definido como true
, ele retornará uma Promise
para um Object
com as propriedades address
e family
.
Flags getaddrinfo suportadas
[Histórico]
Versão | Alterações |
---|---|
v13.13.0, v12.17.0 | Adicionado suporte para a flag dns.ALL . |
As seguintes flags podem ser passadas como dicas para dns.lookup()
.
dns.ADDRCONFIG
: Limita os tipos de endereço retornados aos tipos de endereços não loopback configurados no sistema. Por exemplo, os endereços IPv4 só são retornados 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, retorna endereços IPv6 mapeados para IPv4. Não é suportado em alguns sistemas operacionais (por exemplo, FreeBSD 10.1).dns.ALL
: Sedns.V4MAPPED
for especificado, retorna endereços IPv6 resolvidos, bem como endereços IPv6 mapeados para IPv4.
dns.lookupService(address, port, 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.11.14 | Adicionado em: v0.11.14 |
address
<string>port
<number>callback
<Function>
Resolve o address
e port
fornecidos para 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á convertido para 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)
// Imprime: localhost ssh
})
const dns = require('node:dns')
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
console.log(hostname, service)
// Imprime: localhost ssh
})
Se este método for invocado como sua versão util.promisify()
ed, ele retorna uma Promise
para um Object
com as 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>
Utiliza 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 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 nome | <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
<Objeto>ttl
<booleano> Recupera o valor de 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
<Função>err
<Erro>addresses
<string[]> | <Objeto[]>
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
<Objeto>ttl
<booleano> Recupera o valor de 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
<Função>err
<Erro>addresses
<string[]> | <Objeto[]>
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 servidor 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 | 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.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 nome canônico disponíveis para o hostname
(por exemplo, ['bar.example.com']
).
dns.resolveCaa(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 . |
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:[email protected]'}, {critical: 128, issue: 'pki.example.com'}]
).
dns.resolveMx(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 troca de e-mail (registros MX
) para o hostname
. O argumento addresses
passado para a função callback
conterá um array de objetos contendo tanto uma propriedade priority
quanto uma propriedade exchange
(por exemplo, [{priority: 10, exchange: 'mx.example.com'}, ...]
).
dns.resolveNaptr(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.9.12 | Adicionado em: v0.9.12 |
hostname
<string>callback
<Function>err
<Error>addresses
<Object[]>
Utiliza o protocolo DNS para resolver registros baseados em expressões regulares (registros NAPTR
) 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[]>
Usa 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[][]>
Usa 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 chunks TXT de um registro. Dependendo do caso de uso, eles podem ser unidos ou tratados separadamente.
dns.reverse(ip, callback)
Adicionado em: v0.1.16
ip
<string>callback
<Function>err
<Error>hostnames
<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, err
é um objeto Error
, onde err.code
é um dos códigos de erro DNS.
dns.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 paraipv4first
.ipv6first
: define oorder
padrão paraipv6first
.verbatim
: define oorder
padrão paraverbatim
.
O padrão é verbatim
e dns.setDefaultResultOrder()
tem maior prioridade do que --dns-result-order
. Ao usar threads de trabalho, dns.setDefaultResultOrder()
da thread principal não afetará as ordens DNS padrão nos workers.
dns.getDefaultResultOrder()
[Histórico]
Versão | Mudanças |
---|---|
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 executar 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 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 resolução 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 | Alterações |
---|---|
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 está 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.
A criação de 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 DNS pendentes feitas por este resolvedor. As promises 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 | Alterações |
---|---|
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 do 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 são retornados, dependendo do resolvedor DNS do sistema. Padrão:0
.hints
<number> Uma ou mais flagsgetaddrinfo
suportadas. Várias flags podem ser passadas por meio deOR
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 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 DNS os retornou. Quandofalse
, os endereços IPv4 são colocados antes dos endereços IPv6. Esta opção será depreciada em favor deorder
. Quando ambos são 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'
) no 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, serã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, reserve algum tempo para consultar a seção de considerações sobre a 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
})
// Quando options.all é true, o resultado será um 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
})
// Quando options.all é true, o resultado será um 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á convertido em 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) // Imprime: localhost ssh
const dnsPromises = require('node:dns').promises
dnsPromises.lookupService('127.0.0.1', 22).then(result => {
console.log(result.hostname, result.service)
// Imprime: 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-sucedido, 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 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 de 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.
Utiliza 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 de 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.
Utiliza 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>
Utiliza 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 autoridades de certificação disponíveis para o hostname
(por exemplo, [{critical: 0, iodef: 'mailto:[email protected]'},{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 uma propriedade 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>
Usa 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>
Usa 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>
Usa 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>
Usa 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
(por exemplo, [ ['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>
Executa 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 | Alterado o valor padrão 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 paraipv4first
.ipv6first
: define oorder
padrão paraipv6first
.verbatim
: define oorder
padrão paraverbatim
.
O padrão é verbatim
e dnsPromises.setDefaultResultOrder()
tem maior prioridade do que --dns-result-order
. Ao usar threads de trabalho, 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 executar 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 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 a tentativa de resolver com o primeiro servidor fornecido resultar em um erro NOTFOUND
, o método resolve()
não tentará resolver com 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 estava malformada.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 malformada.dns.BADNAME
: Nome de host malformado.dns.BADFAMILY
: Família de endereços não suportada.dns.BADRESP
: Resposta DNS malformada.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 malformada.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
: Inicialização da biblioteca c-ares ainda não 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 de 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 é bastante 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 semelhantes ao 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 pool de threads do libuv. Isso pode ter implicações negativas surpreendentes de desempenho para algumas aplicações, consulte a documentação UV_THREADPOOL_SIZE
para 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 usando 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()
Estas 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. Esta comunicação de rede é sempre feita de forma assíncrona e não usa o threadpool do libuv.
Como resultado, estas funções não podem ter o mesmo impacto negativo em outros processamentos que acontecem no threadpool 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
.