無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

クライアントのIPアドレスを得る

ServletにアクセスしてきたクライアントのIPアドレスを得る方法。

プロキシを介さない場合

ServletRequest#getRemoteAddr()で、アクセスしてきたクライアントのIPアドレスを取得できます。

ServletRequest request = .. 省略 ..

// クライアントのIPアドレス( プロキシを介す場合、プロキシのIPアドレス )
String proxyIp = request.getRemoteAddr();

プロキシを介した場合

ServletRequest#getRemoteAddr()は、プロキシサーバーのIPアドレスを返します。また、プロキシサーバーでクライアントIPアドレスを返す設定がされていれば、環境変数で本来のクライアントのIPアドレスが渡されます。これを解析すればとれなくはないです。

  • ×送信しない設定の場合、当然送信されない。(社内プロキシなんかではセキュリティ的に普通送信しないよなー。)
  • ×プロキシサーバーごとに挙動が異なるため、プロキシごとに解析コードを用意する必要がある。

例えば、squidではHTTP_X_FORWARDED_FOR 環境変数に保存されるので、次のようなコードで取得できます。

ServletRequest request = .. 省略 ..

// プロキシを介してアクセスしたクライアントのIPアドレス
HttpServletRequest hr = (HttpServletRequest) request; 
String clientIp = hr.getHeader( "x-forwarded-for" ); // 多段プロキシの場合を考慮していないので注意。


参考: