fake Proxy - プロキシもどき CGI対応WEBサーバを妖しいプロキシ(もどき)にします ■前口上 いまどき、プロキシ機能のないWEBサーバというものもほとんどな いと思います。でも、プロキシって代理応答をしてくれるもののことで すから、クライアントの指定に応じてWEBサーバのCGIアプリが代 理でファイルを取りにいって、結果をCGIの出力で返してもらっても いいのですよね。 ということで、そういうCGIを作ってみようとしたのですが、単に それだけでは面白くないので、一捻りを加えてみました。ま、この程度 のものは Perl を使えば簡単にできるとは思いますが、インストールを お願いしている某所がどうも Perl を導入していないらしいというので、 あえて Delphi で作ってみました。 ■動作環境 Windows95/98/Me/2K/XP 汎用(のはず)。 ただし、十分なテストは行なわれておりません。 また、Windows95/98/Me なWEBサーバだと、Socket の数が足りなくな るような気もします。 なお、レジストリは一切使っておりませんので、単にファイルを削除す るだけでアンインストール可能です。 ■使用法 URLを指定すると、そのファイルを取得し、標準出力に出力します。 対応しているスキームは http と ftp のみです。 メソッドは GET だけに対応したCGIツールなので、入力は環境変数 query_string でURLを指定します。ただし、この時に、URL文字列 を左右反転させて指定することも可能です。 例えば、DOS窓を起動して、以下のように指定します。 http://www.yahoo.co.jp/ を取得する場合 set query_string=/pj.oc.oohay.www//:ptth そして f_proxy > a.htm とリダイレクトすると、そのファイルに取得 する事ができます。もちろん、画像などや音声、圧縮ファイルなども取得 することもできます。 リダイレクトしなければ、画面にその内容が表示されるはずですが、 OSの都合でうまく表示されないことがあるようです。 このツールをWEBサーバに組み込む際には、お使いのサーバソフト のCGIの使い方を十分把握してから組み込んでください。作者は、あ なたがお使いのサーバソフトに対する十分な知識は持ち合わせていない 可能性が非常に高いので、たとえ質問されても、何らかのアドバイスが できることはほとんどないと思われます。 WEBサーバに組み込んだ場合、例えば以下のようにURLをブラウ ザに指定します。 サーバ:http://www.foo.bar.com/ 取得URL:http://www.yahoo.co.jp/ ブラウザでの指定例: http://www.foo.bar.com/cgi-bin/f_proxy.exe?/pj.oc.oohay.www//:ptth このとき、指定するURLにはFTPなスキームが使えますので、擬 似的なプロトコル変換として使うことができます。 ■どんなときに使うの? (1)管理されたネットワークの網の目をくぐるときに 最近は各企業などで、社員がネットサーフィンなどで問題を起こさな いようにと、閲覧可能なサイトを制限しているところが多いようです。 スケベ系なところとかオークションサイトが規制対象となっていること が多いようですね。 さて、ではどのようにしてこの規制を実現しているかというと、単に URLの文字列に規制サイトのURL文字列が含まれていないかチェッ クするという方式と、通信相手のIPアドレスが規制対象になっていな いかチェックする、という方式がほとんどのようです。このチェックは、 社内LANとインターネットの間のゲートウェイで行なわれていること が多いようです。 ま、人目を気にしながら会社からアクセスしないでも、自宅に帰って からゆっくりアクセスすればいいのでしょうが、緊急だとかなんだとか の理由で会社からアクセスする必要が生じることもあるかもしれません。 そんなときは、自宅なり友人なりでWEBサーバを立ちあげたところ にあらかじめこのソフトを仕込んでおき、そこを経由してアクセスする ようにします。この方法なら、URL文字列には直接規制文字列が含ま れていませんし、IPアドレスも直接にはその中継させているサーバの アドレスになるので、規制には引っ掛からずにすむでしょう。 ただし、規制する側としては、必要があって規制しているわけですか ら、あまり派手に立ち回らないほうがいいでしょう。せっかく経由させ ることにしたサーバまで規制対象になったり、あるいは反転文字列まで チェックされるようなことになっては元も子もありませんから。 もっとも、自分でソースを書き換えて、別のコーディング方式にして しまったものを別のサーバにおけば解決するのですが。 (2)課金逃れに(^^; とある常時接続系のプロバイダでのお話しです。 そこのプロバイダ、比較的低速(と言ってもISDNよりは10倍以 上速い)サービスの定額サービスのほかに、比較的高速(10MB/sぐらい) の従量制課金のサービスを提供してくれています。これは、時間ではな くデータ量に応じた課金になっています。計量方法は、そのプロバイダ とインターネットの間に設置されているゲートウェイに、そのゲートウ ェイを通過したデータ量(バイト数)をカウントするメーターがあって、 各契約者毎にそのプロバイダとインターネット間でやり取りしたデータ を集計しています。そして、毎月一定のデータ量までは××円、それを 越えると1MB当り○○円、というようになっています。 ただ、なまじ回線速度が速いだけあって、その一定のデータ量なんて いうのはあっという間に超過してしまうんですね。プロバイダ側もこの 点は認識しているようで、サービスとして、ゲートウェイよりも契約者 に近い側(内側)に一つ、プロキシサーバを立ててくれています。これ を経由させれば、ゲートウェイを通過するときには、契約者ではなくプ ロバイダ名義のプロキシサーバがデータをやり取りしたことになるため、 追加の費用は発生しません。 しかし、この方法もいいことだらけではありません。まず、とにかく 遅いです。何のための高速サービスか、というくらい遅いです。さらに、 このプロキシサーバはプロバイダがサービスで立ててくれているもので あり、サポート対象外なこともあって、結構頻繁に落ちているようです。 これらのこともあって、大体どの契約者も、毎月の一定のデータ量を使 いきるまではあまりこのプロキシサーバを使っていないようです。 そして最大の欠点が、このプロキシサーバで中継してくれるプロトコ ルはHTTPだけ、ということ。つまり、FTPで巨大なファイルをダ ウンロードしたい、といったときに、このプロキシサーバを経由させる ことができないので、課金節約のメリットを享受することができません。 この最後の問題点を解決するのに、このソフトの擬似プロトコル変換 機能がお役に立てるかもしれません。友人などでWEBサーバを立ちあ げたところにあらかじめこのソフトを仕込んでおき、そこを経由して目 的のFTPサーバにアクセスするようにします。この方法なら、その経 由するWEBサーバとの間のセッションはHTTPになるので、どんな 大きいファイルのダウンロードでも、そのプロバイダのプロキシサーバ を経由させることができます。 ま、でも、一番いいのは、欲しいファイルは友人に頼んでダウンロー ドしてもらい、円盤でもらうことのような気もします。 ■ソースに関して Delphi version4 Standard で作成しております。 ■著作権、再配布等 一応、著作権は主張させていただきます。以下、本プログラム、およ びドキュメントを総称して「本プログラム等」と表します。 ・本プログラム等の著作権は としき が有します。 ・本プログラム等を使用することにより、使用者の予期しない影響が あっても、作者はなんらの保証および補償をいたしません。 ・本プログラム等の転載、再配布、販売等は、事前に著作権者の許可 を求めなければ、自由にできます。 ^^^^^^^^^^^^ ただし、事前に許可を求められた場合は、原則として全てお断り いたします。なお、事後報告は歓迎いたします。 ^^^^^^^^^^ もちろん書籍、雑誌、CD−ROMへの収録も自由です。 なお、転載等を長期間継続するような場合でも、定期的な連絡・ 報告などは不要です。また、1つのバージョンについて1ヶ所の 転載先に対し3回以上連絡があった場合、当該バージョンの転載 中止を要請することがあります。 ・著作者人格権の同一性保持権に基づき、本プログラム等の改変を自 由に行うことを許可します。というよりも、積極的な改変をお願い いたします。 ただし、改変した本プログラム等では、著作者人格権の氏名表示権 に基づき、原作者の著作権表示を消去することを要請します。 なお、差し支えなければ改変した部分をご連絡いただければ、次の バージョンからその改変内容を反映させていただきたいと思います。 ・転載等の際は、入手した本プログラム等のファイル構成に対し変更 を加えずに再配布してください。ただし、本プログラム等に改変を 加えた場合はこの限りではありません。 ・作者は、このプログラムに不備があっても、それを訂正する義務を 負いません。しかし、努力はするでしょうから連絡をお願いします。 ・仕様拡張に関する意見は、私の技術と体力と気力が許す範囲で対応 したいと思います。 ■改版履歴 version 0.01 2002-05-01 ・とりあえず動く version 1.00 2002-09-27 ・巨大ファイル転送時にセッションが切れてしまう事に対する対策 実施 ・エラー発生時に表示するメッセージをごくわずか親切にした version 1.10 2008-05-21 ・ちょっと必要があって、5年半ぶりのバージョンアップ ・反転していないURL指定に対応 ・多数のバグ修正(こんなにたくさんあったのに気がつかなかった なんて、作者本人も含め誰もこのツールを使っていないらしい)