- - PR -
環境変数 リモートホスト名について
1
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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アドレスに設定するには どのようにしたらよろしいのでしょうか? ご教授の程、お願い致します。 | ||||||||||||||||
|
投稿日時: 2004-08-17 20:41
こんにちは。
私にはどうも質問の内容がさっぱり分かりません。 端末でJavaのアプリケーションを動かしてネットワークプログラミングでもしてるんですかね? それともブラウザだけですかね?
ってのは、端末でしてるんですかね? Aサーバですかね? それともBサーバですかね?
ということは、AサーバとBサーバにCORBAとかHORBとか入れて分散オブジェクト処理でもしてるんですかね?
質問の中にあります環境変数とは、DOSの環境変数ですかね? クラスパスのことですかね? あと、リモートってのは、どこから見てリモートなんですかね? [ メッセージ編集済み 編集者: aa 編集日時 2004-08-17 20:43 ] | ||||||||||||||||
|
投稿日時: 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-18 09:36
おはようございます、くろです。
説明が下手で、申し訳ありません。 端末より、AサーバのネットワークプログラミングをしたServletにアクセスします。 そのサーブレットは、Bサーバにあるプログラム(テスト用では、JSP)を読み込んで、 アクセスされた端末に出力を行っています。 BサーバにあるJSPでは、アクセスされたもののHTTP環境変数(でいいのかな?)を取得し、 表示をするという動作を行います。 その際、端末からAサーバにアクセスされた際のリモートホスト名と、リモートIPアドレス と、AサーバからBサーバにあるプログラムを読み込んだ際のリモートホスト名と、 リモートIPアドレスが異なってしまいます。 これを、Aサーバにアクセスされた際のリモートホスト名、リモートIPアドレスと同じしたい のですが、方法が分かりませんでしたので、ご質問させて頂きました。 やはり、無理なのでしょうか? 自分なりに調べたら、setRemoteHostというAPIがあるらしいのですが、 どこでダウンロードできるのかもよく分からない状態でして。。。 この説明で、上手く伝わるか不安ですが よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2004-08-18 21:09
あなたがやられているのはおそらくブラウザを使ってそのままservletにアクセスしているだけだと思います。この場合、ネットワークプログラミングとは言いません。 ROIとかソケット通信でservletにアクセスしてるんなら、あなたの表現は正しいです。
ちょっとよく分かりません。 Strutsのようにjspをservlet経由で端末に返しているんですか? そのようには思えませんけど。 えーっと、つまり何を言いたいかと言いますと、そのjspは(どのサーバに保存しているかではなくて)どのサーバで実行されているのかということです。
リモート(リモートIPアドレス)の意味はおわかりになりますでしょうか? 繰り返しご質問いたしますというより、再度お考えいただきたいのは、どこからどっちをみてるのかということです。
そんなのあるんですか。知りませんでした。 | ||||||||||||||||
|
投稿日時: 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-19 09:42
おはようございます、くろです。
皆様、ご返答いただきありがとうございました。 それと、いろいろご指導いただきまして、ありがとうございました。 | ||||||||||||||||
1
