Rubyを使った楽々Dial-up Router制御法

  大抵のダイヤルアップルーターはウェブページを利用して制御できるようになっていますが、いちいちページを開くのは面倒です(というか、うちのSOHO-128 SL11なんで例のごとくNet+と相性が悪い)。まじめに制御プログラムを書くのも悪くはないのですが、スクリプト言語を使ってちょちょいと処理してしまうのも手です。そんなわけでPerlを・・・と言いたいところなのですが、Be版のPerlは未だにsocketが使えません。が我々には日本発のオブジェクト指向スクリプト言語Rubyがあるではないですか。ということで、Rubyを使った簡単なプログラムでダイヤルアップルーターを制御してみましょう。
 
◆制御方法を調べる

  本当はこれを調べるのが大変なのかもしれませんが・・・。とにかく接続、切断に必要なリクエストを調査します。間にプロキシサーバーなどを挟んで、ログを取るとわかります。ちなみにSOHO-128SL11の場合は次のようになっています。

 [接続]

	POST /config-quick.cgi HTTP/1.0
	Content-Length: 10

	connect+0=

 [切断]

	POST /config-quick.cgi HTTP/1.0
	Content-Length: 15

	disconnect+all=

 
◆Rubyスクリプトを書く

  いきなりですが、スクリプトを書きます。調べた接続、切断のための送信データをファイルとして保存します。ここでは/home/config/etc/connect、/home/config/etc/disconnectとして保存したと仮定します。

 [スクリプト]

	#!/boot/home/config/bin/ruby

	require "socket"

	server="169.254.1.1";
	port="80";
	confpath = "/boot/config/etc/";
	mode = ARGV.shift;
	if (mode == "disconnect")
		fname = confpath + "connect";
	else
		fname = confpath + "disconnect";
	end

	file = open(fname, "r");
	sock = TCPsocket.open(server, port);

	while line = file.gets
		sock.write line;
	end

	sock.close;
	file.close;

  これだけ。簡単(笑)。これを/boot/home/config/bin/duprtr.rbなどとして、Terminalから
$ duprtr.rb connect とか、
$ duprtr.rb disconnect とかすれば接続・切断ができます。あ、当然スクリプト中のserverは ルーターに割り当てられているアドレスにしてください。普通の人だと192.168.0.1とかが多いでしょうか。 私の場合、ルーターのアドレスを定義ファイルの最初の行にいれて、スクリプトで処理をして接続先を決めていますが まぁ、普通はそんなことする必要もないでしょう。いちいちTerminalから打つのが面倒なら、
 

	#!/bin/sh

	duprtr.rb connect

  ってな感じのファイルをデスクトップ上に「インターネットに接続」なんて名前で作っといてやれば、 これをダブルクリックするだけでOK。ね、簡単。スクリプト言語バンザイ。

すげーぜ!

 
CVS 最終更新 ---- $Id: tips_duprtr.html,v 1.2 2000/07/02 15:12:00 toyoshim Exp $