何かと話題の ChatGPT。
MyDNS 用の IP アドレス自動更新スクリプトの作成を試してみた。
最初の質問(イマイチ)
- DDNSとしてMyDNSを使っている環境で、自宅のグローバルIPアドレスが変わったことを検出してDDNSを更新するPythonスクリプトを書いて。
-
以下は、DDNSとしてMyDNSを使っている環境で、自宅のグローバルIPアドレスが変わったことを検出してDDNSを更新するPythonスクリプトの例です。
import requests # MyDNSのユーザーIDとパスワード MYDNS_ID = "YOUR_MYDNS_ID" MYDNS_PASS = "YOUR_MYDNS_PASSWORD" # 現在のグローバルIPアドレスを取得 current_ip = requests.get("http://checkip.dyndns.org").text.strip().split(" ")[-1] # MyDNSに登録されているグローバルIPアドレスを取得 url = f"https://www.mydns.jp/login.html?username={MYDNS_ID}&password={MYDNS_PASS}" res = requests.get(url) registered_ip = res.text.strip().split(" ")[-1] # グローバルIPアドレスが変わっていた場合、MyDNSに更新 if current_ip != registered_ip: update_url = f"https://www.mydns.jp/directip.html?username={MYDNS_ID}&password={MYDNS_PASS}&ip={current_ip}" res = requests.get(update_url) if res.status_code == 200: print("DDNS update successful.") else: print("DDNS update failed.") else: print("IP address did not change.")
このスクリプトを定期的に実行することで、自宅のグローバルIPアドレスが変わった際にDDNSを更新することができます。
ふむふむ。実際に試してみよう。
スクリプトをコピーして、冒頭に python スクリプトであることを示す #!/usr/bin/python3 を追加してからコードを貼り付ける。ID と PW は正式なものに変更する。
で、作成したファイルに実行権限を chmod +x test.py 等で付与する。
ちなみに現在の IP アドレスチェックは http://checkip.dyndns.org で、表示は
Current IP Address: 111.111.111.111
みたいになっている。
実行してみた結果は、
$ sudo ./jisaba.life.py
DDNS update successful.
だけど、変更がなくても毎回「DDNS update successful.」になるからダメ。原因は MyDNS に登録されている IP アドレスの取得に失敗しているから。
# MyDNSに登録されているグローバルIPアドレスを取得
url = f"https://www.mydns.jp/login.html?username={MYDNS_ID}&password={MYDNS_PASS}"
res = requests.get(url)
registered_ip = res.text.strip().split(" ")[-1]
解決方法としては、ローカルのファイルへ以前に確認した IP アドレスを保存しておいて、現在の IP アドレスと比較、変更あれば通知すれば良い。
それじゃあということで、次の提案をしてみる。
追加の質問(成功)
- グローバルIPアドレスを保存して比較する方法に変更してみて。
-
以下は、グローバルIPアドレスを保存して比較する方法に変更したPythonスクリプトの例です。
import requests # MyDNSのユーザーIDとパスワード MYDNS_ID = "YOUR_MYDNS_ID" MYDNS_PASS = "YOUR_MYDNS_PASSWORD" # IPアドレスを保存するファイル名 IP_FILE = "ip.txt" # 現在のグローバルIPアドレスを取得 current_ip = requests.get("http://checkip.dyndns.org").text.strip().split(" ")[-1] # 保存されているグローバルIPアドレスを取得 try: with open(IP_FILE, "r") as f: registered_ip = f.read() except FileNotFoundError: registered_ip = "" # グローバルIPアドレスが変わっていた場合、MyDNSに更新して保存 if current_ip != registered_ip: update_url = f"https://www.mydns.jp/directip.html?username={MYDNS_ID}&password={MYDNS_PASS}&ip={current_ip}" res = requests.get(update_url) if res.status_code == 200: with open(IP_FILE, "w") as f: f.write(current_ip) print("DDNS update successful.") else: print("DDNS update failed.") else: print("IP address did not change.")
このスクリプトを定期的に実行することで、自宅のグローバルIPアドレスが変わった際にDDNSを更新することができます。
お、今度は良さそう。試してみよう。
※最初の実行
$ sudo ./jisaba.life.py
DDNS update successful.
※ip.txtが生成された2回目は、
$ sudo ./jisaba.life.py
IP address did not change.
ということで、正常に更新チェックができた。
感想
今回のように単純なスクリプトなら ChatGPT に頼る必要はないけれど、意図するプログラムを正確に文章で表現できるようになれば、自分のようなプログラマーでも何でもない一般人でもそれっぽいことが出来てしまう・・・すごい世の中になったなぁ。
コメント