- PR -

request.getRemoteAddr()について

1
投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2004-11-23 20:58
サーバ側でアクセスしてきたクライアントのIPを取りたいと思っているのですが
サーバとクライアントの間にルータが挟まっているため
request.getRemoteAddr()
でIPを取得しようとしてもルータのアドレスを取得してしまい、
困っております。

どなたかお力を貸していただけないでしょうか。
よろしくお願いいたします。
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2004-11-24 00:11
クライアント/サーバが自作のものであれば、クライアントが自マシンの IP アドレスを送信するように変更する。
ルータに依存しない点で、条件さえ合えばこれが一番確実です。

ルータによっては設定で何とかなるかもしれません。
設定ではダメでも、機種を変えれば対応しているかもしれません。
機種や環境等がまったく書かれていないのでこれ以上のことは何もわかりませんが。

request という変数の型が書かれていないので勝手に J2EE 1.3.1 の javax.servlet.ServletRequest と解釈しますが、もしもこれで合っていれば getRemoteHost() メソッドを試す方法もあります。
うまくするとクライアントのホスト名ないし IP アドレスが得られるかもしれません。

javax.servlet.HttpServletRequest ならば getHeaderNames() でヘッダを調べてクライアントアドレスがないか見てみる方法もありますが、これはサーブレットコンテナに依存します。つまり、コンテナによってはこれが常に null を返すものがあります。
もう少し具体的な環境等が書かれてあると、より現実的な解が得られるかもしれません。
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-24 12:45
<%@ page import="java.net.*"%>
<%
String ip1 = request.getHeader("x-forwarded-for");
String ip2 = request.getRemoteAddr();

if ( ip1 == null || ip1.length() < 4 ) ip1 = request.getHeader("INTEL_SOURCE_IP");

%>
<%=ip1 %>
<br>
<%=ip2 %>

外部IPと内部IPを取得できます。
※すべてのサーバで出来るのではない。
※mod_proxyが起動中のサーバのみ
※HTTPヘッダを確認してから定義して使用
昔、確実に覚えていませんがどこかで聞きました。
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-11-24 14:54
ルータにより単にNATされただけの場合、クライアントのIPアドレス情報はパケットから完全に失われるので、どうがんばってもクライアントのIPアドレスの取得はできません。(そもそもクライアント−ルータ間がIP網かどうかさえ定かではありません)
これが、HTTPを解釈してくれるようなルータ、もしくはProxyの場合であれば、X-Forwarded-ForヘッダやWL_Proxy-Client-IPヘッダとして、クライアントのIPアドレスを載せてくれたりもします。どのような名称のヘッダが付くかはProxy依存となります。

クライアントのIPアドレスを取得するのが必須要件であるにも関わらずHTTPヘッダに手がかりが何もないのであれば、ルータでNATをしないようにできないかどうかを検討してみてください。
※相手がプライベートアドレスでパケットが送れないためNATする必要がある、ということであれば、ルーティングから見直す必要があります。

[ メッセージ編集済み 編集者: komey 編集日時 2004-11-24 15:24 ]
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2004-11-25 14:36
皆様お返事ありがとうございます。

状況的には
クライアント(127.1.1.2)

ルータ(1.1.1.1)

サーバ(Tomcat)

でサーバでrequest.getHeader("x-fowarded-for")を取得すると
nullが帰ってきてしまいます。

対処方法はあるんでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-25 14:56
大文字小文字の違いではないでしょうか?

本当にヘッダが送られてきているか確認したければパケットキャプチャを行いましょう。
1

スキルアップ/キャリアアップ(JOB@IT)