ブロードバンドルーターを自動再起動するお手軽な処理を作ってみました。

使ったツールは、Windows標準機能のタスクスケジューラとWget(ダブルゲット)です。この2つを組み合わせると、同ネットワーク上のPCから、ルーターの設定ページに自動でログインを行った後、再起動の処理を自動的に実行させる事ができます。再起動のタイミングは、タスクスケジューラの設定にて、PCの起動時や1日に一回など自由に変更が可能です。

develop or drink ?
 develop or drink ? ©

今回はその手順や参考になった記事の備忘録としてまとめたいと思います。当記事ではWindwosの処理について触れていきますが、mac OSXやLinuxでもWgetが使えますので流用する事ができます。

目次

インターネット接続に必要な機器と言えば、ブロードバンドルーター(ルーター)です。本来ならば常時安定したネット回線接続を提供してくれる機器なのですが、機種によっては一定期間の経過後に接続が不安定になったり、回線が切断されてしまうモデルもあるようです。

幸いなことに、回線の安定性を回復させるには、ルーターの再起動や電源の再投入で解決できるものが殆どです(荒業ですがw)。今回は定期的にルーターのリブートを行い、インターネット接続の安定性を簡易的に保つ試みをしてみました。

まずはルーターの設定ページを確認する

まずはルーターの設定ページにPCのブラウザからアクセスしてみます。最初にログインページが表示される物が大半かと思いますので、ログインフォームの送信パラーメータをChrome DevToolsで確認しておきます。

ログインページをChrome DevToolsで調べる
ログインページをChrome DevToolsで調べる ©

上記の例ではユーザー名とパスワードをPOSTで送信していることが分かります。送り先はルーターに用意されているlogin.exeというプログラムです。

フォームの項目
リクエストメソッド POST
パラメーター名と値 user="ユーザー名"
パラメーター名と値 password="パスワード"
送信先パス /cgi-bin/login.exe

続いて、再起動の処理が行えるページに遷移してみます。こちらも以下の例ではフォームボタンとなっています。

同様に再起動ページをChrome DevToolsで調べる
同様に再起動ページをChrome DevToolsで調べる ©

Chromeで調べてみると、隠しパラーメータでvalue="Reboot"をPOSTで送信している事が分かります。送り先はrestart.exeです。

フォームの項目
リクエストメソッド POST
パラメーター名と値 value="Reboot"
送信先パス /cgi-bin/login.exe

Wget for Windowsを入手する

続いて、Windowsでwgetが使えるように準備を行います。下記のサイトからWget for Windowsをインストールします。

Wget for Windows

上記のBinariesDependenciesのZipファイルをダウンロードしてフォルダーの中身を統合した後、C:\ドライブ直下やC:\Program Filesに配置します。またフォルダーの中身に含まれるbinディレクトリの環境変数パスを通しておきます。

Mac OSXやLinuxでwgetをインストールするには?

Mac OSXではHomebrewからインストールする事ができます。

bash
1
$ brew install wget

Linuxの場合はapt-getからインストールできます。

bash
1
$ apt-get install wget

wgetでログイン後、再起動を行うバッチ処理を作成する

続いてwgetを使って、ルーターの設定ページにログインし、再起動のフォームを送信するようなバッチファイル(例:reboot.bat)を書きます。

reboot.bat
1
2
3
4
5
6
7
8
9
10
11
ping localhost -n 5 > nul

cd c:\example-folder

ping localhost -n 5 > nul

wget --save-cookies cookies.txt --post-data "user=root&password=" -O - http://192.168.xx.1/cgi-bin/login.exe --referer="http://192.168.xx.1/"

ping localhost -n 5 > nul

wget --load-cookies cookies.txt --post-data "action=Reboot" -O - http://192.168.xx.1/cgi-bin/restart.exe --referer="http://192.168.xx.1/advance-admin-init.stm"

ここで今回使うwgetコマンドのパラメーターを確認してみたいと思います。

