NodeJS | Как получить IP-адрес сайта, отправляя запрос с сервера?

NodeJS | Как получить IP-адрес сайта, отправляя запрос с сервера?

У нас есть NodeJS сервер, с которого мы отправляем запросы на разные сайты сети интернет. Мы получаем полезные данные и публикуем аналитику.

В некоторых задачах мы хотим собирать IP-адреса, на которых располагаются ресурсы тех или иных сайтов.

 

Работа с системой доменных имён

В NodeJS есть модуль, который отвечает за работу с системой доменных имён. Он так и называется — DNS.

Модуль «node:dns» включает разрешение имён. Например, используйте его для поиска IP-адресов имён хостов.

Хотя он назван в честь «Системы Доменных Имён» (DNS), он не всегда использует протокол DNS для поиска.

 

Метод dns.lookup() использует средства операционной системы для разрешения имён. Возможно, ему не потребуется выполнять какую-либо сетевую связь. Чтобы выполнить разрешение имён так же, как это делают другие приложения в той же системе, используйте dns.lookup().

const dns = require('node:dns');

dns.lookup('example.org', (err, address, family) => {
  console.log('address: %j family: IPv%s', address, family);
});
// address: "93.184.216.34" family: IPv4

Здесь важно обратить внимание на первый параметр, передаваемый в метод lookup(). Имя домена должно быть таким, какое оно находится в самой DNS. Это значит, что в имени не должно быть URI-схемы (например, https:// или http://), также не должно быть URI-пути (например, /catalog или /card), а также URI-запроса (#) и URI-фрагмента (?), ну и порт тоже не надо приписывать. Обязательно один раз в жизни прочитайте протокол «RFC3986 | URI — Унифицированный идентификатор ресурса: общий синтаксис«.

Все остальные функции в модуле «node:dns» подключаются к реальному DNS-серверу для выполнения разрешения имён. Они всегда будут использовать сеть для выполнения DNS-запросов. Эти функции не используют тот же набор файлов конфигурации, что и dns.lookup() (например, /etc/hosts). Используйте эти функции, чтобы всегда выполнять DNS-запросы, минуя другие средства разрешения имён.

 

Зачем нам нужно знать IP-адреса сайтов?

В интернете много мусора и спама. Существуют сайты-клоны, которые могут отдавать схожий контент на сотнях тысячах доменных имён.

Собирая IP-адреса сайтов, можно придумать дополнительный инструмент по фильтрации плохих сайтов.

Если начать изучать IP-адреса сайтов-клонов, то можно наткнуться на закономерности в их количестве. Так, можно обнаружить, что все 10000 клонов лежат на одном IP-адресе.

В итоге подобный IP-адрес можно легко добавить в блок-лист и отбрасывать новые запросы или удалить клоны доменов из базы данных.

 

Запрос для поиска на английском языке

NodeJS | How to get website ip address from request from server