ПРИМЕЧАНИЕ. Это решение работает только при нацеливании на платформы .NET 2.0 (и более новые).
using System;
using System.Net;
using System.Net.NetworkInformation;
//...
public static string GetFQDN()
{
string domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName;
string hostName = Dns.GetHostName();
domainName = "." + domainName;
if(!hostName.EndsWith(domainName)) // if hostname does not already include domain name
{
hostName += domainName; // add the domain name part
}
return hostName; // return the fully qualified name
}
UPDATE
Поскольку многие люди отмечают, что Ответ Сэма более лаконичен, я решил добавить несколько комментариев к ответу.
Самое важное, что нужно отметить, это то, что код, который я дал, не эквивалентен следующему коду:
Dns.GetHostEntry("LocalHost").HostName
В то время как в общем случае, когда компьютер подключен к сети и является частью домена, оба метода обычно дают одинаковый результат, в других сценариях результаты будут отличаться.
Сценарий, в котором выходные данные будут другими, - это когда компьютер не является частью домена. В этом случае Dns.GetHostEntry("LocalHost").HostName
вернет localhost
, а вышеприведенный метод GetFQDN()
вернет NETBIOS-имя хоста.
Это различие важно, когда целью поиска полного доменного имени машины является регистрация информации или создание отчета. Большую часть времени я использовал этот метод в журналах или отчетах, которые впоследствии используются для сопоставления информации с конкретным компьютером. Если машины не подключены к сети, идентификатор localhost
является бесполезным, а имя дает необходимую информацию.
Так что, в конечном счете, каждый пользователь должен выбрать, какой метод лучше подходит для его приложения, в зависимости от того, какой результат ему нужен. Но сказать, что этот ответ неверен из-за недостаточной краткости, в лучшем случае поверхностно.
См. Пример, в котором выходные данные будут другими: http://ideone.com/q4S4I0