wgetのパラメーター 説明
ping localhost -n 5 > nul 指定した秒数待機する(例では5秒待機)
--save-cookies ログイン後のクッキーをテキストファイルに保存する
--load-cookies 保存されたクッキーを読み込み、処理を行う
--post-data POSTで送るパラメーターを指定する
-O - wgetでサイトにアクセス後、ページファイルをダウンロードしない
--referer リファラを指定する。リファラにはログイン後リダイレクトされるアドレスなどを指定しておく

バッチファイルでは、前項で調べた送信フォームのパラーメーターをPOSTで送信します。また、ログイン成功時にはクッキーを記録してログイン状態を保ちます。クッキーはログイン後のページで利用します。

また、各処理の間にPINGコマンドを挿入して、処理の待機を行うようにしました。これは1つの処理が実行されて完了するまでに時間が生じると、実行完了前に次の処理が実行されてしまうのを防ぐ目的となっています。コマンドを実行した感触としては、CDコマンドでこの現象が起こりやすいようです。wgetコマンドでは上から順番に処理が行われていくようですので、待機時間は不要かもしれません。

また、wgetコマンドの--save-cookiesオプションは非常に重要です。クッキーを保持しないとForbidden403エラーが表示される事があります。

また、各ページにアクセスする際にはwgetコマンドに--refererオプションを指定します。こちらもクッキーに続いて重要なポイントになっていきます。リファラを指定しないとNot Implemented 501エラーが発生します。

Windowsのタスクスケジューラを作成する

最後にタスクスケジューラを作成します。WindowsのタスクスケジューラはPC起動時や1日に一回など、様々な条件で実行させる事ができます。今回はパソコンの起動時に実行させるように設定しました。

起動時にバッチファイルを実行させる
起動時にバッチファイルを実行させる ©

続いて、作成したタスクスケジューラのプロパティから詳細を設定しておきます。

ログイン時のみ実行
ログイン時のみ実行 ©
バッテリーの状態に関わらず実行
バッテリーの状態に関わらず実行 ©

参考にさせていただいた記事

trash-area.com
WindowsXP標準機能だけでスリープ(コマンド)の実装

指定した秒数だけコマンドをスリープ(待機)させる方法についての解説です。TIMEOUTコマンドやSLEEPコマンドが主流なのですが、Windows XPではこれが使えません。標準機能だけでスリープさせるにはPINGコマンドで代用できるようです。

教えて!goo
ルーターを自動再起動させたいです

wgetを使ってログインフォームにログイン後、再起動設定に入り再起動ボタンを押す流れの質問回答がされています。

@IT
HTTP/HTTPSでまとめてデータを取得するwgetコマンドとは? wgetのコマンド一覧

wgetの基本的な使い方が解説されています。

ctrlshift’s diary
wgetとcurlの根本的な違い

代表的なダウンローダであるwgetとcurlの違いについて。wgetはリンクを辿って再帰的にファイルをダウンロードできるのが特徴です。これに対してcurlはそれが出来ないようです。ただしcurlは様々なプロトコルに対応していたり、連番ファイルのダウンロードが容易など、利用シーンに違いがあるようです。

Qiita
Windowsでwgetする色々な方法

Windwosでwgetが使えるツールが一覧で解説されています。

@IT
wgetとメールを使ったお手軽サーバ死活監視

wget for Windowsを使った操作の解説がされています。

Wget for Windows

Wget for Windowsのダウンロードページです。インストールするには、上記リンクにあるBinariesとDependenciesのZipファイルをダウンロードしてフォルダーの中身を統合した後、C:\ドライブ直下やC:\Program Filesに配置して、binディレクトリのパスを通して使います。

Qiita
wgetでこういう時はこうする

wgetの色んな使い方がまとまっています。ログインフォームのようなログインIDとパスワード入力欄があるサイトのログイン方法も解説されています。

ハックノート
wgetコマンドでファイルを保存しないで内容だけ出力する

wgetの通常コマンドでは、アクセス先のファイルをダウンロードしてしまいます。ファイルを保存しない動作をさせるには-O - (アクセス先のURL)とオプション指定します。