c# asp.net ipv6 ipv4

c# - IIS Request.UserHostAddress que devuelve IPV6(:: 1), incluso cuando IPV6 está deshabilitado



asp.net ipv4 (3)

En la sección de propiedades de mi tarjeta de red, en Windows Server 2008, tengo IPV6 deshabilitado, dejando solo IPV4 habilitado.

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

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


  1. Vaya 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. Aparecerá la ventana de Network Connections . Aquí, haga clic derecho en el network adapter (puede ser un adaptador inalámbrico o un adaptador Ethernet con cable) en el que desea desactivar IPv6 y haga clic en Properties .

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

  4. Escriba regedit en el símbolo del sistema para iniciar el editor de registro, proceda a localizar el siguiente elemento de registro en el editor de registro.

    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip6/Parameters/DisabledComponents

  5. Si el elemento DisabledComponents no está disponible, debe crearlo en el siguiente formato yendo a Editar -> Nuevo -> Valor DWORD (32 bits) y establecer el valor en 0xffffffff (solo escriba ffffffff ). Esto deshabilitará todas las funciones de IPv6, excepto la interfaz de bucle invertido de IPv6, finalmente haga OK en OK .

  6. Reinicia la computadora.


El sitio web de 4 Guys from Rolla tiene una solución here , que he usado en mi aplicación.

Actualizar:

En caso de que este enlace se detenga, aquí hay un 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(); }


Si se está conectando a localhost (:: 1 / 127.0.0.1), no está utilizando la tarjeta de red que tiene su servidor, sino como una tarjeta virtual que tiene windows. No creo que haya una forma de configurar la tarjeta de bucle invertido y eliminar IPv6 de ella, no sin eliminar el soporte de todo el sistema, pero en Win2008 probablemente ya no pueda hacer eso.

Puede verificar que su tarjeta física no esté siendo utilizada ejecutando utils de captura de paquetes de red. En Windows, nunca puede detectar el tráfico que recorre la tarjeta de bucle virtual.

Dicho esto, si accede desde una máquina diferente (a través de una conexión que pasará a través de su tarjeta física), debería ver una dirección IPv4 devuelta por Request.UserHostAddress