python配合阿里云域名解析实现DDNS功能

2023-05-16

前置工作

  1. 安装阿里模块
pip install aliyun-python-sdk-core-v3 
pip install aliyun-python-sdk-alidns==3.0.1
  1. 阿里云获取 AccessKey

实现代码

import os
import socket
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.DeleteSubDomainRecordsRequest import DeleteSubDomainRecordsRequest
from urllib.request import urlopen
import json


class DnsController:
    access_key_id = ""
    access_key_secret = ""

    region = ""
    # 时区
    record_type = "A"

    domain = "langzihan.top"
    name_ipv4 = ["p330"]

    def __init__(self):
        self.client = AcsClient(
            self.access_key_id,
            self.access_key_secret,
            self.region
        )

    # 添加新的域名解析记录
    def add(self, DomainName, RR, Type, Value):
        from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest
        request = AddDomainRecordRequest()
        request.set_accept_format('json')
        request.set_DomainName(DomainName)
        request.set_RR(RR)
        request.set_Type(Type)
        request.set_Value(Value)
        response = self.client.do_action_with_exception(request)

    # 实现ddns
    def update_target_dns(self, ip_address):
        request = DescribeSubDomainRecordsRequest()
        request.set_accept_format('json')
        request.set_DomainName(self.domain)

        for item in self.name_ipv4:
            request.set_SubDomain(item + '.' + self.domain)
            response = self.client.do_action_with_exception(request)
            domain_list = json.loads(response)

            if domain_list['TotalCount'] == 0:
                self.add(self.domain, item, self.record_type, ip_address)
            else:
                if domain_list['DomainRecords']['Record'][0]['Value'].strip() != ip_address.strip():
                    request = DeleteSubDomainRecordsRequest()
                    request.set_accept_format('json')
                    request.set_DomainName(self.domain)
                    request.set_RR(item)
                    response = self.client.do_action_with_exception(request)
                    self.add(self.domain, item, self.record_type, ip_address)


def main():
    root_path = '.'
    log_path = root_path + '/ip_log.log'
    fa = open(log_path, 'a', encoding='utf-8')
    cur_ip = socket.gethostbyname(socket.gethostname())
    if not os.path.isfile(log_path) and fa.read().strip() == '':
        fa.write(cur_ip + '##')
        DnsController().update_target_dns(cur_ip)
        fa.close()
        return 0

    with open(log_path, 'r', encoding='utf-8') as fr:
        old_ip = fr.read().strip('##').split('##')[-1]
        if old_ip != cur_ip or old_ip is None:
            # print('old:', old_ip)
            fa.write(cur_ip + '##')
            DnsController().update_target_dns(cur_ip)

    fa.close()


if __name__ == '__main__':
    main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python配合阿里云域名解析实现DDNS功能 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • 如何检索分配给 Django 中的组的所有权限

    我正在执行一项任务来检索分配给 Django 中的组的一组权限 我可以使用以下代码获取创建的组 但无法使用它来获取分配给它们的权限 from django contrib auth models import Group Permissio
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • sy.sympify(str(表达式)) 不等于表达式

    据我了解 str将 SymPy 表达式转换为字符串并sympify将字符串转换为 SymPy 表达式 因此 我希望以下内容成立 对于合理的表达 gt gt gt sy sympify str expr expr True 我尝试过这个 确实
  • 如何在动态执行的代码字符串中使用inspect.getsource?

    如果我在文件中有这段代码 import inspect def sample p1 print p1 return 1 print inspect getsource sample 当我运行脚本时 它按预期工作 在最后一行 源代码sampl
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 当我从本地计算机更改为虚拟主机时,从 python 脚本调用 pdftotext 不起作用

    我编写了一个小的 python 脚本来解析 提取 PDF 中的信息 我在本地机器上测试了它 我有 python 2 6 2 和 pdftotext 版本 0 12 4 我正在尝试在我的虚拟主机服务器 dreamhost 上运行它 它有 py
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 无法在我的程序中使用 matplotlib 函数

    我正在 Windows 10 中运行 Anaconda 安装 conda 版本 4 3 8 这是我尝试在 python 命令行中运行的代码 import matplotlib pyplot as plt x 1 2 3 4 y 5 6 7
  • Django Web 应用程序中的 SMTP 问题

    我被要求向使用 Django Python 框架实现的现有程序添加一个功能 此功能将允许用户单击一个按钮 该按钮将显示一个小对话框 表单以输入值 我确实编写了一些代码 显示电子邮件已发送的消息 但实际上 它没有发送 My code from
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 导入目录下的所有模块

    有没有办法导入当前目录中的所有模块 并返回它们的列表 例如 对于包含以下内容的目录 mod py mod2 py mod3 py 它会给你
  • 如何全局安装 Python(开发)依赖项,以便我不必在每个 venv 中重新安装它们?

    我希望在为每个项目创建的每个 venv 虚拟环境 中都可以使用一些 Python 依赖项 例如 black flake8 和 pytest 这可能吗 如果可以 如何实现 我想安装这三个once在我的主要 Python 安装下 我必须在启动新
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 如何在supervisord中设置组?

    因此 我正在设置 Supervisord 并尝试控制多个进程 并且一切正常 现在我想设置一个组 以便我可以启动 停止不同的进程集 而不是全部或全无 这是我的配置文件的片段 group tapjoy programs tapjoy game1
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin

