首页 > 编程语言 >python版本简易阿里云ddns

python版本简易阿里云ddns

时间:2024-03-08 12:56:23浏览次数:27  
标签:__ domain rr record python self 简易 client ddns

import os
import sys
from datetime import datetime
from alibabacloud_alidns20150109.client import Client as DNSClient
from alibabacloud_tea_openapi import models as api_models
from alibabacloud_alidns20150109 import models as dns_models
import requests

class DDNS:
    domain = 'abc.com' #你的域名
    rr = 'www' #子域名
    
    def __init__(self) -> None:
        pass
    def initialization(self) -> DNSClient:
        AccessKeyId = 'xxxxxx' # 阿里云自行获取
        AccessKeySecret = 'xxxxxxx' # 阿里云自行获取
        api_conf = api_models.Config(access_key_id=AccessKeyId,access_key_secret=AccessKeySecret)
        return DNSClient(api_conf)
    def getIP(self) ->str:

    #这里需要自备一个获取ip地址的页面,自编代码来读取页面中的纯ip地址 如 66:220:232:111

   #我的页面返回内容是[123:22:111:66]形式,所以代码是去掉左右两个[]
        return requests.get('一个能获取当前主机ip地址的页面').text[1:-1]
    def domain_recored(self,client:DNSClient,domain:str,rr:str):
        req = dns_models.DescribeDomainRecordsRequest(direction=None,domain_name=domain,rrkey_word=rr,type='A')
        resp = client.describe_domain_records(req)
        record = resp.body.domain_records.record[0]
        return record
    def update_record(self,client:DNSClient,rr,rid,ip):
        req = dns_models.UpdateDomainRecordRequest(rr=rr,record_id=rid,value=ip,type='A')
        resp = client.update_domain_record(req)
    
    def log(self,message):
        cur_date = datetime.now()
        path = os.path.dirname(__file__) #macOS不加路径文件会创建在 “/user/用户名/” 下
        fname = path+'/'+cur_date.strftime("%Y-%m-%d") + '.log'
        message = cur_date.strftime("[%Y-%m-%d %H:%M:%S] ") + message +"\n"
        with open(file=fname,mode='a',encoding='utf-8') as file:
            file.writelines(message)
            file.flush()
            file.close()
        print(message)

    def main(self):
        client = self.initialization()
        record = self.domain_recored(client,self.domain,self.rr)
        local = self.getIP()
        log_str = 'local='+ curip + ' record='+record.value
        
        if local != record.value:
            #更新记录,写日志
            self.update_record(client,self.rr,record.record_id,local)
            record_new = self.domain_recored(client,self.domain,self.rr)
            log_str += ' update record '+record_new.value
        self.log(log_str)

if __name__ == '__main__':
    ddns = DDNS()
    ddns.main()

命名为alidddns.py完结

需要加入crontab


#添加ddns到mac crontab 每两分钟同步一次

*/2 * * * * /usr/local/bin/python3 /Users/tophalo/ddns/aliddns.py
Crontab使用方法看我另一篇避坑文章

标签:__,domain,rr,record,python,self,简易,client,ddns
From: https://www.cnblogs.com/ifar/p/18060760

相关文章

  • python3代码转换成docker镜像启动
    1.打包成docker镜像来使用切到Tags,搜索3.11选择python:3.11.4-slim-bullseye2.在压测脚本的根目录中,创建Dockerfile文件: FROMpython:3.11.4-slim-bullseyeWORKDIR/opt/appCOPYrequirements.txt./ENVhost=nullENVport=nullENVonlyResetJob=nullRUNpip......
  • 第101天-python-flask简介
    1.flask1.1、flask简介Flask简介:Flask诞生于2010年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。其WSGI工具箱采用Werkzeug(路由......
  • python进行数据下钻的简单测试——非正式版
    具体代码//这个是全国地图下钻到省市地图,我这里以湖南长沙为例:chart_d3a639f3511c48ba8020864474f8950d.on('click',function(param){varselected=param.name;if(selected){switch(selected){......
  • python基础快速入门(二)
    数据类型:Python中常见的数据类型包括数字(int、float、complex)和字符串。python的数值类型会自动转换,相对灵活,整数(int):例如,在32位机器上,整数的位数为32位,取值范围为-2**31到2**31-1,(4个G,)在64位系统上,整数的位数为64位,取值范围为-2**63到2**63-1。长整数(long):Python中......
  • Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)
    Python作为一门灵活、充满技巧的语言,有着很多奇技淫巧,今天小编就跟大家分享一下在平时工作中所积累的技巧,这里面既有语法上的技巧,也有库函数的应用,可以帮助大家在平时的工作中提升效率,规避某些错误,一起来看看吧。列表推导式字典推导式使用zip进行并行迭代使用enumerate获......
  • python用win32com.client驱动excel时如何控制是否更新链接?
    python中Pywin32库的win32com.clien模块在驱动Excel时有诸多好处:1、可以决定是否显式地打开Excel应用,调试的时候所见即所得;2、可以用近乎一样的VBA语法,几乎能实现VBA可以实现的所有功能;3、它甚至也支持直接调用Excel中已经写好的宏文件。那它有什么缺点呢?我觉得最主要......
  • Python正则表达式的语句具体的实用例子_2
    importres="""<divclass='jay'><spanid='1'>周杰伦</span></div><divclass='augus'><spanid='2'>马宁</span></div><divclass='tom'><s......
  • Python正则表达式的具体应用例子及注释
    lst=re.findall(r'\d+',"我的电话号是:10086,我女朋友的电话是:10010")print(lst)#finditer:匹配字符串中所有的内容【返回的是迭代器】,从迭代中拿内容,用“.group”num=re.finditer(r"\d+","我的电话号是:10086,我女朋友的电话是:10010")foriinnum:print(i)""......
  • 7-1 jmu-python-输入输出-计算字符串中的数
    7-1jmu-python-输入输出-计算字符串中的数分数10全屏浏览切换布局作者 郑如滨单位 集美大学将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。输入格式:一行字符串,字符串中的数之间用1个空格或者多个空格分隔。输出格式:第1行:输......
  • 内部UI自动化测试培训之python基础
    这个文档的由来是公司内部UI自动化测试培训的资料。部门为了减少测试工作量,准备做UI自动化测试。我写python,其他同事都是java,所以python基础和UI自动化测试selenium的培训就由我来完成。完整教程包括4篇内容,本篇是python的基础内容,高手请跳过。虽然是基础,但是可以看做是一个pyth......