Перейти к содержанию

DNS

Стабильность: 2 — Стабильная

Модуль node:dns выполняет разрешение имён: например, поиск IP-адресов по имени хоста.

Несмотря на название системы доменных имён (DNS), для поиска не всегда используется протокол DNS. [dns.lookup()][dns.lookup()] опирается на средства ОС для разрешения имён. Сетевой обмен может и не понадобиться. Чтобы вести себя при разрешении имён так же, как другие приложения в системе, используйте [dns.lookup()][dns.lookup()].

1
2
3
4
5
6
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
1
2
3
4
5
6
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()][dns.lookup()] (например, не учитывается /etc/hosts). Используйте их, когда нужны именно DNS-запросы, минуя прочие механизмы разрешения имён в ОС.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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)}`);
    });
  });
});
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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

Независимый резолвер для DNS-запросов.

При создании резолвера используются настройки серверов по умолчанию. Список серверов, заданный через [resolver.setServers()][dns.setServers()] для одного резолвера, не влияет на другие:

1
2
3
4
5
6
7
8
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) => {
  // ...
});
1
2
3
4
5
6
7
8
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()][dns.getServers()]
  • [resolver.resolve()][dns.resolve()]
  • [resolver.resolve4()][dns.resolve4()]
  • [resolver.resolve6()][dns.resolve6()]
  • [resolver.resolveAny()][dns.resolveAny()]
  • [resolver.resolveCaa()][dns.resolveCaa()]
  • [resolver.resolveCname()][dns.resolveCname()]
  • [resolver.resolveMx()][dns.resolveMx()]
  • [resolver.resolveNaptr()][dns.resolveNaptr()]
  • [resolver.resolveNs()][dns.resolveNs()]
  • [resolver.resolvePtr()][dns.resolvePtr()]
  • [resolver.resolveSoa()][dns.resolveSoa()]
  • [resolver.resolveSrv()][dns.resolveSrv()]
  • [resolver.resolveTlsa()][dns.resolveTlsa()]
  • [resolver.resolveTxt()][dns.resolveTxt()]
  • [resolver.reverse()][dns.reverse()]
  • [resolver.setServers()][dns.setServers()]

Resolver([options])

Добавлено в: v8.3.0

История
Версия Изменения
v16.7.0, v14.18.0 Объект options теперь принимает опцию tries.
v12.18.3 Конструктор теперь принимает объект options. Единственная поддерживаемая опция — «timeout».

Создаёт новый резолвер.

Комментарии