2010-01-12 89 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