2012-07-27 55 views
6

Necesito obtener la dirección IP del cliente en la página JSP. He intentado de las siguientes maneras:Obtener la dirección IP del cliente en JSP

request.getRemoteAddr() 
request.getHeader("X_FORWARDED_FOR") 
request.getHeader("HTTP_CLIENT_IP") 
request.getHeader("WL-Proxy-Client-IP") 
request.getHeader("Proxy-Client-IP") 
request.getHeader("REMOTE_ADDR") 

Sin embargo, ninguna de esas formas devolvió la dirección IP deseada. ¿Cómo obtengo la dirección IP del cliente en la página JSP?

+0

Si usa un encabezado personalizado, denomínelos siempre 'X-'. –

+0

¿Qué devuelve 'request.getRemoteAddr()'? – Jeshurun

+0

Consulte también [este] (http://stackoverflow.com/q/1423347/473637) pregunta. – Jeshurun

Respuesta

0

¿utiliza el proxy inverso como apache proxy? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Al actuar en un modo de proxy inverso (usando la directiva ProxyPass, por ejemplo), mod_proxy_http añade varias cabeceras de petición con el fin de pasar información al servidor de origen. Estas cabeceras son:

X-Forwarded-For 
The IP address of the client. 
X-Forwarded-Host 
The original host requested by the client in the Host HTTP request header. 
X-Forwarded-Server 
The hostname of the proxy server. 
+0

No se utiliza ningún Proxy entre el servidor y el cliente. Todos los valores que obtienen usando X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Server están dando una causa nula de proxy no se utiliza. –

+0

si no está usando ningún proxy inverso, simplemente marque el uso de http servlet API - httpServletRequest.getRemoteHost() y getRemotePOrt() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html –

+0

No hay nada presente en httpServletRequest que me proporcione la IP del cliente. He revisado todo el API. –

3
<% 
out.print(request.getRemoteAddr()); 
out.print(request.getRemoteHost()); 
%> 

usted no puede conseguir el verdadero cliente IP si un cliente está detrás de un proxy, obtendrá la IP del proxy y no el cliente. Sin embargo, el proxy puede incluir la IP del cliente solicitante en un encabezado HTTP especial.

<% 
out.print(request.getHeader("x-forwarded-for")); 
%> 
+0

Pero cómo obtener la IP del cliente cuando no se configura ningún proxy entre el cliente y el servidor solicitado. –

+0

[link] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) Ver esta publicación. – kinaesthesia

+0

salida viene como 0: 0: 0: 0: 0: 0: 0: 1 ¿tienes alguna idea de por qué? –

3

¿Su servidor de aplicaciones está detrás de un equilibrador de carga, un proxy o un servidor web? Solo un ejemplo; Equilibrador de carga F5 expone la dirección IP del cliente con el "rlnclientipaddr" cabecera:

request.getHeader("rlnclientipaddr"); 
2

para obtener la dirección IP del cliente, he utilizado el siguiente método

<% String ip = request.getHeader("X-Forwarded-For"); 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("WL-Proxy-Client-IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_CLIENT_IP"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
     } 
     if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
      ip = request.getRemoteAddr(); 
     } 
     %> 

Espero que esto ayude, por favor deja una retroalimentación.

Cuestiones relacionadas