DNS

Последнее обновление: 23.10.2022

DNS представляет распределенную децентрализованную систему для получении информации о доменах. Физичеcки dns - это сеть серверов, в которой размещен каталог, где доменные имен сопоставлены с IP-адресами. Любое доменное имя, которое было зарегистрировано у сертифицированного регистратора доменных имен и соответствует стандартам доменного имени (и которое еще не было зарегистрировано), считается действительным. Действительные доменные имена добавляются в распределенный реестр, размещенный на dns-серверах.

При отправке запроса по имени домена, например, при вводе в адресной строке браузере адреса "https://metanit.com" и отправке запроса, вначале идет запрос на один из этих dns-серверов. Каждый сервер будет проверять данное доменное имя и искать домен в своем собственном каталоге, где сопоставляются домены и IP-адреса. Если сервер или один из подчиненных серверов смог сопоставить домен с одним из ip-адресов, то сервер просто заменяет доменное имя в запросе на IP-адрес, с которым он сопоставляется, и соответствующим образом пересылает запрос. Однако, если текущий сервер не может разрешить доменное имя, он перенаправит его вверх по иерархии серверов имен в более общий родительский домен. Этот процесс продолжается до корневого сервера имен или до разрешения имени.

Для идентификации ip-адресов .NET предоставляет статический класс Dns, который располагается в пространстве имен System.Net. В частности, мы можем использовать следующие методы данного класса:

  • GetHostAddresses (string hostNameOrAddress): запрашивает DNS-сервер и возвращает все ip-адреса для определенного имени хоста в виде массива System.Net.IPAddress[]. Данный метод имеет асинхронного двойника в виде метода GetHostAddressesAsync(string hostNameOrAddress)

  • GetHostEntry (string hostNameOrAddress): запрашивает DNS-сервер и возвращает объект IPHostEntry для определенного имени хоста или ip-адреса. Данный метод имеет асинхронного двойника в виде метода GetHostEntryAsync(string hostNameOrAddress)

  • GetHostName(): возвращает имя хоста для локального компьютера

Например, получим данные по доменному имени "google.com":

using System.Net;

var googleEntry = await Dns.GetHostEntryAsync("google.com");
Console.WriteLine(googleEntry.HostName);
foreach (var ip in googleEntry.AddressList)
{
    Console.WriteLine(ip);
}

Метод Dns.GetHostEntryAsync() возвращает объект IPHostEntry, который представляет информацию о хосте и у которого можно выделить два свойства: HostName (имя хоста) и AddressList (массив объектов IPAddress - ip-адресов данного хоста).

Консольный вывод в моем случае:

google.com
142.250.74.78

В данном случае подчеркну, что IP-адрес для домена google.com может отличаться, так как серверы компании Google довольно широко распределены по миру.

Подобным образом можно использовать метод Dns.GetHostAddresses() для получения ip-адресов для определенного домена:

using System.Net;

var googleIps = await Dns.GetHostAddressesAsync("google.com");
foreach (var ip in googleIps)
{
    Console.WriteLine(ip);
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850