通过AI助手实现一个nas定时任务更新阿里云域名解析

一.通过AI助手实现一个ip-domain.py的脚本

起一个Python脚本,ip-domain.py;注意已安装Python3.+的运行环境;将下面阿里云相关配置添加,注意这里引用了两个包,requests和alibabacloud_alidns20150109;执行前需要安装一下,然后python ip-domain.py就可以尝试一下效果喽。

这里使用的是通义灵码辅助,虽然给出的提示无法直接执行,但是框架算是有了,然后结合阿里云API的Python版进行调整,最终结果如下:

这里分三个步骤:

①获取本地IP

②获取域名对应阿里云解析

③判断当前解析IP与本地域名IP不一致时,进行更新

python 复制代码
# python ip-domain.py

import json
# pip install requests
import requests
from datetime import datetime
# pip install alibabacloud_alidns20150109==3.2.0
from alibabacloud_alidns20150109.client import Client as Alidns20150109Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_alidns20150109 import models as alidns_20150109_models
from alibabacloud_tea_util import models as util_models

# 阿里云相关配置
ALIYUN_ACCESS_KEY = "" # 阿里云查看accessKey
ALIYUN_SECRET_KEY = "" # 阿里云查看secretKey
ALIYUN_REGION_ID = ""  # 替换为您的实际地域ID
ALIYUN_DOMAIN_NAME = "" # 待解析的域名
ALIYUN_SUBDOMAIN = ""  # 带解析的子域名
ALIYUN_RECORD_TYPE = ""  # 解析类型为A记录
ALIYUN_RECORD_LINE = ""  # 默认线路或其他指定线路,默认default
ALIYUN_RECORD_ID = "" #解析记录的ID,可以通过域名列表F12查看

def get_local_ip():
    try:
        response = requests.get("https://api.ipify.org")
        return response.text.strip()
    except requests.exceptions.RequestException as e:
        print(f"Error getting local IP: {e}")
        return None

def get_current_dns_record(client, recordId):
    describe_domain_record_info_request = alidns_20150109_models.DescribeDomainRecordInfoRequest(
            record_id=recordId
        )
    runtime = util_models.RuntimeOptions()
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.describe_domain_record_info_with_options(describe_domain_record_info_request, runtime)
        print(f"GET DNS body: {response.body}")
        record_ip = response.body.value
        return record_ip
    except Exception as error:
        # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
        # 错误 message
        print(f"GET DNS error: {error}")
        return None

def update_dns_record(client, recordId, ipAddress, subDomain, recordType):
    request = alidns_20150109_models.UpdateDomainRecordRequest(
            record_id=recordId,
            value=ipAddress,
            rr=subDomain,
            type=recordType
        )
    runtime = util_models.RuntimeOptions()
    try:
        # 复制代码运行请自行打印 API 的返回值
        response = client.update_domain_record_with_options(request, runtime)
        print(f"UPDATE DNS response: {response}")
        return response
    except Exception as error:
        # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
        # 错误 message
        print(f"UPDATE DNS error: {error}")
        return None

def main():
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    # 初始化AcsClient实例
    config = open_api_models.Config( access_key_id=ALIYUN_ACCESS_KEY, access_key_secret=ALIYUN_SECRET_KEY )
    # Endpoint 请参考 https://api.aliyun.com/product/Alidns
    config.endpoint = f'alidns.cn-hangzhou.aliyuncs.com'
    client = Alidns20150109Client(config)

    local_ip = get_local_ip()
    print(f"{current_time} Local IP: {local_ip}")

    dns_record_ip = get_current_dns_record(client, ALIYUN_RECORD_ID)
    print(f"{current_time} DNS Record IP: {dns_record_ip}")

    if local_ip is not None and local_ip != dns_record_ip:
        update_dns_record(client, ALIYUN_RECORD_ID, local_ip, ALIYUN_SUBDOMAIN, ALIYUN_RECORD_TYPE)
        print(f"{current_time} DNS record updated successfully.")
    else:
        print(f"{current_time} IP addresses match. No update required.")


if __name__ == "__main__":
    main()

注意关于ALIYUN_RECORD_ID获取

二.找一个任务管理器进行调用,这里使用了nas上任务计划

控制面板,添加任务计划

用户这里选中root,否则需要授权,指定任务名称

制定一个每二十分钟执行一次的定时任务

将准备好的脚步执行语句填写上:

python 复制代码
python "/volume1/docker/localip/ip-domain.py" >> "/volume1/docker/localip/log.txt" 2>&1

点击确定,就可以等待执行喽;查看一下执行日志,然后更新啦;

如果此时你家支持外网IP访问的话,就可以使用域名访问自己nas了。

相关推荐
苹果企业签名分发5 小时前
腾讯云和火山云优劣势对比
云计算·腾讯云
SaaS_Product7 小时前
如何保护文件传输安全?文件传输加密
云计算·saas
阿里云大数据AI技术16 小时前
NL2SQL 再创佳绩!阿里云论文中选 SIGMOD 2025
大数据·人工智能·云计算
AKAMAI17 小时前
为何说分布式 AI 推理已成为下一代计算方式
人工智能·云原生·云计算
冬夜戏雪18 小时前
阿里云ubuntu安装mysql docker容器(拉,运行,测试完整版)
mysql·ubuntu·阿里云
容器魔方2 天前
持续领跑,华为云连续5年蝉联中国容器软件市场份额第一
云原生·容器·云计算
m0_694845572 天前
服务器怎么跑Python项目?
linux·运维·服务器·python·云计算
拓端研究室2 天前
专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载
人工智能·pdf·云计算
果子⌂2 天前
Docker高级管理
开发语言·docker·云计算·php
苹果企业签名分发2 天前
腾讯云分为几个区域
云计算·腾讯云