- PR -

環境変数 リモートホスト名について

1
投稿者投稿内容
くろ
常連さん
会議室デビュー日: 2004/08/17
投稿数: 42
投稿日時: 2004-08-17 18:23
はじめまして、くろと申します。

調べても、どうしもて分からない問題がありましたので、
ご教授頂きたく、書き込みさせて頂きました。

URL readURL = new URL(getURL);

URLConnection uc = readURL.openConnection();

で、getURLに指定したURLのページを読み込み、
PrintWriter out = response.getWriter();
で、出力しよう思っております。

しかし、読み込む側(getURL側)もプログラムでして、
リモートホスト名、リモートIPアドレスを見ています。

調べてみたところ、
端末 → Aサーバ(Servletが置いてある自サーバ)
→ Bサーバ(読み込むプログラムが置いてあるサーバ)のようにアクセスし、
環境変数を調べてみたところ、
端末のリモートホスト名と、リモートIPアドレスではなく
Aサーバのリモートホスト名と、リモートIPアドレスが取得されておりました。

これを、端末のリモートホスト名とリモートIPアドレスに設定するには
どのようにしたらよろしいのでしょうか?

ご教授の程、お願い致します。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-08-17 20:41
こんにちは。

私にはどうも質問の内容がさっぱり分かりません。
端末でJavaのアプリケーションを動かしてネットワークプログラミングでもしてるんですかね? それともブラウザだけですかね?
引用:

URL readURL = new URL(getURL);
URLConnection uc = readURL.openConnection();
で、getURLに指定したURLのページを読み込み、
PrintWriter out = response.getWriter();
で、出力しよう思っております。


ってのは、端末でしてるんですかね? Aサーバですかね? それともBサーバですかね?
引用:

しかし、読み込む側(getURL側)もプログラムでして、
リモートホスト名、リモートIPアドレスを見ています。


ということは、AサーバとBサーバにCORBAとかHORBとか入れて分散オブジェクト処理でもしてるんですかね?
引用:

環境変数を調べてみたところ、
端末のリモートホスト名と、リモートIPアドレスではなく


質問の中にあります環境変数とは、DOSの環境変数ですかね? クラスパスのことですかね?
あと、リモートってのは、どこから見てリモートなんですかね?


[ メッセージ編集済み 編集者: aa 編集日時 2004-08-17 20:43 ]
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-17 23:01
いまいちよく分からないんですが、Bサーバで動いているのはCGIから呼ばれるプログラムで、変数REMOTE_HOSTの値でも見てるって話でしょうか?

> 端末 → Aサーバ(Servletが置いてある自サーバ)
> → Bサーバ(読み込むプログラムが置いてあるサーバ)のようにアクセスし、
> 環境変数を調べてみたところ、
> 端末のリモートホスト名と、リモートIPアドレスではなく
> Aサーバのリモートホスト名と、リモートIPアドレスが取得されておりました。

Bサーバへのリクエストを発行しているのがAサーバなんでしょう?
こういう結果になるのは当たり前だと思いますが。

> これを、端末のリモートホスト名とリモートIPアドレスに設定するには
> どのようにしたらよろしいのでしょうか?

リモートホスト名は、Bサーバからみたレスポンスの返し先なので無理です。
リクエストパラメータなり、リクエストヘッダなりで渡すしかないでしょう。

[ メッセージ編集済み 編集者: t-wata 編集日時 2004-08-17 23:06 ]
くろ
常連さん
会議室デビュー日: 2004/08/17
投稿数: 42
投稿日時: 2004-08-18 09:36
おはようございます、くろです。

説明が下手で、申し訳ありません。

端末より、AサーバのネットワークプログラミングをしたServletにアクセスします。
そのサーブレットは、Bサーバにあるプログラム(テスト用では、JSP)を読み込んで、
アクセスされた端末に出力を行っています。
BサーバにあるJSPでは、アクセスされたもののHTTP環境変数(でいいのかな?)を取得し、
表示をするという動作を行います。

