Я собираюсь добавить ответ, чтобы попытаться прояснить некоторые вещи здесь, поскольку, кажется, есть некоторая путаница. Основная проблема заключается в том, что люди задают не тот вопрос или, по крайней мере, недостаточно конкретны.
Что на самом деле означает "домен" компьютера ?
Когда мы говорим о «домене» компьютера, мы можем иметь в виду несколько вещей. Ниже приводится не полный список, но он охватывает наиболее распространенные случаи:
- A пользователь или участник безопасности компьютера может принадлежать домену Active Directory.
- Основной суффикс поиска DNS сетевого стека может называться «доменом» компьютера.
- DNS-имя, которое соответствует IP-адресу компьютера, может называться «доменом» компьютера.
Какой я хочу?
Это сильно зависит от того, что вы пытаетесь сделать. Первоначальный автор этого вопроса искал «домен Active Directory» компьютера, что, вероятно, означает, что они ищут домен, к которому принадлежит либо участник безопасности компьютера, либо участник безопасности пользователя. Обычно они нужны, когда вы пытаетесь каким-либо образом общаться с Active Directory. Обратите внимание, что текущий пользователь и субъект компьютера не обязательно находятся в одном домене.
Ответ Питера ван Гинкеля на самом деле дает вам основной суффикс DNS локального сетевого стека (то же самое, что показано в верхней части вывода ipconfig /all
). В 99% случаев это, вероятно, то же самое, что и домен, к которому принадлежат как субъект безопасности компьютера, так и субъект аутентифицированного пользователя - , но не обязательно . Обычно это то, что вам нужно, когда вы пытаетесь общаться с устройствами в локальной сети, независимо от того, имеют ли устройства какое-либо отношение к Active Directory. Для многих приложений это все еще будет «достаточно хороший» ответ для общения с Active Directory.
Последний вариант, DNS-имя, является более размытым и более двусмысленным, чем два других. В любом месте от нуля до бесконечности DNS-записи могут преобразовываться в данный IP-адрес, и даже не совсем ясно, какой IP-адрес вас интересует. user2031519 ответ относится к значению HTTP_HOST
, что особенно полезно при определении того, как пользователь разрешил ваш HTTP-сервер, чтобы отправить запрос, который вы сейчас обрабатываете. Это почти наверняка не то, что вы хотите, если вы пытаетесь что-то сделать с Active Directory.
Как мне их получить?
Домен текущего участника безопасности пользователя
Это хорошо и просто, вот что ответ Тима дает вам.
System.Environment.UserDomainName
Домен текущего участника безопасности компьютера
Это , вероятно, то, что хотел ОП, для этого нам нужно будет спросить об этом Active Directory.
System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain()
Этот запрос выдаст ActiveDirectoryObjectNotFoundException
, если локальный компьютер не является частью домена или с контроллером домена невозможно связаться.
Основной DNS-суффикс стека
Это - это то, что ответ Питера ван Гинкеля дает вам. Это, вероятно, не совсем то, что вы хотите, но есть хороший шанс, что это достаточно хорошо для вас - если это не так, вы, вероятно, уже знаете, почему.
System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName
DNS-имя, которое соответствует IP-адресу компьютера
Этот хитрый, и нет однозначного ответа на него. Если это то, что вам нужно, прокомментируйте ниже, и я с удовольствием расскажу о вашем сценарии использования и помогу вам найти лучшее решение (и подробно остановлюсь на этом ответе).