[Ruby] 認証プロキシを乗り越える

  • ????????????????????

あるローカルなネットワークから外に出るときに、認証プロキシを通過しなければならないことはよくあります。

Web ブラウザーを経由するならば問題になりませんが、それ以外のアプリケーション経由の場合はプロキシの認証に対応していなかったりでめんどうなことも多いと思います。

そんなときはローカルにプロキシサーバを立てると便利です。

ローカルプロキシサーバのソフトウェアもありますが、ruby を使えばびっくりするほど簡単にプロキシサーバを作ることができるので、自作することにします。といっても、本当に簡単で、ほとんど定型的に以下のように書けます。ただし、エラー処理などはしてません。

# Simplest local proxy server
require 'rubygems'
require 'highline'  # gem でインストールできる
require 'webrick'
require 'webrick/httpproxy'
require 'uri'
# 親サーバーのプロキシ
puts 'Proxy authentication'
user = HighLine.new.ask('ID: ')
pass = HighLine.new.ask('Password: ') { |q| q.echo = '*' }
proxyuri="http://#{user}:#{pass}@YOUR_PROXY_SERVER:PORT"
# プロキシサーバオブジェクトを作る
s = WEBrick::HTTPProxyServer.new(
:BindAddress => '127.0.0.1',
:Port => 8028,
:ProxyVia => false,
:ProxyURI => URI.parse(proxyuri)
)
Signal.trap('INT') do
s.shutdown
end
s.start

このスクリプトをコマンドラインから起動して、親サーバのプロキシID、パスワードを入力したあと、(上の例の :BindAddress、:Port でプロキシサーバを構築した場合は)アプリケーションのプロキシ設定を

http://localhost:8028

とかすれば OK なはずです。


もちろん、ブラウザにプロキシをさしても使えますが、通常利用としては(無駄に?)負荷がかかることになるのでやめてほうがよいでしょう。ただし、怪しいパケットの通信などは観察できます[1]

実際に役に立ちそうな場面は次のような感じでしょうか?

  • プロキシの設定はできても、認証プロキシを通すことができないアプリケーション:Google earth を windows XP にインストールするための Google updater など
  • アプリケーションに埋め込むためのモジュールにしておく → ruby スクリプトの内部や環境変数 http_proxy にプロキシのパスワードを書かずに、毎度、ユーザー名・パスワードを手打ちにすることができる(もちろんプロキシサーバ起動時の一度だけでよい)。しかも hpricot や httpclient など、ライブラリごとに異なるプロキシ認証の方法を吸収できる。
はてなブックマーク - [Ruby] 認証プロキシを乗り越える
Pocket

  1. [1] たとえば、google の検索窓に文字列を入力すると、それが一文字づつ送信されている様子を見たときは、すこしゾッとしました。