2012-07-27 69 views
6

JSPページでクライアントのIPアドレスを取得する必要があります。私は次の方法を試みました:JSPでクライアントのIPアドレスを取得する

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") 

しかし、それらの方法では、目的のIPアドレスを返しませんでした。 JSPページでクライアントのIPアドレスを取得するにはどうすればよいですか?

+0

カスタムヘッダーを使用する場合は、必ず「X-」と名前を付けます。 –

+0

'request.getRemoteAddr()'は何を返しますか? – Jeshurun

+0

[this](http://stackoverflow.com/q/1423347/473637)の質問も参照してください。 – Jeshurun

答えて

0

apache proxyのようなリバースプロキシを使用していますか? http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

たとえば、ProxyPassディレクティブを使用して逆プロキシモードで動作する場合、mod_proxy_httpはオリジンサーバーに情報を渡すためにいくつかのリクエストヘッダーを追加します。これらのヘッダは次のとおりです。

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

サーバーとクライアントの間にプロキシは使用されません。すべての値はX-Forwarded-For、X-Forwarded-Host、X-Forwarded-Serverを使用して取得していますが、プロキシのnull原因は使用されていません。 –

+0

リバースプロキシを使用していない場合は、httpサーブレットAPI - httpServletRequest.getRemoteHost()およびgetRemotePOrt()を使用してチェックしてください。http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html –

+0

httpServletRequestにはクライアントのIPを提供するものはありません。私はAPI全体をチェックしました。 –

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

あなたは、クライアントがプロキシの背後にある場合は、プロキシのIPではなく、クライアントを取得します実際のクライアントIPを取得できない場合があります。しかし、プロキシは要求元のクライアントIPを特別なHTTPヘッダーに含めることができます。

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

しかし、クライアントと要求されたサーバーの間にプロキシが設定されていない場合、クライアントのIPを取得する方法。 –

+0

[リンク](http://stackoverflow.com/questions/1423347/problem-with-jsp-getremoteaddress)この記事を参照してください。 – kinaesthesia

+0

出力は0:0:0:0:0:0:0:1のようになります。 –

3

アプリケーションサーバーは、ロードバランサ、プロキシまたはWebサーバーの後ろにありますか?ほんの一例。 F5ロードバランサは、「rlnclientipaddr」ヘッダを使用してクライアントのIPアドレスを公開します。クライアントのIPアドレスを取得するには

request.getHeader("rlnclientipaddr"); 
2

を、私は次のメソッドを使用しました、これは役立ちます

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

希望、 ください。フィードバックを返す。

関連する問題