ホームページ  >  記事  >  Java  >  Javaでクライアントの実際のIPアドレスを取得する方法

Javaでクライアントの実際のIPアドレスを取得する方法

WBOY
WBOY転載
2023-05-10 11:46:051437ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。