2011-11-16 21 views
6

Tengo un par de nombres de host que necesito para comparar y saber si ellos representan el mismo host, por ejemplo:¿Cómo comparar correctamente los nombres de host

localhost 
127.0.0.1 
machineName 

¿Cuál es la manera más confiable de hacerlo en C# ? Por ahora lo estoy haciendo como: manejo de direcciones de host formación de error

private bool CompareHosts(string host1, string host2) 
    { 
      UriBuilder builder1 = new UriBuilder(); 
      builder1.Host = Dns.GetHostAddresses(host1)[0].ToString(); 
      var uri1 = builder1.Uri; 

      UriBuilder builder2 = new UriBuilder(); 
      builder2.Host = Dns.GetHostAddresses(host2)[0].ToString(); 
      var uri2 = builder2.Uri; 

      return Uri.Compare(uri1, uri2, UriComponents.Host, 
        UriFormat.Unescaped, StringComparison.OrdinalIgnoreCase) == 0; 
    } 

yo no he incluido, pero no estoy seguro de qué hacer si se va a volver más de una dirección, significa que ellos representarán diferentes máquinas? ¿Hay alguna forma mejor de compararlos? Necesito comprobar que esos hosts se refieren a la misma máquina.

+2

No se olvide de ':: 1' y' 0: 0: 0: 0: 0: 0: 0: 1' también; p –

+0

Es correcto que un solo nombre de host puede tener múltiples direcciones IP; considere el caso de una PC con 5 tarjetas de red ... Consulte http://support.microsoft.com/kb/110703 para obtener una confirmación. –

+0

@RB - Menos raro que 5 tarjetas de red sean simplemente que se hayan asignado múltiples direcciones IP a una sola conexión. –

Respuesta

2

La respuesta general es no, si tiene una máquina con 2 tarjetas de red (por ejemplo), no hay forma segura de saber que proviene de la misma máquina, ya que en realidad son 2 elementos de red distintos.

Sin embargo, puede manejar algunos casos especiales como el localhost contra 127.0.0.1 que mencionó.

Cuando obtiene múltiples direcciones IP de la consulta de DNS, generalmente significa que las máquinas NO SON iguales, ya que esta técnica se usa comúnmente para equilibrar la carga entre diferentes máquinas.

En el pasado existían muchas técnicas de pirateo para descubrir si 2 ips son las mismas máquinas, en algunos casos podría obtener el tiempo interno de la máquina o si abrió puertos en un orden consecutivo también podría usar eso. Pero le recomiendo encarecidamente que no vaya de esa manera. Probablemente sea mejor lograr su objetivo sin hacer este control (por ejemplo, si tiene una aplicación web, puede usar cookies fácilmente para esto). Nuevamente, necesita más contexto para ayudar.

+0

Hola @idanzalz, no es una aplicación web, es una aplicación de escritorio donde el usuario puede ingresar un par de hosts (ip o machineName) para diferentes servidores y necesito analizarlos y decir si están en la misma máquina o no – username

+0

¿Qué quieres decir con "analizar"? ¿Tienen algo instalado con el que puedas hablar? conoces los sistemas operativos? Si se trata de una máquina de Windows, probablemente pueda obtener el nombre de la máquina a través de netbios. ¿Puedes controlar/asumir algo en la configuración de la máquina? – idanzalz

+0

La única suposición que puedo hacer es que estas máquinas tienen ventanas instaladas en ellas. Dependiendo de si dos hosts representan la misma máquina, necesito asegurarme de que les proporcione la misma configuración. Pero no compruebo qué software está instalado en las máquinas. – username

Cuestiones relacionadas