IIS Request.UserHostAddress regresar IPV6 (:: 1), incluso cuando IPV6 discapacitados

StackOverflow https://stackoverflow.com/questions/1932843

  •  20-09-2019
  •  | 
  •  

Pregunta

En la sección de propiedades de mi tarjeta de red, el servidor de Windows 2008, tengo IPV6 discapacitados, dejando sólo permitió IPV4.

Sin embargo, en ASP.NET, Request.UserHostAddress vuelve ':: 1', una dirección IPv6.

¿alguien tiene alguna idea de cómo volver a IPV4?

¿Fue útil?

Solución

Si se conecta al servidor local (:: 1 / 127.0.0.1), no se está usando la tarjeta de red que su servidor tiene, sino más bien como una tarjeta virtual que tiene ventanas. Creo que no hay de todos modos para configurar la tarjeta de bucle de retorno y la eliminación de IPv6 de ella, no sin retirar el apoyo de todo el sistema, pero en Win2008 es probable que no puedo hacerlo más.

Puede verificar que la tarjeta física no está siendo utilizado mediante la ejecución de paquetes de red captura de utilidades. En las ventanas, nunca se puede olfatear el tráfico que se acerca la tarjeta de bucle virtual.

Dicho esto, en caso de que el acceso desde una máquina diferente (a través de una conexión que se pasa a través de su tarjeta física), debería ver una dirección IPv4 ser devuelto por Request.UserHostAddress

Otros consejos

Los 4 chicos de la página web Rolla tiene una solución aquí , que he utilizado en mi aplicación .

Actualización:

Sólo en caso de este enlace se agota, aquí está el código basado en este enlace:

public string GetIpAddress()
{
    string ipAddressString = HttpContext.Current.Request.UserHostAddress;

    if (ipAddressString == null)
        return null;

    IPAddress ipAddress;
    IPAddress.TryParse(ipAddressString, out ipAddress);

    // If we got an IPV6 address, then we need to ask the network for the IPV4 address 
    // This usually only happens when the browser is on the same machine as the server.
    if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
    {
        ipAddress = System.Net.Dns.GetHostEntry(ipAddress).AddressList
            .First(x => x.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork);
    }

    return ipAddress.ToString();
}
  1. Ir a Inicio -> haga clic en Panel de control -> haga clic en View network status and tasks en la ventana Panel de control -.> Haga clic en change adapter settings en la ventana Network and Sharing Center

  2. aparecerá la ventana Network Connections. Aquí hace clic derecho en el network adapter (puede ser adaptador inalámbrico o un adaptador Ethernet cableada) que desea desactivar IPv6 y haga clic en Properties.

  3. En la ventana network adapter properties, Internet Protocol Version 6 (TCP/IPv6) untick y haga clic en OK.

  4. Tipo regedit en línea de comandos para iniciar el Editor del Registro, proceda a localizar siguiente elemento de registro en el editor del registro.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents
    
  5. Si el artículo DisabledComponents no está disponible, se debe crear en formato siguiente yendo a Editar -> Nuevo -> Valor de DWORD (32 bits) y establecer el valor de 0xffffffff (sólo escriba ffffffff). Esto desactivará todas las características de IPv6, excepto la interfaz de bucle invertido de IPv6, finalmente, haga clic OK.

  6. Reiniciar el equipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top