這將簡化事情確實如此。至少對easydns來說,ez-ipupdate實際上只是用Basic HTTP Authentication執行一個簡單的GET請求。
下面的代碼是一個起點。它已經過測試,它的工作。它需要來自pypi的requests
和ipgetter
模塊。
import time
import ipgetter
import requests
import datetime
from requests.auth import HTTPBasicAuth
def update(user, auth_token, hostname, partner="easydns", cache_fn=None):
if cache_fn is None:
cache_fn = "/var/cache/ez-ipupdate/default-cache"
my_ip = ipgetter.myip()
with open(cache_fn) as fobj:
secs, ip = fobj.read().strip().split(",")
if ip == my_ip:
return "IP doesn't need updating"
last_update = datetime.datetime.fromtimestamp(int(secs))
diff = datetime.datetime.now() - last_update
minutes_since_last_update = diff.total_seconds()/60.0
if minutes_since_last_update < 4.99:
return "Too short time since last update..."
with open(cache_fn, "wb") as fobj:
fobj.write("{},{}\n".format(int(time.time()), my_ip))
url = (
'https://api.cp.easydns.com/dyn/ez-ipupdate.php?action=edit'
'&myip={address}&partner={partner}&wildcard=OFF&hostname={host}'
).format(address=my_ip, partner=partner, host=hostname)
r = requests.get(url, auth=HTTPBasicAuth(user, auth_token))
return "{} {}".format(r.status_code, r.reason)
現在只需定期運行一個調用更新函數的腳本,例如,使用crontab -e
並添加以下行:
*/5 * * * * /path/to/script.py