Как получить имя контроллера домена

179
03 августа 2021, 09:50

Как получить имя текущего контроллера домена? Данный отрезок кода выводит имя домена, а мне нужно имя контроллера.

string Domain = System.Environment.UserDomainName
Answer 1
  1. Получаете имя текущего домена
  2. Выполняете DNS-запрос по имени домена и получаете список IP-адресов контроллеров
  3. Выполняете DNS-запрос для каждого адреса и получаете их имена

Почему это работает:

При работе с доменом, на обращение по имени домена должен ответить первый доступный контроллер, для обеспечения максимальной скорости ответа. Поэтому DNS должен быть настроен таким образом, чтобы отдавать IP-адреса всех контроллеров по имени домена.

Контроллер домена обязан входить в домен, следовательно его имя, как и имя любого доменного компьютера, состоит из собственного имени компьютера и доменного суффикса. Это имя также регистрируется в DNS, как и мена любых других компьютеров, входящих в домен, для обеспечения возможности обращаться к конкретному компьютеру по имени, а не только прямому IP-адресу.

Таким образом, в случае с доменом, DNS должен отвечать следующим образом:

  • По IP-адресу всегда возвращается зарегистрированное полное доменное имя компьютера.
  • По полному доменному имени компьютера возвращаются все зарегистрированные IP-адреса данного компьютера.
  • По имени домена возвращаются все зарегистрированные IP-адреса всех контроллеров домена.

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

Ну и всегда стоит помнить, что взаимодействие между компьютерами происходит с использованием именно IP-адресов, а не их имен (разумеется, только на рассматриваемом уровне сетевого взаимодействия), поэтому, для практического использования, дальше получения списка адресов контроллеров домена можно не ходить.

Для выполнения DNS-запросов можно воспользоваться Dns.GetHostEntry или стандартной утилитой nslookup, перенаправив ее выходной поток в свое приложение.

foreach (var a in Dns.GetHostEntry("your domain").AddressList)
{
    try
    {
        Console.WriteLine(Dns.GetHostEntry(a).HostName);
    }
    //ответ о том, что DNS ни чего не знает про запрашиваемый хост 
    //приходит в виде исключения =(
    catch (SocketException se)
    {
        Console.WriteLine(se.Message);
    }
}
READ ALSO
Не работает Hello World в Visual Studio

Не работает Hello World в Visual Studio

пробовал сам сделать хелло ворлд на c#, ругается скачал с гитхаба, тоже не работает, может кто-то сталкивался с таким

163
Как создать .Net Core 3 WPF приложение в VisualStudio 19?

Как создать .Net Core 3 WPF приложение в VisualStudio 19?

При попытке создать WPF приложение наNet Core 3 выдает это: Я думаю, что тут проблема локализации, ибо найти такие разделы настроек не могу

305
Что нужно для запуска .net core 3 WPF приложения?

Что нужно для запуска .net core 3 WPF приложения?

Нужно ли на компьютере пользователя иметь установленныйnet framework или

144