- PR -

Strutsを用いたwebアプリでクライアントのIPアドレスを取得してログに出力したい

投稿者投稿内容
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-07-31 12:24
はじめまして。
java初心者です。
ローカルでTomcatを立ち上げてStrutsフレームワークを使って作った
webアプリケーションを実行しているのですが、
ログを出力させるところで悩んでいます。
Actionクラスの中で
javax.servlet.http.HttpServletRequestクラスのgetRemoteAddr()を使って
IPアドレスを取得してログに出力したいと考えていますが、
どうしても思ったようにIPアドレスが取得できません。

HttpServletRequest req = context.getRequest();
System.out.println("req.getRemoteAddr=" + req.getRemoteAddr());

としてみると、出力される結果が
req.getRemoteAddr=127.0.0.1 となってしまいます。

どうすれば、マシンごとのIPアドレスを正しく取得できるのでしょうか?
ご存知の方、ご教授いただけると嬉しいです。
宜しくお願いします。
latte
常連さん
会議室デビュー日: 2002/11/07
投稿数: 38
投稿日時: 2004-07-31 12:47
実は、
URLを localhost/-----
とかでアクセスしているからだったりして。
ホスト名指定してもダメですか?

[ メッセージ編集済み 編集者: latte 編集日時 2004-07-31 12:48 ]
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-07-31 13:38
URLは
http://localhost:8080/アプリ名・・・・ でアクセスしています。
localhostだとダメなのでしょうか?
他のマシンから私のマシンにアクセスしてもらった時にも、そのマシンのIPアドレスが
出来ません。ルーターのアドレス(?)が取得されるようなのですが
なぜなのでしょうか?
Actionクラスの中でgetRemoteAddr()を書いているのがいけないのでしょうか?
初心者すぎて分からないことだらけですいません。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2004-07-31 14:07
ipconfig等によって確認されたIPアドレスorホスト名に直接アクセスしてみてください。
(ホスト名を指定する場合は、DNSでアドレス解決可能であることが条件です。)

OSのhostsファイルを参照すると確認できますが、
ホスト名"localhost"には"127.0.0.1"というループバックアドレスがマッピング定義されています。
したがって、"localhost"へのアクセスに対するServletRequestのリモートアドレス(RemoteAddr)は、当然"127.0.0.1"になります。

_________________
Kan Ogawa
k-ogawa@users.sourceforge.jp
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-07-31 14:19
latteさん、SuperCreekさん 本当にありがとうございました。
http://ホスト名:8080/アプリ名・・・・ でアクセスしたら、
IPアドレスを取得できました。

http://IPアドレス:8080/アプリ名・・・ でアクセスした時は、
ルータのアドレス(?)か何かが出てしまったのですが、

「nbtstat -a IPアドレス」でホスト名を調べて(http://www.atmarkit.co.jp/fwin2k/win2ktips/087findhostname/087findhostname.html を参考にしました)ホスト名でアクセスしたら、
見事にIPアドレスを取得できました。
昨日からずっと悩んでいたので本当に助かりました。ありがとうございました。


tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-08-01 18:22
もう一つ質問なのですが、
>http://ホスト名:8080/アプリ名・・・・ でアクセスしたら、
>IPアドレスを取得できました。

>http://IPアドレス:8080/アプリ名・・・ でアクセスした時は、
>ルータのアドレス(?)か何かが出てしまったのですが、

について、なぜ ホスト名でアクセスした時と、IPアドレスでアクセスした時に取得できるものが違うのかわかりません。
ご存知の方 教えていただけると嬉しいです。


Goki
会議室デビュー日: 2004/03/02
投稿数: 16
投稿日時: 2004-08-02 16:05
こんにちは。

ネットワーク仕様によって変わるので一遍で言えませんが,
名前解決ができていないためです。

DNSサーバ,Proxyサーバに繋いでいる場合では,
アドレス(localhost)を参照しに行くことになりますが,
当然ながら,このサーバにはlocalhostsを判断できないので
エラーとなります。

詳しく知りたい場合は,ネットワーク管理者に問い合わせるか,
ProxyもしくはDNSサーバの仕様を確認してみてください。
banya
会議室デビュー日: 2004/08/02
投稿数: 2
投稿日時: 2004-08-02 17:31
tomoさんへ、私は自分の会社の中でgetRemoteAddr()を使うIPアドレス取得する場合、マシンごとIPアドレスを取得できます。例え他人のマシンから、http://ホスト:7001を入力したら、こちら側にそのマシンのIPアドレスが表示されます。しかし、会社にはファイアウォールを利用していますから、外から見ると、その会社から外にアクセスするときに、全部ファイアウォールのIP アドレスを見えます。

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