在.net中查找网络别名

时间:2008-09-12 18:40:05

标签: networking .net-2.0 alias

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

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

  • key: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有多个网络接口,这甚至不可靠。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

使用System.Environment课程。它具有用于检索从NetBios检索的计算机名称的属性。除非我误解你的问题。

答案 4 :(得分:0)

或My.Computer.Name