【问题标题】:How do I find the fully qualified hostname of my machine in C#? [duplicate]如何在 C# 中找到我的机器的完全限定主机名? [复制]
【发布时间】:2010-10-07 04:45:46
【问题描述】:

例如:我想要 abc.hyd.mycompany.com 之类的东西。我的要求是解析这个名称并初始化相应的服务。

using System.Net;

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

【问题讨论】:

    标签: c# environment-variables


    【解决方案1】:

    您也许可以像这样获得整个 DNS 字符串:

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

    我工作的地方没有完整的 DNS 名称,但它确实给了我一个三级假域名,而不仅仅是主机名。

    编辑 2011/03/17:合并以下标记建议的更改。

    【讨论】:

    • 最好还是将空字符串 "" 传递给 GetHostEntry。这会产生相同的结果,但感觉更好。
    • @mark:你是对的,确实如此,而且它需要处理的指令更少。我不知道我是怎么错过的。更新两年前的答案感觉有点奇怪,但是......
    • 这在 XP 和 Win7 上的工作方式一样吗?在最近的编辑之前给出的示例代码在 Win7 上给出了合格的主机名,但在 XP 上只给出了不合格的名称。想要适用于两者的代码。谢谢。
    • @CincinnatiJoe:奇怪的是,新旧版本在我位于密歇根州内部网络上的 WinXP SP3 工作机器上的工作方式相同。我已更新答案以仍显示旧版本,以防出现您遇到的问题。
    • 实际上,我是说旧方法在 XP 上无法正常工作。对修改后的方法进行了快速尝试,但它在 XP 上似乎也不起作用。两者都可以在 Win7 上找到。所以可能需要另一种解决方案来获得 XP 上的限定名称。
    【解决方案2】:

    我使用了这个非常相似的方法:

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

    【讨论】:

      【解决方案3】:

      如果上述方法不行,你也可以尝试从环境中取回:

      var dnsName = new StringBuilder();
      dnsName.Append(Environment.GetEnvironmentVariable("COMPUTERNAME")).Append(".");
      dnsName.Append(Environment.GetEnvironmentVariable("USERDNSDOMAIN"));
      

      【讨论】:

      • 这可能不起作用 - USERDNSDOMAIN 可能与机器所属的域不同。
      猜你喜欢
      • 2014-01-14
      • 2010-10-05
      • 2013-01-17
      • 2023-03-20
      • 2023-03-15
      • 2014-06-28
      • 2020-09-07
      • 2012-07-19
      • 2017-12-01
      相关资源
      最近更新 更多