随机推荐

  • 计算机基础知识之-线程&进程

    线程 amp 进程 死锁 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力 然而 xff0c 并发执行也带来了新的问题 死锁 死锁是指两个或两个以上的进程 xff08 线程 xff09 在运行过程中因争夺资源而造成的一种僵局
  • linux下mysql访问速度缓慢并且ssh连接缓慢

    最近发现ssh连接的时候却很慢 xff0c ping的速度非常好 xff0c 让人误以为是ssh连接不上 分析结果 xff0c 主要原因为 xff1a DNS的解析IP导致 xff0c 可分别使用以下几种分析处理方式 1 linux ssh
  • vmware安装centos8之网络配置

    1 下载vmware 2 新建虚拟机 3 网络配置 3 1 查看自己主机ip 网关等信息 xff0c 例如个人主机信息如下 3 2 设置vmware网络连接 vmware gt 我的计算机 gt 设置 gt 网络适配器 gt 网络连接 gt
  • Ubuntu连上wifi后,能内网通讯,但访问不了外网的问题解决办法

    最近用Jetson Nano遇到了这样一个问题 系统时间一直定格在了2月7日的晚上 每次重启 xff0c 就会回到那个时间 经过一番检测 xff0c 发现是因为连不上外网 xff0c 导致不能同步时间 然后按照常规方法 xff0c 检测DN
  • simplegui自定义字库——UTF8版

    写作背景 日前 xff0c 笔者在学习simplegui xff0c 制作了一套适用于simplegui的自定义字库 UTF8版 在和群友交流的时候感觉自己讲不清楚 xff0c 经过分析是自己还没能深入理解相关知识 xff01 xff01
  • StarWind Software Image Converter:虚拟机镜像转换工具,可将 img 文件转换为 VMware虚拟机 Vmdk 文件

    然后添加官网下载解压好的 img文件 xff1a
  • 工作站启动不起来的解决方案

    我是一个运维小白 xff0c 今天遇到了公司工作站启动不起来的情况 工作站是DELL的 xff0c 尝试强制启动了好几次 xff0c 都没有启动起来 拔了电源 xff0c 静置一段时间后 xff0c 再插上电源 xff0c 再启动工作站 x
  • VNC连不上服务器,无法远程控制

    我是在服务器上添加了分帐户 xff0c 然后使用vnc连接 xff0c 遇到了vnc连不上的问题 有好几个问题导致这个原因 xff0c 这里说两个我遇到的 xff1a 第一 xff1a vnc连接失败 xff0c 此时 xff0c 可以试试
  • UCOS III移植到STM32F407过程

    UCOS III移植步骤 第一步 首先打开找到Mirium的官网 找到下载区域 按照MCU制造商来查找 看图 来下载对应的UCOS III系统 由于官方并没有直接对stm32f407系列的移植 所以我们就在官网上找到和stm32f407相近
  • Android 7.0手机打开相机或相册报错解决方案

    原文地址 xff1a http www jianshu com p edec55192944 在android 7 0以上的手机上打开相机 相册会报如下错误 android os FileUriExposedException expose
  • Python爬虫:用BeautifulSoup进行NBA数据爬取

    爬虫主要就是要过滤掉网页中无用的信息 xff0c 抓取网页中有用的信息 一般的爬虫架构为 xff1a 在python爬虫之前先要对网页的结构知识有一定的了解 xff0c 如网页的标签 xff0c 网页的语言等知识 xff0c 推荐去W3Sc
  • Python 不带参数和带参数装饰器

    链接1 xff1a https blog csdn net u010358168 article details 77773199 链接2 xff1a https blog csdn net qq 34788903 article deta
  • VLAN网络支持ipv6的交换机和虚机配置

    VLAN支持ipv6的交换机和虚机配置 前言一 创建VLAN网络并配置交换机1 规划并在OpenStack上创建 VLAN网络2 在交换机上配置VLAN 二 Ubuntu虚机配置1 创建虚机2 在OpenStack上查看port3 登录虚机
  • MyBatis-Plus-Generator 3.5.2 配置详解

    官方用例 所需MAVEN依赖 span class token tag span class token tag span class token punctuation lt span dependencies span span cla
  • 用keras搭建一个简单的一维卷积神经网络

    编程环境 xff1a python 3 6 8 tensorflow 1 12 3 点击下载离线包 matplotlib 3 1 2 numpy 1 17 4 数据集说明 xff1a 我所采用的数据集 xff0c 是我自己构建的一个网络流量
  • java中的编码转换(以utf8和gbk为例)

    在正常javaweb开发中经常会发现字符转换的需求 xff0c 会存在中文字符转换乱码的现象 xff0c 如何解决以及其转换原理我至今懵懵懂懂 xff0c 于是专门写了个测试代码进行尝试 xff0c 总算理清了编码 xff0c 先上结论 x
  • ERROR com.alibaba.druid.pool.DruidDataSource - init datasource error, url jdbcmysql

    部署一个开源项目报错 ERROR com alibaba druid pool DruidDataSource init datasource error url jdbcmysql 很明显是数据库连接错误 但排除一下错误后 xff0c 我
  • KVM下的Windows虚拟机盘符扩容

    今天发现工作站上的一个Windows虚拟机的一个盘符没有空间了 xff0c 需要为其进行扩容 探究过程如下 xff1a 1 确认需要调整的盘符对应的文件 2 关闭虚拟机 3 调整存储文件的大小 打开终端 xff0c 进入文件在所目录 xff
  • IDEA lombok包的@Data注解报错找不到符号

    问题描述 xff1a 工程编译报错 java 找不到符号 问题抽象 定位错误可以发现是getter setter的问题 由于采用了 64 Data注解 xff0c 所以优先考虑是lombok的问题 解决方案 首先排除以下可能 lombok插
  • python配合阿里云域名解析实现DDNS功能

    前置工作 安装阿里模块 pip span class token function install span aliyun python sdk core v3 pip span class token function install s