动态域名解析【腾讯云】
前提条件:1.自家的公网IP。2.腾讯云域名
云解析DNS页面,创建一条记录,记录值先随便填
pip install tencentcloud-sdk-python-dnspod
执行python脚本,其中需要修改的变量有:Your_Path,SecretId,SecretKey,home.xxxxxx.com
DDNS_DEMO.py
import json
import types
import requests
import datetime
import logging
from logging.handlers import RotatingFileHandler
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.dnspod.v20210323 import dnspod_client, models
# 配置日志记录器
def setup_logger():
# 创建一个logger
logger = logging.getLogger('DDNS')
# 设置日志记录等级
logger.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件,
# 最多备份5个日志文件,每个日志文件最大10MB
handler = RotatingFileHandler(
'C:\\Your_Path\\DDNS.log', maxBytes=10*1024*1024, backupCount=5)
handler.setLevel(logging.DEBUG)
# 创建一个formatter,定义日志的格式
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
# 给logger添加handler
logger.addHandler(handler)
return logger
# 设置日志记录器
logger = setup_logger()
try:
# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,
# 并威胁账号下所有资源的安全性。以下代码示例仅供参考,
# 建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
cred = credential.Credential(
"SecretId", "SecretKey")
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "dnspod.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = dnspod_client.DnspodClient(cred, "", clientProfile)
# 实例化一个请求对象,每个接口都会对应一个request对象
# 获取记录
req = models.DescribeRecordFilterListRequest()
params = {
"Domain": "home.xxxxxx.com",
"RecordType": ["A"] #ipv4
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个DescribeRecordResponse的实例,与请求对象对应
resp = client.DescribeRecordFilterList(req)
if resp.RecordList is not None and resp.RecordList:
ip = resp.RecordList[0].Value
recordId = resp.RecordList[0].RecordId
# 输出json格式的字符串回包
logger.info('remote ip: %s', ip)
# 获取公网IP
response = requests.get('https://httpbin.org/ip')
response.raise_for_status() # 检查请求是否成功
ipCurrent = response.json()['origin']
logger.info('current local ip: %s', ipCurrent)
if ipCurrent is not None and ipCurrent != ip:
logger.info('start update remote ip...')
# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.ModifyRecordRequest()
params = {
"Domain": "home.xxxxxx.com",
"RecordType": "A",
"RecordLine": "默认",
"Value": ipCurrent,
"RecordId": recordId
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个ModifyRecordResponse的实例,与请求对象对应
resp = client.ModifyRecord(req)
# 输出json格式的字符串回包
logger.info(resp.to_json_string())
logger.info('end update remote ip')
else:
logger.info('no need update remote ip')
except Exception as err:
logger.error(err)
云解析DNS页面,检查记录值是否被更新
创建定时任务,执行python脚本
日志查看
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 故宫而过
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

