2009年5月1日金曜日

PowerShellでDDNSサービスを更新(1)

自宅に WindowsでWebサーバを立てる羽目 になりそうだが、ドメインもってません。
 

ダイナミック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.***.***


うーむ微妙な出力...
ちょっと調整しよう。
 

# 引数格納、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.***.***


これで "$ip[1]" にIPアドレスが綺麗に入った。
ローカルにテキストで保管して、数時間おきに比較しよう。
 
 

つづく。