Tengo un código en una aplicación asp.net que necesita obtener la dirección ipv4 de la computadora cliente (los usuarios están todos en nuestra propia red). Recientemente hemos actualizado el servidor en el que se ejecuta la aplicación al servidor de Windows 2008. Ahora el código Request.UserHostAddress devuelve el ipv4 cuando el cliente está en un sistema operativo anterior e ipv6 cuando están en un sistema operativo más nuevo (Vista y superior). Entonces la característica que se basa en esto funciona para algunos clientes y no para otros.Problema Convertir ipv6 a ipv4
Agregué un código que se supone que convierte de ipv6 a ipv4 para intentar solucionar este problema. Es a partir de este tutorial en línea: http://www.4guysfromrolla.com/articles/071807-1.aspx .I'm usando dsn.GetHostAddress y luego bucle a través de las direcciones IP devueltas buscando uno que es "Red Virtual"
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
El problema es que esto no está funcionando para mí. Los clientes que se conectan desde ipv4 continúan devolviendo la dirección IP IPv4 correcta de la computadora cliente, pero los clientes que se conectan desde Vista y Windows 7 devuelven la dirección IP ipv4 de la máquina SERVER, no la computadora cliente.
He visto este código de muestra repetido en muchos blogs. Estoy sorprendido ya que es tan malo ... parte 1, obtener la dirección IP del cliente. Si eso falla, devuelva la dirección IP del servidor. wtf?!? –
Sí, acabo de encontrar el mismo ejemplo aquí: http://www.4guysfromrolla.com/articles/071807-1.aspx. Si nada más, usar 'ToString()' para verificar la igualdad enum parece que fue escrito por un novato .NET total. – Groo