通过python动态更新阿里云DNS解析,作为DDNS使用

花9元钱在阿里云上云注册一个“.top”的顶级域名,再利用下面的代码定时更新你家路由器的IP,这样就实现了DDNS的效果了。
下面Python代码中的AcsClient()、request.set_RecordId(“17741030***760”)这两个函数的参数请在https://help.aliyun.com/document_detail/53090.html 上查看。

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. import json
  4. import urllib
  5. import datetime
  6. from aliyunsdkcore.client import AcsClient
  7. from aliyunsdkcore.acs_exception.exceptions import ClientException
  8. from aliyunsdkcore.acs_exception.exceptions import ServerException
  9. from aliyunsdkalidns.request.v20150109.DescribeDomainRecordInfoRequest import DescribeDomainRecordInfoRequest
  10. from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
  11.  
  12. client = AcsClient(‘LTAIjOE53h******fI’, ‘JlvkmaCPek3SqqY*******GQbd8Zp’, ‘cn-hangzhou’)
  13.  
  14. request = DescribeDomainRecordInfoRequest()
  15. request.set_accept_format(‘json’)
  16.  
  17. request.set_RecordId("17741030***760")
  18.  
  19. response = client.do_action_with_exception(request)
  20. response = json.loads(response.decode())
  21. old_ip = response[‘Value’]
  22.  
  23. new_ip = urllib.urlopen("http://ip.42.pl/raw").read()
  24.  
  25. if old_ip != new_ip:
  26.     request = UpdateDomainRecordRequest()
  27.     request.set_accept_format(‘json’)
  28.     request.set_Value(new_ip)
  29.     request.set_Type("A")
  30.     request.set_RR("nas")
  31.     request.set_RecordId("17741030***760")
  32.     response = client.do_action_with_exception(request)
  33.     print datetime.datetime.now(),‘ ‘, old_ip, ‘ => ‘, new_ip
  34. else :
  35.     print datetime.datetime.now(),‘ IP has not changed.’, new_ip

原文作者: admin | 查看原帖

此条目发表在技术交流分类目录。将固定链接加入收藏夹。

《通过python动态更新阿里云DNS解析,作为DDNS使用》有4条回应

  1. admin说:

    在群晖的计划任务中,定时执行下面的命令,就可定时查询更新aliyun的DNS解析:

    1. #!/bin/ash
    2. sudo python /volume1/run/aliyundns.py >> /volume1/run/ddns.log
  2. admin说:

    今天又抽了点时间将IP更新程序优化了一下,调用方法: python aliyundns.py http://www.atoo.top,代码如下:

    1. # 阿里支DNS自动更新IP地址程序(Python3)
    2. # 文件名  : aliyundns.py
    3. # 调用方法: python3 aliyundns.py http://www.atoo.top
    4.  
    5. #!/usr/bin/env python3
    6. #coding=utf-8
    7.  
    8. import sys
    9. import json
    10. import urllib.request
    11. import datetime
    12. from aliyunsdkcore.client import AcsClient
    13. from aliyunsdkcore.acs_exception.exceptions import ClientException
    14. from aliyunsdkcore.acs_exception.exceptions import ServerException
    15. from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
    16. from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest
    17.  
    18. if len(sys.argv)<=1:
    19.     print( ‘Usage: python3 aliyundna.py http://www.atoo.top‘)
    20.     sys.exit(0)
    21.    
    22. accessKeyId = ‘LTAIjO23**PWBfI’
    23. accessSecret = ‘JlvkmaC***514aFM9Z14JGQbd8Zp’
    24.  
    25. DomainName = sys.argv[1]  
    26.  
    27. # print sys.argv[0], sys.argv[1], sys.argv[2]
    28.  
    29. client = AcsClient(accessKeyId, accessSecret, ‘cn-hangzhou’)
    30.  
    31. request = DescribeSubDomainRecordsRequest()
    32. request.set_accept_format(‘json’)
    33. request.set_SubDomain(DomainName)
    34. response = client.do_action_with_exception(request)
    35. # print response
    36. response = json.loads(response.decode())
    37. RecordId = response[‘DomainRecords’][‘Record’][0][‘RecordId’]
    38. RR       = response[‘DomainRecords’][‘Record’][0][‘RR’]
    39. old_ip   = response[‘DomainRecords’][‘Record’][0][‘Value’]
    40.  
    41. new_ip = urllib.request.urlopen("http://ip.42.pl/raw&quot;).read()
    42.  
    43.  
    44. if old_ip !=  str(new_ip, ‘utf-8’):
    45.     request = UpdateDomainRecordRequest()
    46.     request.set_accept_format(‘json’)
    47.  
    48.     request.set_Value(new_ip)
    49.     request.set_Type("A")
    50.     request.set_RR(RR)
    51.     request.set_RecordId(RecordId)
    52.  
    53.     response = client.do_action_with_exception(request)
    54.     print( datetime.datetime.now(), ‘ ‘, DomainName,‘: ‘, old_ip, ‘ => ‘, new_ip )
    55. # else :
    56. #    print datetime.datetime.now(), ‘ ‘, DomainName, ‘: IP has not changed.’, new_ip
    57.  
  3. BG6RSH说:

    还需要安装支持库:

    代码: 全选

    pip install aliyun-python-sdk-core # 安装阿里云SDK核心库
    pip install aliyun-python-sdk-ecs # 安装管理ECS的库
    pip install aliyun-python-sdk-alidns
    
  4. BG6RSH说:

    群晖中安装python3、pip3和阿里云Python SDK

    安装步骤:
    1、从群晖“套件中心”中安装python3应用;
    2、通过SSH登录群晖后台,并通过“sudo -i”命令进入root用户角色;
    3、进入python3应用目录”root@DiskStation:/var/packages/py3k/target/usr/local/bin#“
    4、运行下列命令安装pip3

    代码: 全选

    wget https://bootstrap.pypa.io/get-pip.py
    python3 get-pip.py   # 安装pip3
    pip3 -V          # 查看pip3版本
    pip3 install aliyun-python-sdk-core   # 安装阿里云SDK核心库
    pip3 install aliyun-python-sdk-alidns   #安装阿里云DNS库

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。