2012-07-27 13 views
6

Ho bisogno di ottenere l'indirizzo IP del client nella pagina JSP. Ho provato i seguenti modi:Ottieni l'indirizzo IP del client in 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") 

Tuttavia, nessuno di questi modi ha restituito l'indirizzo IP desiderato. Come posso ottenere l'indirizzo IP del client nella pagina JSP?

+0

Se si utilizza l'intestazione personalizzata, denominarli sempre 'X-'. –

+0

Cosa restituisce 'request.getRemoteAddr()'? – Jeshurun

+0

Vedere anche [questo] (http://stackoverflow.com/q/1423347/473637) domanda. – Jeshurun

risposta

0

si utilizza il proxy inverso come proxy apache? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Quando si opera in modalità di proxy inverso (ad esempio, utilizzando la direttiva ProxyPass), mod_proxy_http aggiunge diverse intestazioni di richiesta per passare le informazioni al server di origine. Queste intestazioni sono:

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

Nessun proxy viene utilizzato tra server e client. Tutti i valori che utilizzano X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Server stanno dando una causa netta di proxy non utilizzata. –

+0

se non si utilizza alcun proxy inverso, è sufficiente utilizzare l'API servlet http - httpServletRequest.getRemoteHost() e getRemotePOrt() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html –

+0

Nulla è presente in httpServletRequest che mi fornirà l'IP del client. Ho controllato l'intera API. –

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

Non si può ottenere il vero client IP se un client è dietro un proxy, si otterrà l'IP del proxy e non il cliente. Tuttavia, il proxy può includere l'IP del client richiedente in un'intestazione HTTP speciale.

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

Ma come ottenere l'IP del client quando non è configurato alcun proxy tra il client e il server richiesto. –

+0

[link] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) Vedi questo post. L'uscita – kinaesthesia

+0

viene come 0: 0: 0: 0: 0: 0: 0: 1 hai qualche idea del perché ?? –

3

è il server applicazioni dietro un bilanciatore di carico, un proxy o un server web? Solo un esempio; F5 di bilanciamento del carico espone l'indirizzo IP del client con il "rlnclientipaddr" intestazione:

request.getHeader("rlnclientipaddr"); 
2

per ottenere l'indirizzo IP del client, ho usato il seguente metodo

<% 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(); 
     } 
     %> 

Spero che questo aiuti, si prega di lasciare un feed back.

Problemi correlati