title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2018/04 >>123456789101112131415161718192021222324252627282930
Powered by BLOM Windows 用の Proxy Server を作ってみたり。
小さくも大きくも閉じたりもしません
15/03/28 00:22 / その他のソフト

少し前から Proxy Server に凝って?いまして、現在 HTTP proxy server を開発しています。

Windows の proxy server だと delegate などが超有名なので今更感が非常にあるのですが、PMail Server2 用に将来ちょっと特殊な Proxy server を作るつもりだったので、その学習用と言った所でしょうか。

で、proxy server 自体の仕組みは簡単な物でして、基本的には

1)クライアントからの接続を受ける。
2)転送先のサーバーに接続する。
3)クライアントからの通信をサーバーに受け渡す。又はサーバーからの通信をクライアントに受け渡す。

仕組みとしてはこんなもんです。

proxy というのかはわかりませんが、2の転送先のサーバーが固定にすれば、フォワードサーバー?見たいな感じで、試しに SQL Server に対して行ってみたら、Management Studio はまんまと騙されていました(笑)

photo


これはこれで、トランザクションを記録できたりするんで便利なんですが、テスト用なので動いたことを確認して放置。
(IPベースでの接続フィルタ辺りは噛ませられるようにしましたが)

ちょっと面倒になるのはここからでして、2の接続先が固定であれば楽勝で作るのは1日も掛からないのですが、特定のプロトコルが絡むと、ちょっと面倒なことになります。

余談ですが、Proxy server を検索していたら、Java などでは servelet で proxy server があって、面倒な箇所を全部やってくれるライブラリが結構ありますねぇ。
羨ましい :-)

まぁ、Delphi にも Indy Component という便利な VCL がありまして、その中に HTTP proxy server もあるんですが。
将来的になんの資産にもなりませんので、全て自力で作る訳です。
時代的には、どっかの凄い人が作ったライブラリを使ってサクッと完成!が流行なのかもしれませんが、GPL 汚染とかイヤですし〜

閑話休題

2の接続先の話となりますが、HTTP の場合、GET とか POST とか HEAD とか CONNECT というコマンドがあり、そこで接続先を指定しています。

例えば、akisoftware.com に接続する場合は

GET http://akisoftware.com/ HTTP/1.1

と送信すると(実際には、他にも色々ヘッダがありますが)
サーバーは

HTTP/1.1 200 OK (OK データを送るよ)
とか
HTTP/1.1 304 Not Modified(そのデータは変わってないよ)
とか返事をしてくれる訳です。

単に中継を行うだけであれば、クライアントからのリクエストのみを解釈して接続先だけを取り出せばいいのですが、リクエストに干渉したり、サーバーからの応答を取り出す(キャッシュしたり)するには、HTTP をまるっと解析する必要があります。

HTTP サーバも HTTP クライアントも過去に作っていますので、そこらを組み合わせれば良いのですが、逆に過去のライブラリを使うと無駄に遅くなる(どちらも汎用で作っている為)ので、1から書き起こしています。

コツコツと空いた時間を使って作ること10日。
なんとか、まともに動くようになりました。

photo


yahoo さんに接続している様子。
gzip を解凍しようとして、エラーが出るのでなんでだろ?と思っていたら chunk で送ってきていて、chunk の仕様ってどんなんだっけ?と過去に作った HTTP クライアントを眺めてようやく思い出してみたり(^-^;
(あの chunk でゴミと言う名のサイズが入る仕様って好きじゃないんですよ・・・そこだけすっとばすのが面倒)

とりあえず Windows 自身の Proxy 設定に設定すれば、IE 以外にも、chrome 等も proxy に従ってアクセスしてくれるので、普通に使えています。
フィルタリングなどの機能も実装したらフリー版とか作って製品化もしようかと思っています。

飽きずにちゃんと出来上がったらの話ですが(笑)

[更新日付:2015/03/28 01:08:56]
トラックバックを見る(0)
Log Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+8f6c5ae202452b58ed927a711c1ae78f843dfbb9]
TB Link [http://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+8f6c5ae202452b58ed927a711c1ae78f843dfbb9]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.