2013年2月22日金曜日

【Ruby】WEBrick でプロキシサーバをつくってみる


Macのブラウザでネットワーク関連の処理をあれこれしたいと思った時に、Windowsを利用していた時に使っていたFiddler的なものが欲しくなりました。WEBrickを使ってプロキシサーバをつくれば、似たような事ができる(?)と教えていただいたので、早速試してみる事にしました。 

サーバサイドのスクリプトも、Ruby自体もあまり触った事がなかったので、ついでにどんな風にかけるのかあれこれいじりながらやってみる事にしています。いろいろとやってみたい事があるのですが、とりあえず置き換えの方法だけでもメモしておきます。

 Webrickを利用している部分は抜き出してクラスに。まだまだいろいろと機能があるようなのでいじりながら何ができるかを検討中。
01##./lib/proxy.rb
02#!usr/bin/ruby
03require 'webrick'
04require 'webrick/httpproxy'
05include WEBrick
06 
07class Proxy
08   attr_accessor :config
09 
10  def start
11    print @config
12    @server = WEBrick::HTTPProxyServer.new( @config )
13    Signal.trap('INT') do
14     @server.shutdown
15    end
16    @server.start
17  end
18 
19  def shutdown
20    @server.shutdown
21  end
22    
23end
設定ファイル(yml)
1server:
2 :BindAddress    : '127.0.0.1'
3 :Port           : 10080
4 :DocumentRoot   : ''
5 :CGIInterpreter : '/usr/bin/ruby'

handlerの中身の部分は、あまりいろいろ試してみていないのでこれからいろいろと試しつつ、できそうな事があれば実装していこうと思います。URLを比較する部分とかはまだ適当です。
01##./main.rb
02#!usr/bin/ruby
03require './lib/proxy.rb'
04require 'yaml'
05 
06@server = Proxy.new
07 
08REPLACE_CONTENT =<<EOF
09<body>
10<h1>Oh!</h1>
11<body>
12EOF
13 
14 
15REPALCE_TARGET = "tsukajizo.com/"
16 
17def start_proxy
18  #Handler
19  handler = Proc.new(){|req,res|
20 
21    if "#{req.host}#{req.path}" == REPALCE_TARGET
22      res.body = REPLACE_CONTENT
23    end
24  }
25   
26  #プロキシサーバの設定
27  config = YAML.load_file('./config.yml')
28  server_config = config['server']
29  server_config[:ProxyContentHandler] = handler
30   
31  #プロキシサーバの起動
32  @server.config = server_config
33  @server.start
34end
35 
36start_proxy
なんか、こうもうちょっと使いやすい感じにしていきたいですね。

とりあえず。
 →

こんな感じです。

0 件のコメント:

コメントを投稿