Domanda Come trovare l'FQDN della macchina locale in C # /. NET?


Come si può ottenere il FQDN di una macchina locale in C #?


78
2018-04-29 23:08


origine


risposte:


NOTA: questa soluzione funziona solo quando si utilizzano i framework .NET 2.0 (e più recenti).

using System;
using System.Net;
using System.Net.NetworkInformation;
//...

public static string GetFQDN()
{
    string domainName = IPGlobalProperties.GetIPGlobalProperties().DomainName;
    string hostName = Dns.GetHostName();

    domainName = "." + domainName;
    if(!hostName.EndsWith(domainName))  // if hostname does not already include domain name
    {
        hostName += domainName;   // add the domain name part
    }

    return hostName;                    // return the fully qualified name
}

AGGIORNARE

Dal momento che molte persone hanno commentato questo La risposta di Sam è più conciso Ho deciso di aggiungere alcuni commenti alla risposta.

La cosa più importante da notare è che il codice che ho dato è non equivalente al seguente codice:

Dns.GetHostEntry("LocalHost").HostName

Mentre nel caso generale quando la macchina è in rete e parte di un dominio, entrambi i metodi generano generalmente lo stesso risultato, in altri scenari i risultati saranno diversi.

Uno scenario in cui l'output sarà diverso quando la macchina non fa parte di un dominio. In questo caso, il Dns.GetHostEntry("LocalHost").HostName sarà di ritorno localhost mentre il GetFQDN() il metodo sopra restituirà il nome NETBIOS dell'host.

Questa distinzione è importante quando lo scopo di trovare il nome FQDN della macchina è di registrare le informazioni o generare un rapporto. La maggior parte delle volte ho usato questo metodo nei log o nei report che vengono successivamente utilizzati per mappare le informazioni su una macchina specifica. Se le macchine non sono collegate in rete, il localhost l'identificatore è inutile, mentre il nome fornisce le informazioni necessarie.

Alla fine spetta a ciascun utente quale metodo sia più adatto alla propria applicazione, a seconda del risultato di cui hanno bisogno. Ma dire che questa risposta è sbagliata per non essere abbastanza concisi è superficiale nella migliore delle ipotesi.

Guarda un esempio in cui l'output sarà diverso: http://ideone.com/q4S4I0


124
2018-04-29 23:12



Una leggera semplificazione del codice di Miky D

    public static string GetLocalhostFqdn()
    {
        var ipProperties = IPGlobalProperties.GetIPGlobalProperties();
        return string.Format("{0}.{1}", ipProperties.HostName, ipProperties.DomainName);
    }

62
2018-05-18 20:58



Questo è coperto da Questo articolo. Questa tecnica è più breve della risposta accettata e probabilmente più affidabile della prossima risposta più votata. Si noti che per quanto ho capito, questo non lo fa usa i nomi NetBIOS, quindi dovrebbe essere adatto per l'uso di Internet.

.NET 2.0+

Dns.GetHostEntry("LocalHost").HostName

.NET 1.0 - 1.1

Dns.GetHostByName("LocalHost").HostName

18
2018-06-13 05:14



Eccolo in PowerShell, per il gusto di farlo:

$ipProperties = [System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()
"{0}.{1}" -f $ipProperties.HostName, $ipProperties.DomainName

16
2017-09-14 19:26



E per Framework 1.1 è semplice come questo:

System.Net.Dns.GetHostByName("localhost").HostName

Quindi rimuovere il nome NETBIOS della macchina per recuperare solo il domainName


15
2018-05-14 10:29



Puoi provare quanto segue:

return System.Net.Dns.GetHostEntry(Environment.MachineName).HostName;

Questo ti darà il FQDN della macchina locale corrente (o puoi specificare qualsiasi host).


8
2018-01-24 20:12



Un leggero miglioramento della risposta di Matt Z in modo che non venga restituito un punto finale completo se il computer non è un membro di un dominio:

public static string GetLocalhostFqdn()
{
    var ipProperties = IPGlobalProperties.GetIPGlobalProperties();
    return string.IsNullOrWhiteSpace(ipProperties.DomainName) ? ipProperties.HostName : string.Format("{0}.{1}", ipProperties.HostName, ipProperties.DomainName);
}

5
2018-02-12 09:15