2010-01-12 5 views
1

comment obtenir le nom d'hôte de tous les systèmes LAN en utilisant C# .netcomment obtenir le nom d'hôte de tous les systèmes LAN en utilisant C# .net

par commande « net view » je suis obtenir certains systèmes noms d'hôte, pas en mesure d'accéder tous les systèmes, même s'ils sont dans le réseau local. pourquoi donc?

+0

Que voulez-vous dire par « systèmes LAN » et qu'est-ce que vous essayez de faire? La liste de tous les ordinateurs de domaine est disponible via Active Directory. 'net view' interroge cette information, utilisez les mêmes API que vous le feriez par exemple: ADSI. Si vous ne voyez pas un ordinateur avec net view, cela peut signifier que vous n'avez pas l'autorisation de le voir, qu'il ne fait pas partie du domaine ou qu'il ne s'agit même pas d'un ordinateur, par exemple une imprimante. –

Répondre

1

Essayez ceci: (Pour aucun répertoire actif)

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

Juste une petite suggestion, serait-il conseillé d'utiliser une boucle for au lieu d'une boucle while? Comme dans (int i = 0; i

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

Pourriez-vous élaborer davantage votre réponse en ajoutant un peu plus de détails sur la solution que vous fournissez? – abarisone

+0

Ajout du code complet pour récupérer tous les noms d'hôtes. – Arvind

+0

Une solution plus complexe pourrait être d'itérer sur toutes les interfaces réseau de la machine et aller chercher les noms d'hôtes. – Arvind

Questions connexes