通过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了。

相关推荐
静听山水1 天前
腾讯云新开端口
云计算·腾讯云
CLOUD ACE1 天前
谷歌地图 | 3D 地图新功能:开发更简单,体验更丰富
云计算·云服务·谷歌云·谷歌地图·3d地图
StevenZeng学堂1 天前
【云原生安全篇】Cosign助力Harbor验证镜像实践
网络·安全·云原生·容器·kubernetes·云计算·go
碎像1 天前
阿里云对象存储OSS 速学
java·阿里云·oss
xybDIY1 天前
解决AWS Organizatiion邀请多个Linker账号数量限额问题
云计算·aws
mqiqe2 天前
云计算Openstack Neutron
云计算·openstack·perl
mqiqe2 天前
云计算Openstack Keystone
数据库·云计算·openstack
小安运维日记2 天前
Linux云计算 |【第四阶段】RDBMS1-DAY3
运维·服务器·sql·mysql·云计算·求职招聘
szqcloud2 天前
腾讯云SDK产品功能
云计算·音视频·腾讯云
QQ39575332372 天前
提升企业数字化转型的关键:选择合适的IT解决方案
大数据·云计算