数日前からちまちまと作っていたスクリプトが出来たっぽいので公開してみる。需要があるかは不明だけど(^^;
BUFFALO社製ルータWZR-HP-G300NHの再起動をローカルPC(Windows)から行うスクリプトです。
' BUFFALO WZR-HP-G300NH の再起動スクリプト
routerIP = "192.168.xxx.xxx" ' ルータIP
routerID = "root" ' ID root固定
routerPS = "ぱすわーど" ' パスワード
initURL = "http://" & routerIP & "/cgi-bin/cgi?req=frm&frm=init.html"
rebootURL = "http://" & routerIP & "/cgi-bin/cgi?req=inp&res=waiting_page.html"
startURL = "http://" & routerIP & "/"
sWd1 = "sWebSessionnum value="
sWd2 = "sWebSessionid value="
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set fn = fs.OpenTextFile("reboot_router.log",8,True) ' ログを残しておく
Set HTTP = CreateObject("MSXML2.XMLHTTP")
HTTP.open "GET", initURL, False, routerID, routerPS
HTTP.send
' セッション番号を探す
sNum = InStr(HTTP.responseText, sWd1) + Len(sWd1)
sNumE = mid(HTTP.responseText, sNum)
sNumE = InStr(sNumE, ">")
sNum = mid(HTTP.responseText, sNum, sNumE - 1)
' セッションIDを探す
sId = InStr(HTTP.responseText, sWd2) + Len(sWd2)
sIdE = mid(HTTP.responseText, sId)
sIdE = InStr(sIdE, ">")
sId = mid(HTTP.responseText, sId, sIdE - 1)
' 送信データを作成
sendMsg = "reboot=再起動&sWebSessionnum=" & sNum & "&sWebSessionid=" & sID
HTTP.open "POST", rebootURL, False, routerID, routerPS
HTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=EUC-JP"
HTTP.setRequestHeader "Content-Length", Len(sendMsg)
HTTP.send sendMsg
if HTTP.status = "200" then
fn.Write Now & " reboot start" & vbCrLf
WScript.Sleep 120000
do
HTTP.open "GET", startURL, False, routerID, routerPS
HTTP.send
WScript.Sleep 1000
loop Until HTTP.status = "200"
fn.Write Now & " reboot end" & vbCrLf
' msgbox "再起動完了"
else
fn.Write Now & " reboot failed" & vbCrLf
end if
fn.Close
Set fs = Nothing
Set HTTP = Nothing
上を適当な名前.vbsで保存してください。文字コードはEUCじゃないとダメかも。
Ver.1.74+Windows7にて確認。他は分かりません。何かあっても責任は取れません。ごめんなさい。
ウチの環境では、無線LANで繋がっているハズ*1のプリンタが他PCから見えなくなるといった現象が見られます。
ルータ再起動で直るので毎週土曜朝にでも再起動させようと思ったのがきっかけ。プログラムタイマーでも買おうかと思ってたんだけど。これをタスクマネージャーに設定して対応してみる。
不備とかおかしなところがあったら指摘してくれるとありがたいです。エラー処理とかしてないのはメンドイからです(汗;;
*1 ルータからはプリンタが見えてる
あまりの寒さにコタツをセッティング。・・・がコタツのケーブルが見当たらず。どこへ行ったのやら。困った・・・
上記の最後に、
logURL = "http://" & routerIP & "/cgi-bin/cgi?req=tfr&id=54"
Set WSHShell=Wscript.CreateObject("Wscript.Shell")
WSHShell.Run(logURL)
とか追記してみると、ルータのログ表示ページが表示されるのでうれしかったりするかもしれません。とかとか。
・・・それにしても、切り貼りなのがバレバレなソースで恥かしいところです(^^;;
ウィスキー呑みつつまたーり。ロックがいいね。