|
>>3444 perler > なるほど、それがperlの仕様なんですね^^ perl とは関係ないです。これは HTML と CGI の領域です。 apache-1.3.29・IE6・Mozilla-1.5 で試した結果、 > method='GET'の場合 > http://xxx.cgi?mode=resとなりpara2=data2がおくられない。 これは正しいです。正確に言うと 「ブラウザが para2=data2 を送らない」 です。 > method='POST'の場合 > http://xxx.cgi?para2=data2となりmode=resがおくられない。 これは間違いです。標準入力を解析していないだけ、でしょう。 以下の CGI スクリプトを実行し、GET と POST それぞれで QUERY_STRING と標準入力にどういう値が入っているか確認 してください。 ------- #!/usr/local/bin/perl print "Content-type: text/html\n\n"; $script_name = $0; $script_name =~ s|.*/||; print <<END; <html><body> <form action="$script_name?para2=data2" method='GET'> <input type="hidden" name="mode" value="res"> <input type="submit" value="GET"> </form> <form action="$script_name?para2=data2" method='POST'> <input type="hidden" name="mode" value="res"> <input type="submit" value="POST"> </form> END print "REQUEST_METHOD=$ENV{REQUEST_METHOD}<br>\n"; print "QUERY_STRING=$ENV{QUERY_STRING}<br>\n"; print "STDIN=\n"; print <STDIN>; |
|
>>3445 68user お返事ありがとうございました。 なるほど、標準入力を解析しないということがわかりました。 パラメーターを指定しているのにPOSTをつかったのがいけなかったようですね。 またGETをつかってもパラメーターを送らないので素直に違う方法を考えます。 ご教授ありがとうございました。 |
|
>>3443 68user こんにちは、Muleです。 ご返事、ありがとうございます。 中途半端なコードを書いたせいか、誤解があったようですが、わたしも68user様が言われた、 >http は proxy 経由かもしれないが、ftp や telnet は >proxy 経由でないことを期待して、クライアント側から >ftp や telnet でサーバに接続させるように仕向けて、 >IP アドレスを取得する という、まさにそのことを考えております。 proxyのルーチンは、proxy経由かどうかを最初にチェックする為のもので、 httpからのアクセスがproxy経由でなければ、画像を出力し普通に接続元を記録する。 そうでなければ、クライアント側からtelnetでサーバに接続させて、接続元を記録する、という流れです。 FTPと書いたのは、わたしのほうで、FTPを用意し、CGIから出力する画像の参照元に、FTPサーバにある画像を指定して出力させれば、FTPのログに元の接続先が残るのではないかと思うからです。 考え方として、何か大きな間違いをおかしているでしょうか? ご指摘いただければ、幸いです。 |
|
>>3447 Mule > そうでなければ、クライアント側からtelnetでサーバに接続させて、 > 接続元を記録する、という流れです。 なるほど。つまり、 >>3442 Mule のサンプルは、 接続元 IP アドレスに接続 [*1] if ( 接続成功 ){ クライアント側が telnet でサーバに接続してくるような 出力を行なう (例えば Location とか)。[*2] } else { 画像を表示 } ということですね? もしそうなら納得です。 ただ、*1 の部分は可能ですが、*2 の部分はよほどセキュリティが 甘いブラウザでないと無理なのではないか、と思います。 |
|
>>3448 68user さっそくのご返事、感謝いたします。 私が考えているのは、68user様のひながたに沿って考えると、最初にtelnetを起動するというのではないです。 たとえば、こんな感じになると思います。 use CGI qw(:standard); $addr = remote_addr; $host = remote_host; $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr); unless($host){ クライアント側が telnet でサーバに接続してくるような 出力を行なう (例えば Location とか)。 } else { 画像を表示 } です。 素朴に疑問なのですが、最初にtelnetを起動して、接続元に接続できるかどうかの判定を行わなければ、理屈的に無理なのでしょうか? 私は、proxy経由のアクセスがあった時にのみ、if文を実行させたいと思うのですが... |