Comment trouver le nom de domaine complet de l'ordinateur local en C#/.NET ?
Comment pouvez-vous obtenir le nom de domaine complet de l'ordinateur local en C#?
Vous devez vous connecter pour publier un commentaire.
Comment pouvez-vous obtenir le nom de domaine complet de l'ordinateur local en C#?
Vous devez vous connecter pour publier un commentaire.
REMARQUE: Cette solution ne fonctionne que lorsque le ciblage de la .NET 2.0 (et plus récents), cadres.
Mise à JOUR
Puisque beaucoup de gens ont dit qu' La Réponse de Sam est plus concis, j'ai décidé d'ajouter quelques commentaires pour la réponse.
La chose la plus importante à noter est que le code que j'ai donné est pas l'équivalent pour le code suivant:
Alors que dans le cas général, lorsque la machine est en réseau et d'une partie d'un domaine, les deux méthodes produisent le même résultat, dans les autres scénarios, les résultats seront différents.
Un scénario où la sortie seront différentes, c'est quand la machine n'est pas partie d'un domaine. Dans ce cas, le
Dns.GetHostEntry("LocalHost").HostName
sera de retourlocalhost
tandis que leGetFQDN()
méthode ci-dessus, sera de retour le nom NETBIOS de l'ordinateur hôte.Cette distinction est importante lorsque l'objectif est de trouver la machine nom de domaine complet est un journal d'informations, ou de générer un rapport. La plupart du temps, j'ai utilisé cette méthode dans des journaux ou des rapports qui sont ensuite utilisés pour mapper à une machine spécifique. Si les machines ne sont pas en réseau, la
localhost
identificateur est inutile, alors que le nom donne les informations nécessaires.Si, finalement, c'est à chaque utilisateur, quelle méthode est la mieux adaptée à leur demande, en fonction de ce résultat dont ils ont besoin. Mais de là à dire que cette réponse est fausse pour ne pas être concis assez superficiel au mieux.
Voir un exemple où la sortie seront différentes: http://ideone.com/q4S4I0
Dns.GetHostEntry("LocalHost").HostName
, je reçois toujours le nom d'hôte (pas netbios) avec le primaire de suffixe de domaine. Cela ne dépend pas de savoir si la machine fait partie d'un domaine, un serveur DNS est accessible, ou la netzwork est connecté. Probablement que je ne comprends pas votre explication, mais le résultat est ce que j'attends. (La Machine: W2008R2; .net 4.0; netbiosname:NOMTEST-VERYLO nom d'hôte: NOMTEST-VERYLONG)Dns.GetHostName()
pourhostName
au lieu d'utiliser leHostName
propriété de laIPGlobalProperties
objet que vous avez déjà, une ligne au-dessus?IPGlobalProperties
nom d'hôte de la propriété renvoie le nom NetBIOS, alors queDns.GetHostName()
retourne le nom d'hôte DNS.EndsWith
case est cassé pour les noms d'hôtes qui se terminent par les mêmes lettres que le nom de domaine (par exemple, un hôte MYHOST dans le domaine de l'OST), devrait probablement êtreEndsWith("." + domainName)
hostName.
. Il devrait y avoir un!String.isNullorEmpty(domainName)
vérifierUne légère simplification de Miky D du code
.Trim(".")
à la dernière ligne pour se débarrasser de l' . si elle existe.Cela est couvert par cet article. Cette technique est plus bref que l'on a accepté la réponse et probablement plus fiable que la plus-voté réponse. Notez que, comme je le comprends, ce n'est pas utiliser des noms NetBIOS, de sorte qu'il doit être adapté à l'utilisation d'Internet.
.NET 2.0+
.NET 1.0 - 1.1
Dns.GetHostEntry("LocalHost").HostName
mieux vous passez une chaîne vide comme:Dns.GetHostEntry("").HostName
Ici, il est en PowerShell, pour le fun:
Et pour Framework 1.1 est aussi simple que cela:
Puis de supprimer le nom NETBIOS de la machine pour récupérer uniquement le nom de domaine
GetHostByName("localhost")
est obsolète. VS 2010 m'a suggéré d'utiliserGetHostEntry("localhost")
au lieu de cela, ce qui fonctionne très bien.Vous pouvez essayer ce qui suit:
Cela devrait vous donner le nom complet de la machine (ou vous pouvez spécifier n'importe quel hôte).
Une légère amélioration sur Matt Z de la réponse, de sorte qu'une fuite d'arrêt n'est pas retournée si l'ordinateur n'est pas membre d'un domaine:
Utilisé ce que l'un de mes options pour combiner nom d'hôte et nom de domaine pour la construction d'un rapport, a ajouté le générique de texte à remplir lors de nom de domaine n'a pas été capturé, c'était l'une des exigences de clients.
J'ai testé à l'aide de C# 5.0, .Net 4.5.1
Construit en utilisant les idées de Miky Dinescu solution.
Nous avons mis en place résultat suggéré d'utiliser de cette façon:
Cependant, s'est avéré que cela ne fonctionne pas à droite lorsque le nom de l'ordinateur est de plus de 15 caractères et l'utilisation de noms NetBios. L'Environnement.MachineName renvoie seulement une partie du nom et de la résolution de nom d'hôte retourne même nom de l'ordinateur.
Après quelques recherches, nous avons trouvé une solution pour résoudre ce problème:
Cela a résolu tous les problèmes, y compris le nom de l'ordinateur.
Si vous voulez ranger, et de gérer les exceptions, essayez ceci: