2010-01-12 58 views
1

如何使用C#.NET如何使用C#.NET

通过“网络视图”命令我得到一些系统的主机名,没能获得让所有LAN系统的主机名来获取所有LAN系统的主机名所有的系统,即使他们在局域网中。为什么这样?

+0

你所说的“LAN系统”和你有什么做的呢?所有域计算机的列表都可以通过Active Directory获得。 'net view'查询信息,使用相同的API,例如:ADSI。如果您没有看到具有“网络视图”的计算机,则可能表示您没有权限查看该计算机,它不属于该域的一部分,或者甚至不是计算机,例如打印机。 – 2015-06-12 06:46:19

回答

1

试试这个:(对于无活动目录)

public static int GetAllIPAndHostNames() 
     { 
      string strHostName; 

      // Getting Ip address of local machine... 
      // First get the host name of local machine. 
      strHostName = Dns.GetHostName(); 
      Console.WriteLine("Local Machine's Host Name: " + strHostName); 

      IPHostEntry remoteIP; 

      //using host name, get the IP address list.. 
      IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
      IPAddress[] addr = ipEntry.AddressList; 

      int i = 0; 
      while (i < addr.Length) 
      { 
       Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
       //HostNames 
       remoteIP = Dns.GetHostEntry((addr[i])); 
       Console.WriteLine("HostName {0}: {1} ", i, remoteIP.HostName); 
       i++; 
      } 
      return 0; 
     } 
+1

只是一个小建议,是否会建议使用for循环而不是while循环?如for(int i = 0; i 2010-01-12 11:37:32

0
private static List<String> getAllHostNames() 
    { 
     List<String> hostNames = new List<String>(); 
     IPAddress[] ipaddress = Dns.GetHostAddresses(Dns.GetHostName()); 
     String hname; 

     foreach (IPAddress ip in ipaddress) 
     { 
      //if ipv4 
      if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
      { 
       hname = Dns.GetHostEntry(ip).HostName.ToLower(); 
       if (!hostNames.Contains(hname)) 
       { 
        hostNames.Add(hname); 
       } 
      } 
     } 
     return hostNames; 
    } 
+0

您能否详细说明您的答案,并添加关于您提供的解决方案的更多描述? – abarisone 2015-06-12 06:38:48

+0

添加完整代码以获取所有主机名。 – Arvind 2015-06-12 07:21:54

+0

更复杂的解决方案可能是遍历机器的所有networkInterfaces并获取主机名。 – Arvind 2015-06-12 07:23:30