Question

Existe-t-il un moyen dans .net 2.0 de découvrir l'alias réseau de la machine sur laquelle mon code s'exécute ?Plus précisément, si mon groupe de travail voit ma machine comme //jekkedev01, comment puis-je récupérer ce nom par programme ?

Était-ce utile?

La solution

Étant donné que vous pouvez avoir plusieurs interfaces réseau, chacune d'entre elles pouvant avoir plusieurs adresses IP, et qu'une seule adresse IP puisse avoir plusieurs noms pouvant y être résolus, il peut y en avoir plusieurs.

Si vous souhaitez connaître tous les noms sous lesquels votre serveur DNS connaît votre machine, vous pouvez tous les parcourir comme ceci :

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;
}

Autres conseils

Si vous avez besoin de la description de l'ordinateur, elle est stockée dans le registre :

  • clé: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters
  • nom de la valeur : srvcomment
  • Type de données: REG_SZ (string)

AFAIK, cela n'a rien à voir avec un serveur de domaine ou avec le réseau auquel le PC est connecté.

Pour tout ce qui concerne le réseau, j'utilise ce qui suit :

  • Nom NETBIOS : System.Environment.MachineName
  • nom d'hôte : System.Net.Dns.GetHostName()
  • Nom DNS : System.Net.Dns.GetHostEntry("LocalHost").HostName

Si le PC a plusieurs noms NETBIOS, je ne connais pas d'autre méthode que de regrouper les noms en fonction de l'adresse IP à laquelle ils se résolvent, et même cela n'est pas fiable si le PC dispose de plusieurs interfaces réseau.

Je ne suis pas un programmeur .NET, mais le System.Net.DNS.GetHostEntry la méthode ressemble à ce dont vous avez besoin.Il renvoie une instance de Entrée IPHôte classe qui contient le Alias propriété.

Utilisez le Système.Environnement classe.Il possède une propriété permettant de récupérer le nom de la machine, qui est récupéré à partir de NetBios.Sauf si je comprends mal votre question.

ou Mon.Ordinateur.Nom

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top