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

Можно ли разрешить имя хоста с помощью Javascript?

Вот гипотетический код:

var hostname = "www.yahoo.com";
var ipAddress = DnsLookup(hostname);
console.log(ipAddress);

Я ищу эту магию DnsLookup() функция.:-)

3 ответа

Существует относительно новый (2018 г.) предложенный Интернет-стандарт под названием DNS over HTTPS (также называемый DoH), который набирает обороты. Он позволяет отправлять DNS-запросы в формате проводной сети через HTTPS на "серверы DoH". Приятно то, что с DoH вы получаете весь протокол DNS поверх HTTPS. Это означает, что вы можете получить много полезной информации.

При этом существует библиотека JavaScript с открытым исходным кодом, называемая dohjs, которая упрощает поиск DNS в браузере. Вот небольшой фрагмент кода:

const resolver = new doh.DohResolver('https://1.1.1.1/dns-query')
resolver.query('www.yahoo.com')
  .then(console.log)
  .catch(console.error);

Полное раскрытие информации: я участвую в dohjs.

На вики-странице cURL DNS over HTTPS есть много ресурсов, включая список общедоступных серверов DoH и список инструментов DoH (в основном серверное и клиентское программное обеспечение).

Хотя в JavaScript нет стандартных функций DNS, вы всегда можете вызвать сторонний общедоступный API, который выполняет разрешение DNS.

Например, Encloud предоставляет такой API, и вы можете сделать для него XMLHttpRequest:

var oReq = new XMLHttpRequest();
oReq.onload = function () {
  var response = JSON.parse(this.responseText);
  alert(JSON.stringify(response.dns_entries));
}  
oReq.open("get", "https://www.enclout.com/api/v1/dns/show.json?auth_token=rN4oqCyJz9v2RRNnQqkx&url=stackru.com", true);
oReq.send();

Конечно, вы должны получить свой собственный токен аутентификации. Бесплатные учетные записи Enclout ограничены до 6 запросов в минуту.

Если вам нужен только IP, сделайте запрос GET для http://api.konvert.me/forward-dns/yourdomain.com.

Вам нужно будет перезвонить на серверную сторону и решить значение оттуда. В Javascript нет стандартных функций поиска DNS.

Нет - javascript заблокирован от выполнения междоменных запросов. Потенциально могут быть некоторые хаки, которые могут вам помочь ( этот выглядел довольно многообещающе), но по умолчанию вы не можете этого сделать.

Вы можете запросить что-то и получить HTTP 200.

Другие вопросы по тегам