У нас есть 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