JSP では、クライアントの IP アドレスを取得するメソッドは request.getRemoteAddr() で、ほとんどの場合、このメソッドが有効です。ただし、クライアントの実際の IP アドレスは、Apache や Squid などのリバース プロキシ ソフトウェアを介して取得することはできません。
リバース プロキシ ソフトウェアを使用して http://192.168.1.110:2046/ の URL を http://www.javapeixun.com.cn/ の URL にリバース プロキシする場合は、リクエストを使用します。 getRemoteAddr() メソッドによって取得されるアドレスは 127.0.0.1 または 192.168.1.110 であり、クライアントの実際の IP ではありません。
プロキシ後、クライアントとサービスの間に中間層が追加されるため、サーバーはクライアントの IP を直接取得できず、サーバー側アプリケーションは、リクエスト。ただし、転送されるリクエストのHTTPヘッダ情報にはX-FORWARDED-FOR情報が付加されます。元のクライアントの IP アドレスと、元のクライアントによって要求されたサーバー アドレスを追跡するために使用されます。 http://www.javapeixun.com.cn /index.jsp/ にアクセスすると、実際にサーバー上の Index.jsp ファイルに実際にアクセスするのはブラウザではなく、プロキシ サーバーが最初に http:// にアクセスします。 192.168.1.110: 2046/index.jsp、プロキシ サーバーはアクセスされた結果をブラウザに返します。index.jsp にアクセスするのはプロキシ サーバーであるため、index.jsp は request.getRemoteAddr() メソッドを通じて取得されます。IP は実際には、クライアントの IP アドレスではなく、プロキシ サーバーのアドレスです。
これで、クライアントの実際の IP アドレスを取得する最初のメソッドを取得できます:
public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }
しかし、http://www.5a520.cn / にアクセスすると、 Index.jsp /、返される IP アドレスは常に不明であり、上に示したように 127.0.0.1 や 192.168.1.110 ではありません。http://192.168.1.110:2046/index.jsp にアクセスすると、クライアントの IP アドレスが実際の IP アドレスを確認するメソッドを書きました。その理由はイカにあります。デフォルトでは、squid.conf の設定ファイルの forwarded_for 項目は on になっています。 forwarded_for が off に設定されている場合、 :
public String getIpAddr(HttpServletRequest request) { 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.getRemoteAddr(); } return ip; }ただし、マルチレベルのリバース プロキシが渡される場合、その値はX-Forwarded-For の IP 値は 1 つではなく、一連の IP 値です。どれが本当のユーザーエンドですか? IP はどうですか? 答えは、X-Forwarded-For 内の最初の不明でない有効な IP 文字列を取得することです。 ######例えば:
以上がJavaでクライアントの実際のIPアドレスを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。