Pregunta ¿Cómo encontrar el FQDN de la máquina local en C # /. NET?


¿Cómo se puede obtener el FQDN de una máquina local en C #?


78
2018-04-29 23:08


origen


Respuestas:


NOTA: Esta solución solo funciona cuando se apunta a los frameworks .NET 2.0 (y más nuevos).

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
}

ACTUALIZAR

Dado que muchas personas han comentado que La respuesta de Sam es más conciso que he decidido agregar algunos comentarios a la respuesta.

Lo más importante a tener en cuenta es que el código que di es no equivalente al siguiente código:

Dns.GetHostEntry("LocalHost").HostName

Mientras que en el caso general cuando la máquina está en red y es parte de un dominio, ambos métodos generalmente producirán el mismo resultado, en otros escenarios los resultados serán diferentes.

Un escenario donde la salida será diferente es cuando la máquina no es parte de un dominio. En este caso, el Dns.GetHostEntry("LocalHost").HostName regresará localhost mientras que la GetFQDN() El método anterior devolverá el nombre de NETBIOS del host.

Esta distinción es importante cuando el propósito de encontrar el FQDN de la máquina es registrar información o generar un informe. La mayoría de las veces he utilizado este método en registros o informes que se utilizan posteriormente para mapear información a una máquina específica. Si las máquinas no están conectadas a la red, localhost el identificador es inútil, mientras que el nombre proporciona la información necesaria.

Por lo tanto, en última instancia, depende de cada usuario cuál es el método más adecuado para su aplicación, dependiendo del resultado que necesite. Pero decir que esta respuesta es incorrecta por no ser lo suficientemente conciso es superficial en el mejor de los casos.

Vea un ejemplo donde la salida será diferente: http://ideone.com/q4S4I0


124
2018-04-29 23:12



Una ligera simplificación del código de 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



Esto está cubierto por Este artículo. Esta técnica es más breve que la respuesta aceptada y probablemente más confiable que la siguiente respuesta más votada. Tenga en cuenta que, por lo que yo entiendo, esto no lo hace use nombres NetBIOS, por lo que debería ser adecuado para el uso de Internet.

.NET 2.0+

Dns.GetHostEntry("LocalHost").HostName

.NET 1.0 - 1.1

Dns.GetHostByName("LocalHost").HostName

18
2018-06-13 05:14



Aquí está en PowerShell, por el gusto de hacerlo:

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

16
2017-09-14 19:26



Y para Framework 1.1 es tan simple como esto:

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

Y luego elimine el nombre NETBIOS de la máquina para recuperar solo el nombre de dominio


15
2018-05-14 10:29



Puedes probar lo siguiente:

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

Esto debería darle el FQDN de la máquina local actual (o puede especificar cualquier host).


8
2018-01-24 20:12



Una ligera mejora en la respuesta de Matt Z para que no se devuelva un punto final final si la computadora no es miembro de 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



Utilicé esto como una de mis opciones para combinar el nombre de host y el nombre de dominio para crear un informe, agregué el texto genérico para completar cuando no se capturó el nombre de dominio, este era uno de los requisitos del cliente.

Probé esto usando C # 5.0, .Net 4.5.1

private static string GetHostnameAndDomainName()
{
       // if No domain name return a generic string           
       string currentDomainName = IPGlobalProperties.GetIPGlobalProperties().DomainName ?? "nodomainname";
       string hostName = Dns.GetHostName();

    // check if current hostname does not contain domain name
    if (!hostName.Contains(currentDomainName))
    {
        hostName = hostName + "." + currentDomainName;
    }
    return hostName.ToLower();  // Return combined hostname and domain in lowercase
} 

Construido usando ideas de la solución de Miky Dinescu.


2
2018-05-16 17:04