電子書籍の厳選無料作品が豊富!

色々調べても結局わかりませんでしたので
もしお分かりになる方がいらっしゃれば
教えて頂ければ幸いです。

socketを使用するAというプログラムを作ったのですが、
そのプログラムからBというプログラムを呼び出した時、
Aに取得されるREMOTE_ADDRは、私のREMOTE_ADDRになるのですが、
Bに取得されるREMOTE_ADDRは、サーバのREMOTE_ADDRになってしまいます。
Bに対しても私のREMOTE_ADDRを取得させたいのですが、
方法はありますでしょうか?
具体的なSOCKET使用機構は以下のようになっております。

use IO::Socket qw(:DEFAULT :crlf);
$/ = CRLF . CRLF;
my $data;
my ($host,$path) = $url =~m!^http://([^/]+)(/[^\#]*)!;
my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => 'http(80)', Proto => 'tcp');
select($socket); $|= 1; select (STDOUT);
print $socket "POST $path HTTP/1.0",CRLF,CRLF;
close($socket);


どうぞ宜しくお願い致します。

A 回答 (1件)

AとBは別々のサーバー上にあるんですよね?


となると、Aを呼び出しているのは貴方なわけですから
AがあるサーバーではREMOTE_ADDRは貴方のREMOTE_ADDRになって当然です。
同じように、Bから見ればアクセスしてきてるのはAなわけですからAがあるサーバーのREMOTE_ADDRになって当然です。

もし、AとBが同一サーバー上にあったとしても、AがBにアクセス(サーバーが自分自身にアクセス)しているので同じことになります。

つまり、IP spoofingでもしない限りはムリということになると思います。
    • good
    • 0
この回答へのお礼

あぁ~なるほど!!
言われてみればそうですね。
実行しているのは私なのですから、Bに対しても
REMOTE_ADDRは私のものが渡されるものと思いこんで
いました。

ありがとう御座いました!

お礼日時:2004/10/03 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!