ieServer.Net用 IPアドレス更新スクリプト(python版)

ieServer.Net用 IPアドレス更新スクリプト(python版)

ieServer.Net用 IPアドレス更新スクリプト(python版)

ieServer.Net用 IPアドレス更新スクリプト(python版) へのコメントはまだありません

このブログは ieServer.Net さんの無料ダイナミックDNSのドメインを利用して公開している。

ダイナミックDNSとは、固定IPアドレスを持っていない人が、自分のサーバーを独自ドメインっぽく公開する際に利用できる便利なサービスである。固定IPアドレスがないということは、自分が契約しているプロバイダーのルールに従って、一定期間ごとに自分のグローバルIPアドレスが変更される。ieServerさんにユーザー登録した際に、自身の好みのサブドメインを申請する。そして、現在のIPアドレスとそのサブドメインを関連付ける。申請したドメイン名をブラウザーに入力し、自サイトにアクセスすると、当然正しくトップページが表示される。しばらくはこれでOKなのだが、自分の契約しているプロバイダーが任意のタイミングであなたのグローバルIPアドレスを更新(変更)する。そうすると当然だが、申請したドメイン名で、自分のサーバーにアクセスできなくなる。

この問題を回避するために、一定期間ごとに、自分のグローバルIPアドレスをチェックし、IPアドレスの変更を検知したら、ieServer.Netへその変更を通知しなきゃならない。手動でやっても良いのだが、いつ変更されるかわからないグローバルIPアドレスの変更をチェックし続けるのは大変。なので、自分のIPアドレスを定期的に監視し、変更を検知したら、変更内容をieServer.Netへ自動通知するプログラムを作ってみました。

perlのスクリプトがネット上にあったんですが、IPアドレスの変更が長期間ない場合、一切ieServer.Netへ更新通知を行わないように見受けられたので、ちょっと改造してみようかなと。perlはしらないし、pythonも勉強時間5時間未満なんですが、どうせ書くなら pythonでと思い、作ってみましたので、公開します。良かったら使ってみてください。
以下のハイライトされている行を、ご自身の環境に合わせてみてください。

ダウンロードは こちらから ieserver-update.py

うまく動かないぞ! 等々ありましたら、コメント欄に文句書いてください。よろしく。

ダウンロードしたファイルを/usr/local/bin/ieserver/ へコピーし、実行権限をつける。
[bash]
$ sudo mkdir /usr/local/bin/ieserver
$ sudo cp iesrver-update.py /usr/local/bin/ieserver
$ sudo chmod 700 /usr/local/bin/ieserver/ieserver-update.py
[/bash]

cronに登録
[bash]
$ sudo crontab -e
[/bash]

登録内容
[diff]
5,15,25,35,45,55 * * * * /usr/local/bin/ieserver/ieserver-update.py
[/diff]

更新スクリプト本体

[python mark=”1,19-22,28″]
#!/usr/bin/python
# coding: UTF-8

# #############################################################################
# ieServer.Net: 無料ダイナミックDNS(DDNS)サービス用 IPアドレス更新スクリプト
# バージョン : 0.1
# 作成日時: 2014/01/21
# 更新日時: 2014/01/22
# 作者 : hiro
# #############################################################################

import commands
import os
import codecs
from datetime import datetime

#以下の部分をご自身の環境に合わせて、調整してください
MYPATH = “/usr/local/bin/ieserver/” #このpythonスクリプトの配置場所
SUBDOMAIN_NAME = “example” #サブドメイン名
DOMAIN_NAME = “dip.jp” #ドメイン名
PWD = “xxxxxxx” #パスワード

#強制アップデート時間帯
#このスクリプトの実行間隔を1時間以下(0〜59分)に設定している場合は変更する必要はありません。
#1日に一度ぐらいは更新処理をかけておいたほうが良いので、ご自身がCronで実行する
#時刻をセットしておいてください。(時間は二桁で記述してください。 2時なら 02 とする。)
FORCE_UPDATE_HOUR = “02”

#設定終わり(これ以下は変更する必要はありません)

#Crontab 設定方法
# sudo crontab -e として、以下のように記述(10分間隔で実行)
# 5,15,25,35,45,55 * * * * /usr/local/bin/ieserver/ieserver-update.py

REMOTE_ADDR_CHK = “http://ieserver.net/ipcheck.shtml”
DDNS_UPDATE = “http://ieserver.net/cgi-bin/dip.cgi”

currIp = commands.getoutput(“wget -q -O – ” + REMOTE_ADDR_CHK)

line = “none”

if os.path.exists(MYPATH + “saveip.txt”) == True:
f = open(MYPATH + “saveip.txt”,”r”)

for line in f:
dummy = line

f.close

hour = datetime.now().strftime(‘%H’)

if (currIp != line) or hour == FORCE_UPDATE_HOUR:

cmd = “wget -q -O – ‘”
cmd += DDNS_UPDATE + “?username=” + SUBDOMAIN_NAME
cmd += “&domain=” + DOMAIN_NAME
cmd += “&password=” + PWD
cmd += “&updatehost=1′”

ret = commands.getoutput(cmd)

#f2 = codecs.open(MYPATH + “return.html”,”w”,”eucjp”)
#f2.write(ret.decode(“eucjp”))
#f2.close

#222.222.222.222 に設定されています
if (currIp + u” に設定されています”) in ret.decode(“eucjp”):
f2 = open(MYPATH + “saveip.txt”,”w”)
f2.write(currIp)
f2.close

f2 = open(MYPATH + “update.log”,”a”)
line = datetime.now().strftime(‘%Y/%m/%d %H:%M:%S’)
line += “\tIP Address を更新しました。[” + currIp + “]\n”
f2.write(line)
f2.close

else:
f2 = open(MYPATH + “update.log”,”a”)
line = datetime.now().strftime(‘%Y/%m/%d %H:%M:%S’)
line += “\tIP Address の更新に失敗しました。\n”
f2.write(line)
f2.close

#else:
# f2 = open(MYPATH + “not-update.log”,”a”)
# line = datetime.now().strftime(‘%Y/%m/%d %H:%M:%S’)
# line += “\tIP Address 更新を保留しました。[” + currIp + “]\n”
# f2.write(line)
# f2.close

[/python]

About the author:

Leave a comment

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

Back to Top