2009-12-19 12 views
25

En la sección de propiedades de mi tarjeta de red, en Windows Server 2008, tengo IPV6 deshabilitado, dejando solo IPV4 habilitado.IIS Request.UserHostAddress devolviendo IPV6 (:: 1), incluso cuando IPV6 está deshabilitado

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

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

+0

Si está leyendo esto hoy, años después de su publicación original, este es un anuncio de servicio público: en última instancia, tendrá que hacer que su programa funcione con IPv6. A partir de Server 2008/Vista, la desactivación de IPv6 en Windows no está comprobada ni respaldada por Microsoft, quien considera que IPv6 es una parte obligatoria de Windows. –

Respuesta

22

Si se está conectando a localhost (:: 1/127.0.0.1), no está utilizando la tarjeta de red que tiene su servidor, sino más bien como una tarjeta virtual que tiene Windows. No creo que de todos modos haya que configurar la tarjeta loopback y eliminar IPv6 de ella, no sin quitar soporte de todo el sistema, pero en Win2008 probablemente ya no puedas hacer eso.

Puede verificar que su tarjeta física no se está utilizando ejecutando utilidades de captura de paquetes de red. En Windows, nunca se puede detectar el tráfico que recorre la tarjeta virtual de bucle invertido.

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

28

Los 4 chicos de la página web Rolla tiene una solución here, que he usado 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(); 
} 
+0

Solución limpia, no requiere un cambio de configuración, funciona en una máquina local. –

4
  1. Ir a Inicio -> haga clic en Panel de control -> haga clic en View network status and tasks en la ventana del Panel de control -> haga clic en change adapter settings en la ventana Network and Sharing Center.

  2. Network Connections ventana aparecerá. Aquí, haga clic con el botón derecho en network adapter (puede ser un adaptador inalámbrico o un adaptador Ethernet con cable) que desea deshabilitar IPv6 y haga clic en Properties.

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

  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 tiene que escribir ffffffff). Esto deshabilitará todas las funciones de IPv6 excepto la interfaz de bucle invertido IPv6, finalmente haga clic en OK.

  6. Reinicia la computadora.