2013年2月22日金曜日

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


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

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

 Webrickを利用している部分は抜き出してクラスに。まだまだいろいろと機能があるようなのでいじりながら何ができるかを検討中。
##./lib/proxy.rb
#!usr/bin/ruby
require 'webrick'
require 'webrick/httpproxy'
include WEBrick

class Proxy
   attr_accessor :config

  def start
    print @config
    @server = WEBrick::HTTPProxyServer.new( @config )
    Signal.trap('INT') do
     @server.shutdown
    end
    @server.start
  end

  def shutdown
    @server.shutdown
  end
   
end
設定ファイル(yml)
server:
 :BindAddress    : '127.0.0.1'
 :Port           : 10080
 :DocumentRoot   : ''
 :CGIInterpreter : '/usr/bin/ruby'

handlerの中身の部分は、あまりいろいろ試してみていないのでこれからいろいろと試しつつ、できそうな事があれば実装していこうと思います。URLを比較する部分とかはまだ適当です。
##./main.rb
#!usr/bin/ruby
require './lib/proxy.rb'
require 'yaml'

@server = Proxy.new

REPLACE_CONTENT =<<EOF
<body>
<h1>Oh!</h1>
<body>
EOF


REPALCE_TARGET = "tsukajizo.com/"

def start_proxy
  #Handler
  handler = Proc.new(){|req,res|

    if "#{req.host}#{req.path}" == REPALCE_TARGET
      res.body = REPLACE_CONTENT
    end
  } 
  
  #プロキシサーバの設定
  config = YAML.load_file('./config.yml')
  server_config = config['server']
  server_config[:ProxyContentHandler] = handler
  
  #プロキシサーバの起動
  @server.config = server_config
  @server.start
end

start_proxy
なんか、こうもうちょっと使いやすい感じにしていきたいですね。

とりあえず。
 →

こんな感じです。

0 件のコメント:

コメントを投稿