その際、端末からAサーバにアクセスされた際のリモートホスト名と、リモートIPアドレス
と、AサーバからBサーバにあるプログラムを読み込んだ際のリモートホスト名と、
リモートIPアドレスが異なってしまいます。

これを、Aサーバにアクセスされた際のリモートホスト名、リモートIPアドレスと同じしたい
のですが、方法が分かりませんでしたので、ご質問させて頂きました。

やはり、無理なのでしょうか?
自分なりに調べたら、setRemoteHostというAPIがあるらしいのですが、
どこでダウンロードできるのかもよく分からない状態でして。。。

この説明で、上手く伝わるか不安ですが
よろしくお願いします。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-08-18 21:09
引用:

端末より、AサーバのネットワークプログラミングをしたServletにアクセスします。


あなたがやられているのはおそらくブラウザを使ってそのままservletにアクセスしているだけだと思います。この場合、ネットワークプログラミングとは言いません。
ROIとかソケット通信でservletにアクセスしてるんなら、あなたの表現は正しいです。
引用:

そのサーブレットは、Bサーバにあるプログラム(テスト用では、JSP)を読み込んで、
アクセスされた端末に出力を行っています。


ちょっとよく分かりません。
Strutsのようにjspをservlet経由で端末に返しているんですか?
そのようには思えませんけど。

えーっと、つまり何を言いたいかと言いますと、そのjspは(どのサーバに保存しているかではなくて)どのサーバで実行されているのかということです。
引用:

その際、端末からAサーバにアクセスされた際のリモートホスト名と、リモートIPアドレス
と、AサーバからBサーバにあるプログラムを読み込んだ際のリモートホスト名と、
リモートIPアドレスが異なってしまいます。
これを、Aサーバにアクセスされた際のリモートホスト名、リモートIPアドレスと同じしたいのですが、


リモート(リモートIPアドレス)の意味はおわかりになりますでしょうか?
繰り返しご質問いたしますというより、再度お考えいただきたいのは、どこからどっちをみてるのかということです。
引用:

自分なりに調べたら、setRemoteHostというAPIがあるらしいのですが、


そんなのあるんですか。知りませんでした。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2004-08-18 22:13
> HTTP環境変数(でいいのかな?)

良くないです。CGIプログラムは、httpdから起動されたときに、HTTPリクエストヘッダやクエリを環境変数渡しされるので、CGI変数を環境変数と呼ぶことがありますが、普通「環境変数」と言ったら~/.profileやマイコンピュータ→詳細設定で設定する環境変数とか、プロセスの環境変数と勘違いされます。

で、要は、
(1)端末からブラウザで、Aサーバの(上のWebコンテナで動作している)Servletにアクセスする
(2)AサーバのServletは、Bサーバの(上のWebコンテナで動作している)JSPにアクセスする
(3)BサーバはAサーバのServletへJSPの出力をHTTPレスポンスとして返す
(4)AサーバのServletは、(3)でもらったレスポンスを(加工するとかして)端末のブラウザにレスポンスを返す
ということをやってて、BサーバのJSPでrequest.getRemoteHostの値をみると、Aサーバのホスト名になってる(が、端末のIPアドレスが欲しい)、ってことかな?
早い話、できません。AサーバのServletがBサーバへリクエストするときに、リクエストパラメータかHTTPヘッダに端末のIPアドレスを書いて渡すしかないです。

> 自分なりに調べたら、setRemoteHostというAPIがあるらしいのですが、

あったところであなたのやりたいことと100%違う目的で作られたメソッドです。
Bサーバに偽装したパケットでも送らない限り、リクエストの発行元以外のアドレスが取得できるわけがなく、偽装すれば、Aサーバにレスポンスが届くことはありえないからです。
くろ
常連さん
会議室デビュー日: 2004/08/17
投稿数: 42
投稿日時: 2004-08-19 09:42
おはようございます、くろです。

皆様、ご返答いただきありがとうございました。

それと、いろいろご指導いただきまして、ありがとうございました。
1

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