注意:此解决方案仅在针对 .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 名称。
当查找计算机 FQDN 的目的是记录信息或生成报告时,这种区别很重要。大多数时候,我在日志或报告中使用此方法,随后将其用于将信息映射回特定计算机。如果机器没有联网,localhost
标识符是无用的,而名称提供了所需的信息。
因此,最终取决于每个用户哪种方法更适合他们的应用程序,具体取决于他们需要什么结果。但如果说这个答案是错误的,因为不够简洁,那充其量只是肤浅的。
请参阅输出不同的示例:http://ideone.com/q4S4I0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)