ダイナミックDNSサービスでも使うかと思うので、使い方を調べるため昔の同僚が使っていた、 ddo.jp を参照、HTTPでGETすれば更新できるとわかった。
ここをつかうならDiCE とか頼る必要ないな、手作りしてみよう。
仕組みを考えとく
- 自分のとこのIPが変わってるか調べる
- 変わってたらDDNS更新をかける
- 更新の成功失敗はイベントログに書き込む
- 更新成功時はメールも投げちゃう
と、こんな感じか。
とりあえず自分のIPゲット
DDO使うとしたらば、そこが提供しているIP確認のURLを使えばサービスの死活監視もできていいかも知れない。
PowerShellで指定したURLのコンテンツを出力してみる、エラーは全部止めちゃえばいいや。
# 引数格納、URL形式
param([string]$url)
# 途中で例外を吐いたらここに飛び、抜ける
trap [Exception] {
echo $error[0].exception
break
}
# .NetFramework の WebClient クラスを拝借
$webCli = New-Object System.Net.WebClient
# コンテンツを取得
$body = $webCli.DownloadString($url)
# コンテンツ出力
echo $body
と、こんなもん?実行してみる。
PS > ./get_ip.ps1 http://info.ddo.jp/remote_addr.php
REMOTE_ADDR:125.4.***.***
REMOTE_ADDR:125.4.***.***
うーむ微妙な出力...
ちょっと調整しよう。
# 引数格納、URL形式
param([string]$url)
# 途中で例外を吐いたらここに飛び、抜ける
trap [Exception] {
echo $error[0].exception
break
}
# .NetFramework の WebClient クラスを拝借
$webCli = New-Object System.Net.WebClient
# コンテンツを取得
$body = $webCli.DownloadString($url)
# コンテンツ出力
# echo $body
# 改行を消しちゃう
$body = $body -replace "`n", ""
# コロン区切りで配列に突っ込む
$ip = $body.split(":")
# 出力して確認
echo $ip[0]
echo $ip[1]
IPアドレス部分だけ切り出すように、文字列の操作をちょっと入れてみた。
PS > ./get_ip.ps1 http://info.ddo.jp/remote_addr.php
REMOTE_ADDR
125.4.***.***
REMOTE_ADDR
125.4.***.***
これで "$ip[1]" にIPアドレスが綺麗に入った。
ローカルにテキストで保管して、数時間おきに比較しよう。
つづく。