1

.net 2.0 中有没有办法发现运行我的代码的机器的网络别名?具体来说,如果我的工作组将我的机器视为 //jekkedev01,我如何以编程方式检索该名称?

4

5 回答 5

2

由于您可以有多个网络接口,每个网络接口可以有多个 IP,并且任何单个 IP 可以有多个可以解析到它的名称,因此可能不止一个。

如果你想知道你的 DNS 服务器知道你的机器的所有名称,你可以像这样遍历它们:

public ArrayList GetAllDnsNames() {
  ArrayList names = new ArrayList();
  IPHostEntry host;
  //check each Network Interface
  foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) {
    //check each IP address claimed by this Network Interface
    foreach (UnicastIPAddressInformation i in nic.GetIPProperties().UnicastAddresses) {
      //get the DNS host entry for this IP address
      host = System.Net.Dns.GetHostEntry(i.Address.ToString());
      if (!names.Contains(host.HostName)) {
        names.Add(host.HostName);
      }
      //check each alias, adding each to the list
      foreach (string s in host.Aliases) {
        if (!names.Contains(s)) {
          names.Add(s);
        }
      }
    }
  }
  //add "simple" host name - above loop returns fully qualified domain names (FQDNs)
  //but this method returns just the machine name without domain information
  names.Add(System.Net.Dns.GetHostName());

  return names;
}
于 2008-10-27T10:14:46.683 回答
1

如果您需要计算机描述,它存储在注册表中:

  • 钥匙:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
  • 值名称:srvcomment
  • 数据类型:REG_SZ (string)

AFAIK 它与任何域服务器或 PC 所连接的网络无关。

对于与网络相关的任何内容,我使用以下内容:

  • NETBIOS 名称:System.Environment.MachineName
  • 主机名:System.Net.Dns.GetHostName()
  • DNS 名称:System.Net.Dns.GetHostEntry("LocalHost").HostName

如果 PC 有多个 NETBIOS 名称,我不知道任何其他方法,只能根据它们解析到的 IP 地址对名称进行分组,如果 PC 有多个网络接口,即使这样也不可靠。

于 2008-10-23T09:08:13.690 回答
1

我不是 .NET 程序员,但System.Net.DNS.GetHostEntry方法看起来像您需要的。它返回包含 Aliases 属性的IPHostEntry的实例。

于 2008-10-23T20:43:42.147 回答
0

使用System.Environment类。它有一个用于检索机器名称的属性,该名称是从 NetBios 中检索的。除非我误解了你的问题。

于 2008-09-12T18:46:59.627 回答
0

或 My.Computer.Name

于 2008-09-12T19:12:00.177 回答