dingguotu / ddns-aliyun

ddns-aliyun 是基于阿里云解析DNS服务的动态解析脚本,用于检测 IP 变化并更新至阿里云,支持多域名解析。支持 Linux 设备,包括树莓派(Raspberry Pi)和R4S。不需要手动添加解析,只要跟着教程来,小白都可以很快上手(软件都不会安装的除外)。
GNU General Public License v3.0
49 stars 16 forks source link

获取本地IP的方法可以简化一下 #6

Closed ohyeah521 closed 3 years ago

ohyeah521 commented 3 years ago
def getIPByDomain(ipDict, domain):
    try:
        myaddr = socket.getaddrinfo(domain, 'http')
        ipaddr = myaddr[0][4][0]
        ipDict[ipaddr] = ipDict.setdefault(ipaddr, 0) + 1
    except Exception as e:
        print('getIPByDomain', e)

用这个函数,轻松搞定,效率还高。

使用场景: 1、可以控制联网的路由器,在路由器中设置DDNS服务器,例如花生壳,然后同步域名 2、在群晖等NAS服务器中,设置好DDNS服务器,然后同步域名

不适用场景: 设置在内网中,不能控制路由器,也无其他带有DDNS的域名服务器

dingguotu commented 3 years ago

经过测试,socket.getaddrinfo()这个函数是获取Domain所绑定的远端IP,而非本地公网IP,当本地公网IP发生变化时无法监控到真实的IP,从而导致脚本失效

ohyeah521 commented 3 years ago

经过测试,socket.getaddrinfo()这个函数是获取Domain所绑定的远端IP,而非本地公网IP,当本地公网IP发生变化时无法监控到真实的IP,从而导致脚本失效

确实是它绑定的远端IP,但是像花生壳之类的DDNS服务器通常会在1-5分钟内就会更新最新的本地公网IP,所以只要检测的时间超过5分钟,都可以正常获取的。

dingguotu commented 3 years ago

我这段脚本是不需要花生壳的,所以不考虑这种场景,或者说的直白一点,都用花生壳之类现成的服务了,干嘛多跑一个脚本呢