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

相关推荐
九河云27 分钟前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
神一样的老师35 分钟前
利用亚马逊AWS IoT核心和MQTT进行数据采集的综合指南
云计算·aws
昔我往昔7 小时前
阿里云文本内容安全处理
安全·阿里云·云计算
写代码的学渣9 小时前
Linux云计算个人学习总结(一)
linux·运维·云计算
NETFARMER运营坛10 小时前
如何优化 B2B 转化率?这些步骤你不可不知
大数据·安全·阿里云·ai·ai写作
林农11 小时前
C02S11-Linux系统的安全与控制
linux·云计算
danns88815 小时前
什么是 AWS PrivateLink
云计算·aws
shiran小坚果17 小时前
AWS RDS MySQL内存使用
数据库·mysql·云计算·database·aws
武汉唯众智创18 小时前
职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨
大数据·云计算·物联网传感器技术