Obtener la IP de conexión de un usuario (aunque entre con un proxy)

El otro día me hicieron una pregunta muy común que es “¿cómo puedo obtener la dirección IP de los usuarios que se conectan a mi aplicación Web ASP.NET?”


La respuesta es directa y sencilla: usando la variable HTTP_CLIENT-IP de las cabeceras del servidor, a través del objeto Request así:



Request.ServerVariables{“HTTP_CLIENT-IP”]


Más fácil imposible.


Sin embargo hay una cuestión que no todo el mundo tiene controlada y es que muchos usuarios acceden a Internet a través de un proxy, y la mayor parte de las veces ni siquiera lo saben. Ello es debido a que algunos proveedores de acceso a Internet (por ejemplo Telefónica en España) para ahorrar ancho de banda utilizan proxies-caché que actúan de hombre en el medio a la hora de acceder a las páginas de Interenet. Si no lo tenemos en cuenta podemos llevarnos más d eun disgusto en nuestras aplicaciones, sobre todo si creemos que con la cabecera anterior ya tenemos la IP del usuario, ya que en realidad obtendremos la IP del Proxy.


¿Cómo obtenemos entonces la verdadera dirección IP del usuario?


Pues también muy fácil, aunque hay que saberlo, claro :-) Hay que consultar otra cabecera y ver si contiene algún valor. Se trata de HTTP_X-Forwarded-For, así:



Request.ServerVariables(“HTTP_X-Forwarded-For”)


Así, por ejemplo, la siguiente página (a pelo, directamente el código en ella) nos sirve para indicar si un usuario accede a través de un proxy o no y cuáles son las IPs que intervienen en el proceso:



IP que hace la petición: <%= Request.ServerVariables(“REMOTE_ADDR”) %>
<br>
<%
Dim ClientIP, Forwaded, RealIP


RealIP = “”


ClientIP = Request.ServerVariables(“HTTP_CLIENT-IP”)
If ClientIP <> “” Then
 RealIP = ClientIP
Else
 Forwaded = Request.ServerVariables(“HTTP_X-Forwarded-For”)
 If Forwaded <> “” Then RealIP = Forwaded
End If


If RealIP <> “” Then
 Response.Write(“El usuario está accediendo a través de un Proxy. Su verdadera dirección IP es: ” + RealIP)
End If
%>


Por cierto: esta página tiene una particularidad y es que si cambiamos su extensión a .asp o a .aspx funcionará tanto en ASP clásico como en cualquier versión de ASP.NET.


Espero que a alguien le resulte de utilidad :-)

Sin categoría

9 thoughts on “Obtener la IP de conexión de un usuario (aunque entre con un proxy)

  1. He usado las ServerVariables en asp.net para obtener la direccion IP del Cliente y no funciona.

    Siempre retorna la IP del Proxy.

    HTTP_X-Forwarded-For siempre retorna Vacio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *