LEO-NET認証スクリプト
住まいがレオパレスということで、インターネット接続はLEO-NETを利用している。このLEO-NETを利用するには、接続の初っ端にHTTPの基本認証を通らないといけない仕様になっている。これをブラウザを使ってやってもいいのだが、毎回のことになると面倒なので基本認証を行うRubyのスクリプトを動かすようにしている。
# -*- coding: Windows-31J -*- require 'net/http' require 'uri' DEFAULT_URI = 'http://www.google.co.jp/' @encpass = "" def fetch(uri_string) uri = URI.parse(uri_string) begin Net::HTTP.start(uri.host, 80) do |http| response = http.get(uri.path, { 'Authorization' => 'Basic ' + @encpass }) if response.code == '302' or response.code == '307' then fetch(response['location']) elsif response.code != '200' then raise(response.code + ' ' + response.message) end end rescue Exception system( 'wscript LeonetAuth.vbs "' + "認証に失敗しました。\n" + $!.message + "\n" + '再試行しますか?"') retry if $? == 0 end end if ARGV.length < 1 then system('wscript LeonetAuth.vbs ' + '"usage: ruby LeonetAuth.rb id:password [URI]"') exit(1) end @encpass = [ ARGV[0] ].pack("m") fetch(ARGV.length < 2 ? DEFAULT_URI : ARGV[1])
これをたとえばLeonetAuth.rbという名前で保存しておくわけだ。このスクリプトではダイアログボックスの表示にVBScriptを使っているので、同一ディレクトリにLeonetAuth.vbsという名前で、
Set args = WScript.Arguments Set shell = WScript.CreateObject("WScript.Shell") If args.Count = 0 Then message = "" Else message = args(0) End If If shell.Popup(message, 0, "LeonetAuth", vbOKCancel + vbQuestion) _ = vbOK Then WScript.Quit(0) Else WScript.Quit(1) End If
というファイルを作っておく必要がある。Rubyスクリプトをコマンドラインから実行してもいいが、
@echo off <drive-letter>: cd <script-directory> ruby LeonetAuth.rb <user-id>:<password>
のようなバッチファイルを作成して、スタートアップフォルダに入れるなり、グループポリシーのスタートアップスクリプトに登録するなりしておけば、認証に煩わされることもなくなる。蛇足ながら、<drive-letter>はスクリプトを保存したドライブ名、<script-directory>はスクリプトを保存したディレクトリパス、<user-id>はLEO-NETのユーザID、<password>はLEO-NETのパスワードに置き換える。さらに蛇足だが、このスクリプトはRubyがインストールされているWindows上でしか動かない。さてさて、このエントリが役に立つ人が世の中にどのくらいいるだろうか(^^ゞ。