JSP

2012-07-27 20 views
6

adresindeki istemcinin IP adresini alın JSP sayfasındaki istemcinin IP adresini almalıyım. Aşağıdaki yolları denedi: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") 

Ancak, bu yollardan hiçbiri istenilen IP adresini döndürür yaptı. JSP sayfasında müşterinin IP adresini nasıl alabilirim?

+0

Özel başlık kullanırsanız, her zaman bunlara "X-" adını verin. –

+0

'request.getRemoteAddr()' ne döndürür? – Jeshurun

+0

Ayrıca bkz. [This] (http://stackoverflow.com/q/1423347/473637) sorusu. – Jeshurun

cevap

0

Apache Proxy gibi ters proxy kullanıyor musunuz? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

(örneğin, ProxyPasskomutunu kullanılarak), bir ters-vekil modunda hareket, mod_proxy_http kaynak sunucusundan bilgi aktarmak amacıyla çeşitli istek başlıkları ekler. Bu başlıklar şunlardır: Bir müşteri bir proxy arkasında ise

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

Sunucu ve istemci arasında Proxy kullanılmaz. X-Forwarded-For, X-Forwarded-Host, X-Forwarded-Server kullanılmaya başlanan tüm Değerler, vekil null nedeni vermiyor. –

+0

Eğer ters bir proxy kullanmıyorsanız, sadece http servlet API - httpServletRequest.getRemoteHost() ve getRemotePOrt() http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html adresini kullanın. –

+0

httpServletRequest'te, Müşterinin IP'sini sağlayacak hiçbir şey yok. Bütün API'yi kontrol ettim. –

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

Gerçek istemci IP alamayabilirsiniz, sen vekil değil müşteri IP'sini alacak. Bununla birlikte, vekil talep eden müşteri IP'sini özel bir HTTP başlığında içerebilir.

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

İstemci ve istenen sunucu arasında hiçbir proxy yapılandırılmadığında istemcinin IP'sini alma. –

+0

[link] (http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress) Bu gönderiyi gör. – kinaesthesia

+0

çıktısı 0: 0: 0: 0: 0: 0: 0: 1 gibi geliyor. –

3

Uygulama sunucunuz bir yük dengeleyicisinin, bir proxy'nin veya bir web sunucusunun arkasında mı? Sadece bir örnek; F5 yük dengeleyici "rlnclientipaddr" başlığıyla istemci IP adresini gösterir:

request.getHeader("rlnclientipaddr"); 
2

istemcinin IP adresini almak için, aşağıdaki yöntemi

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

Umut kullandım bu, lütfen yardımcı olur geri besleme bırakmak.