MENU
カテゴリー
アーカイブ

ChatGPT で MyDNS のアドレス更新スクリプトを作ってみた

何かと話題の 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 に頼る必要はないけれど、意図するプログラムを正確に文章で表現できるようになれば、自分のようなプログラマーでも何でもない一般人でもそれっぽいことが出来てしまう・・・すごい世の中になったなぁ。

コメント

コメントする

目次