Python替代ezipupdate?

2024-04-18 02:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从NAT后面更新我的动态dns条目,ez ipupdate不支持。它使用本地绑定的ip而不是外部ip地址。你知道吗

我的提供商easydns只在我的平台Linux上明确支持ez-ipupdate解决方案。你知道吗

我没有编写一个基于python的deamon来获取外部IP地址并定期将其放入ez ipupdate config文件,而是想知道是否有办法用python脚本替换整个过程。也许这会使事情简单化。你知道吗

(我在谷歌上找不到任何关于这个的信息,所以我在这里问和回答这个问题是为了帮助其他人。)


Tags: ipconfigdnslinux地址动态条目平台
1条回答
网友
1楼 · 发布于 2024-04-18 02:31:49

这确实会使事情简单化。至少对于easydns来说,ez ipupdate实际上只执行一个简单的GET请求和基本的HTTP身份验证。你知道吗

下面的代码是一个起点。已经测试过了,很有效。它需要pypi的requestsipgetter模块。你知道吗

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)

现在只需运行一个脚本,定期调用update函数,例如使用crontab -e并添加以下行:

*/5 * * * * /path/to/script.py

相关问题 更多 >