VBSでbaffalo.nasのIPアドレスを半自動的に取得し、自宅NASへVPN接続。
今回のテーマは、
「VBSでbaffalo.nasのIPアドレスを半自動的に取得し、自宅NASへVPN接続する」です。
なぜこんなニッチなことをしたかは【背景】に書きますが、不要なら【本題】まで読み飛ばして下さい。
【背景】
自宅の無線ルータとしてBUFFALO製品を使っており、そのルータには「baffalo.nas」と呼ばれる機能が付います。私は、この無線ルータにUSB接続で外付けHDDを繋ぎ、同じLAN上にある端末であればどれからでも、その外付けHDDを閲覧しファイルの送受信ができるようにしていました。
そんなbuffalo.nasですが、出先からNASを閲覧しようと思うとWEBブラウザを経由せねばなりません。ブラウザはソフトの中でも比較的使用頻度が高かったため、あまりに重く遅くなるような事態は避けたいと考えていました。
そこで普段は、出先からVPN接続を使って自宅のLANに入ることで(通信速度は別として)自宅と同じようにフォルダ間を移動させるような感覚でファイルの遣り取りが出来るようにしていました。
ここで問題となったのが、「どうやって自宅のIPアドレスを知るか」でした。
一般的には、VPNを利用する場合、自宅のIPを登録してドメインを取得します。なぜなら、自宅のIPは色んなきっかけで変動するからです。私も当初はドメインを取得する予定でした。ちょうど、私が使用している無線ルータにもドメインサービスが利用できる機能が標準で付いていたので、それを利用するつもりでいました。
ただこれが、選べるドメインサービスが3種類しかなく、かつ全て有料ということで取得を躊躇したわけです。サービスを受ける以上有料なのは仕方がないですが、当時の私は、無料のサービスもあるだけに3つ以外に選択肢がないことを悔しいと感じたのか、結局ドメインは取得せずにVPN接続を試みることにしました。
【本題】
さて、ドメインを取得せずに自宅へVPN接続する際に「どうやって出先から自宅のIPアドレスを知るか」という問題についてです。これは「baffalo.nas」を利用している場合に限り、出先から自宅のIPアドレスを知るのはそう難しくありません。方法は以下です。
① BUFFALO NASのWEBサイト(http://buffalonas.com/)に行く。
② 登録したユーザー名やパスワードを入力する。
③ IPアドレスを含むURL(https://xxx.xxx.xx.xx:port/login/)に移動するので、
「xxx.xxx.xx.xx」の部分だけをコピーする。
ここでいう、xxx.xxx.xx.xxの部分が自宅のIPアドレスになっていますので、これを使って自宅LANにVPN接続するわけです。
ただ、いちいちサイトに行ってユーザー名やパスワードを入力するのはさすがに面倒で、どうにかIPだけでも自動で取得できないかと思いネットで調べました。その結果、VBSを使えばできそうだったので、散見されたスクリプトを繋ぎ合わせてとりあえず形にしたのが、末筆のスクリプトです。
当初の理想はバックグラウンドで全自動で取得することでしたが、最終的にはIEを経由した半自動になりました。 スクリプトはほぼWEBの流用です。実用性はともかく、一つの区切りとして誰かの役に立たないとも限りませんので投稿します。自身がVBSとは無縁の生活を送っているので、後々のために何の処理をしているのかも併せて記します。
---解説---
※スクリプト中の○○○○○○の部分は自分のBUFFALO NASサービスのユーザー名を入力しておくこと。
※スクリプト中のportは環境に応じて適宜読み替えること。
・VBSファイルを起動すると、インターネットエクスプローラーが開いてhttp://buffalonas.com/に飛ぶ。
・セキュリティの警告がでるので、「overridelink」をクリックしてページを移動させる。
・2秒待つ
・IEのアドレスバーに表示されているURLを変数(str1)に格納する。
この段階でstr1 = https://xxx.xxx.xx.xx:port/login/
・このstr1から
「https://」を削除 → str2
「login/」を削除 → str3
「:port/」を削除 → str4
※:port/login/をまとめて置換しようとしたが何故かうまく行かず、xxx.xxx.xx.xx:port/となってしまったので、分割して置換することにした。
・IPの部分だけとなったstr4をコマンドプロンプト経由でクリップボードにコピー。
・「クリップボードにコピーしました」というメッセージが表示されたら処理は完了。
・メッセージボックスを閉じ、BASIC認証もキャンセルを押して閉じる。
・ブラウザが閉じる。
・あとはVPN接続へ
---解説ここまで---
-----ここから-----
'BUFFALO NASのサイト(http://buffalonas.com/)
Option Explicit
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.Navigate "http://buffalonas.com/index.php?name=○○○○○○"
Do While .Busy = True Or .ReadyState <> 4
Loop
If .LocationURL = "http://buffalonas.com/index.php?name=○○○○○○" Then
.Document.getElementByid("overridelink").Click
End If
WScript.Sleep 2000
Dim str1
Dim str2
Dim str3
Dim str4
str1 = .document.URL
str2 = Replace(str1,"https://","")
str3 = Replace(str2,"login/","")
str4 = Replace(str3,":port/","")
Dim cmd
cmd = "cmd /c ""echo " & str4 & "| clip"""
CreateObject("WScript.Shell").Run cmd, 0
msgbox "クリップボードにコピーしました"
.Quit
End With
Set objIE = Nothing
-----ここまで-----
P.S. VPN接続もコマンドプロンプトで半自動化出来そう。
「VBSでbaffalo.nasのIPアドレスを半自動的に取得し、自宅NASへVPN接続する」です。
なぜこんなニッチなことをしたかは【背景】に書きますが、不要なら【本題】まで読み飛ばして下さい。
【背景】
自宅の無線ルータとしてBUFFALO製品を使っており、そのルータには「baffalo.nas」と呼ばれる機能が付います。私は、この無線ルータにUSB接続で外付けHDDを繋ぎ、同じLAN上にある端末であればどれからでも、その外付けHDDを閲覧しファイルの送受信ができるようにしていました。
そんなbuffalo.nasですが、出先からNASを閲覧しようと思うとWEBブラウザを経由せねばなりません。ブラウザはソフトの中でも比較的使用頻度が高かったため、あまりに重く遅くなるような事態は避けたいと考えていました。
そこで普段は、出先からVPN接続を使って自宅のLANに入ることで(通信速度は別として)自宅と同じようにフォルダ間を移動させるような感覚でファイルの遣り取りが出来るようにしていました。
ここで問題となったのが、「どうやって自宅のIPアドレスを知るか」でした。
一般的には、VPNを利用する場合、自宅のIPを登録してドメインを取得します。なぜなら、自宅のIPは色んなきっかけで変動するからです。私も当初はドメインを取得する予定でした。ちょうど、私が使用している無線ルータにもドメインサービスが利用できる機能が標準で付いていたので、それを利用するつもりでいました。
ただこれが、選べるドメインサービスが3種類しかなく、かつ全て有料ということで取得を躊躇したわけです。サービスを受ける以上有料なのは仕方がないですが、当時の私は、無料のサービスもあるだけに3つ以外に選択肢がないことを悔しいと感じたのか、結局ドメインは取得せずにVPN接続を試みることにしました。
【本題】
さて、ドメインを取得せずに自宅へVPN接続する際に「どうやって出先から自宅のIPアドレスを知るか」という問題についてです。これは「baffalo.nas」を利用している場合に限り、出先から自宅のIPアドレスを知るのはそう難しくありません。方法は以下です。
① BUFFALO NASのWEBサイト(http://buffalonas.com/)に行く。
② 登録したユーザー名やパスワードを入力する。
③ IPアドレスを含むURL(https://xxx.xxx.xx.xx:port/login/)に移動するので、
「xxx.xxx.xx.xx」の部分だけをコピーする。
ここでいう、xxx.xxx.xx.xxの部分が自宅のIPアドレスになっていますので、これを使って自宅LANにVPN接続するわけです。
ただ、いちいちサイトに行ってユーザー名やパスワードを入力するのはさすがに面倒で、どうにかIPだけでも自動で取得できないかと思いネットで調べました。その結果、VBSを使えばできそうだったので、散見されたスクリプトを繋ぎ合わせてとりあえず形にしたのが、末筆のスクリプトです。
当初の理想はバックグラウンドで全自動で取得することでしたが、最終的にはIEを経由した半自動になりました。 スクリプトはほぼWEBの流用です。実用性はともかく、一つの区切りとして誰かの役に立たないとも限りませんので投稿します。自身がVBSとは無縁の生活を送っているので、後々のために何の処理をしているのかも併せて記します。
---解説---
※スクリプト中の○○○○○○の部分は自分のBUFFALO NASサービスのユーザー名を入力しておくこと。
※スクリプト中のportは環境に応じて適宜読み替えること。
・VBSファイルを起動すると、インターネットエクスプローラーが開いてhttp://buffalonas.com/に飛ぶ。
・セキュリティの警告がでるので、「overridelink」をクリックしてページを移動させる。
・2秒待つ
・IEのアドレスバーに表示されているURLを変数(str1)に格納する。
この段階でstr1 = https://xxx.xxx.xx.xx:port/login/
・このstr1から
「https://」を削除 → str2
「login/」を削除 → str3
「:port/」を削除 → str4
※:port/login/をまとめて置換しようとしたが何故かうまく行かず、xxx.xxx.xx.xx:port/となってしまったので、分割して置換することにした。
・IPの部分だけとなったstr4をコマンドプロンプト経由でクリップボードにコピー。
・「クリップボードにコピーしました」というメッセージが表示されたら処理は完了。
・メッセージボックスを閉じ、BASIC認証もキャンセルを押して閉じる。
・ブラウザが閉じる。
・あとはVPN接続へ
---解説ここまで---
-----ここから-----
'BUFFALO NASのサイト(http://buffalonas.com/)
Option Explicit
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.Navigate "http://buffalonas.com/index.php?name=○○○○○○"
Do While .Busy = True Or .ReadyState <> 4
Loop
If .LocationURL = "http://buffalonas.com/index.php?name=○○○○○○" Then
.Document.getElementByid("overridelink").Click
End If
WScript.Sleep 2000
Dim str1
Dim str2
Dim str3
Dim str4
str1 = .document.URL
str2 = Replace(str1,"https://","")
str3 = Replace(str2,"login/","")
str4 = Replace(str3,":port/","")
Dim cmd
cmd = "cmd /c ""echo " & str4 & "| clip"""
CreateObject("WScript.Shell").Run cmd, 0
msgbox "クリップボードにコピーしました"
.Quit
End With
Set objIE = Nothing
-----ここまで-----
P.S. VPN接続もコマンドプロンプトで半自動化出来そう。