在C#中如何找到本机的完全限定主机名?

33

例如:我想要类似于abc.hyd.mycompany.com这样的东西。我的要求是解析这个名称并初始化适当的服务。

using System.Net;

Dns.GetHostName() // doesn't return fully qualified name it just gives "abc" 
3个回答

54

你可以通过这种方式获取整个DNS字符串:

System.Net.Dns.GetHostEntry("").HostName

在我工作的地方,我们没有完整的DNS名称,但它会给我一个三级仿真域名,而不仅仅是主机名。

编辑2011/03/17:已经融合了mark以下建议的更改。


1
最好还是将空字符串""传递给GetHostEntry。这样可以得到相同的结果,但感觉更好。 - mark
@mark:你说得对,这确实是减少了一个指令需要处理。我不知道自己怎么错过了这一点。更新两年前的答案感觉有点奇怪,但是... - Powerlord
这个在XP和Win7上一样吗?最近编辑之前给出的示例代码在Win7上给出了合格的主机名,但在XP上只给出了不合格的名称。想要适用于两者的代码。谢谢。 - Cincinnati Joe
@CincinnatiJoe:奇怪的是,在位于密歇根州内部网络上的我的WinXP SP3工作机器上,新旧版本的工作方式完全相同。我已经更新了答案,仍显示旧版本,以防出现您遇到的问题。 - Powerlord
实际上,我是在说旧的方法在XP上无法按预期工作。用修订后的方法进行了快速尝试,也似乎在XP上无法工作。两者都在Win7上正常工作。因此,在XP上获取限定名称可能需要另一种解决方案。 - Cincinnati Joe
@CincinnatiJoe:哦,好的。我把我误读它归咎于星期一。;) 出于好奇,另一个答案有帮助吗,还是也没用?虽然我仍然不确定为什么这在你的WinXP机器上不起作用......但在这里,在XP上运行得很好。 - Powerlord

13

我使用了非常类似的方法:

var serverName = System.Environment.MachineName; //host name sans domain
var fqhn = System.Net.Dns.GetHostEntry(serverName).HostName; //fully qualified hostname

2
如果上述方法不起作用,您也可以尝试从环境中检索它:
var dnsName = new StringBuilder();
dnsName.Append(Environment.GetEnvironmentVariable("COMPUTERNAME")).Append(".");
dnsName.Append(Environment.GetEnvironmentVariable("USERDNSDOMAIN"));

8
可能会失败 - USERDNSDOMAIN 可能与机器所属的域不同。 - pduncan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接