跳至主要內容

使用python脚本更新阿里DNS记录

Change Lee...大约 1 分钟开发Python阿里DNS

在阿里申请域名,实名制后,可以通过官方的sdk 进行动态更新域名记录

前提:
  1. 有域名,且在阿里管理
  2. 已经配置好一条记录
  3. 准备好自己的AK 信息
  4. 安装需要的包,pip install aliyun-python-sdk-core aliyun-python-sdk-alidns
  5. 在当前目录准备好 ip.txt 文件存放当前ip
    官方说明open in new window
脚本使用的是Python3 写的
#!/usr/bin/python3
#coding=utf-8
def get_ip():
    import requests
    import re
    import time 
    #生成当前时间
    now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    #获取公网IP
    text=requests.get("http://myip.ipip.net").text
    ip = re.findall(r'\d+.\d+.\d+.\d+',text)
    #读取旧IP
    with open("ip.txt",'r') as f:
        oldip = f.readline().split('\n')[0]
        f.close()
    #判断
    if ip[0] != oldip:
        #更新DNS记录
        updatedns(ip[0])
        #写入新IP到文件
        with open("ip.txt",'w') as f:
            f.write(ip[0])
            f.close()
        #更新记录
        with open("updatedns.log",'a+') as log:
            mess = now  + "\t旧IP:" + oldip + "\t新IP:" + ip[0]+ "\n"
            log.write(mess)
            log.close()
    else:
        with open("updatedns.log",'a+') as log:
            mess = now  + "\t当前IP没有发生变化\n"
            log.write(mess)
            log.close()

    #print (len(ip[0]))
    #print ("1:%s" % ip[0])
    #print (len(oldip))
    #print (oldip)

def updatedns(IP):
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkcore.acs_exception.exceptions import ClientException
    from aliyunsdkcore.acs_exception.exceptions import ServerException
    from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest

    client = AcsClient('youraccessid', 'youraccesskey', 'cn-hangzhou')

    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    request.set_RecordId("21474773075837xxx")
    request.set_RR("home")
    request.set_Type("A")
    request.set_Value(IP)

    response = client.do_action_with_exception(request)
    # python2:  print(response) 
    print(str(response, encoding='utf-8'))

if __name__ == '__main__':
    get_ip()
    print("It's ok")
上次编辑于:
贡献者: change
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3