吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9028|回复: 18
收起左侧

[Python 转载] 腾讯域名 ddns 实现动态域名解析支持ipv6和ipv4

 关闭 [复制链接]
ZFX520 发表于 2022-2-27 20:42
本帖最后由 ZFX520 于 2022-2-27 21:12 编辑

简介
DDNS是动态域名服务(Dynamic Domain Name Server)的缩写,可以实现固定域名到动态IP地址之间的解析。 通常情况下,用户每次连接因特网时都会从ISP得到一个动态IP地址,即用户每次连接因特网得到的IP地址都不同。
前期准备
首先你要有一个腾讯云的域名,进入腾讯云的DNSPOD然后点击右上角头像选择api秘钥进入后点击腾讯云api秘钥在点击新建秘钥
3bab6b7983c09a88383e3d6bbf69b7a.png
新建完成后会有2个参数,一个是SecretId另一个是SecretKey,我们吧这两个参数记下来。
cd2783abdf804dcbb6460401b665d51.png
然后去域名解析那里解析一个域名,如果用ipv6的地址就设置解析记录类型为AAAA,先随便填写一个记录值(简单点的记录值,fe80::ac34),ipv4同理
最后来安装腾讯云的Python包
[Python] 纯文本查看 复制代码
pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python

至此准备工作完成。
源码展示
ddns.py
[Python] 纯文本查看 复制代码
import json,os,requests,sys,netifaces,time
#from gmail import email
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models
def start(ym,jlz):
    try:
        cred = credential.Credential("这里填写上面获取得SecretId", "这里填写SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "dnspod.tencentcloudapi.com"
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = dnspod_client.DnspodClient(cred, "", clientProfile)
        req = models.DescribeRecordListRequest()
        params = {
            "Domain": ym,
            "Subdomain": jlz
        }
        req.from_json_string(json.dumps(params))
        resp = client.DescribeRecordList(req).to_json_string()
        resp = json.loads(resp)
        recordlist = resp["RecordList"]
        for record in recordlist:
            recordid = record['RecordId']
        return recordid
    except TencentCloudSDKException as err:
        print(err)
        #email("DDNS", str(err))
        sys.exit()

def fast(ym,jlz,type1):
    try:
        recordid = int(start(ym,jlz))
        if type1 == "AAAA":
            ip = netifaces.ifaddresses('eth0')[netifaces.AF_INET6][0]['addr'].replace("%eth0","")
        elif type1 == "A":
            ip = requests.get("http://members.3322.org/dyndns/getip").text
        else:
            print("程序不支持其他记录类型,只支持AAAA和A")
            sys.exit()
        cred = credential.Credential("这里填写上面获取得SecretId", "这里填写SecretKey")
        httpProfile = HttpProfile()
        httpProfile.endpoint = "dnspod.tencentcloudapi.com"
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile
        client = dnspod_client.DnspodClient(cred, "", clientProfile)
        req = models.ModifyRecordRequest()
        params = {
            "Domain": ym,
            "SubDomain": jlz,
            "RecordType": type1,
            "RecordLine": "默认",
            "Value": ip,
            "RecordId": recordid
        }
        req.from_json_string(json.dumps(params))
        resp = client.ModifyRecord(req).to_json_string()
        localtime = time.asctime(time.localtime(time.time()))
        print(localtime,resp)
    except TencentCloudSDKException as err:
        print(localtime,err)
        #email("DDNS", str(err))

fil = sys.argv[1]
with open(fil,"r") as f:
    data = f.read()
data = json.loads(data)
for over in data:
    ym = over["域名"]
    jlz = over["主机记录"]
    type1 = over["记录类型"]
    fast(ym,jlz,type1)
print("结束")

ddns.conf
下面还可以填写很多,填写方式就按下面的方式进行添加。
[Python] 纯文本查看 复制代码
[
    {"域名":"zfx.top","主机记录":"wxllha","记录类型":"AAAA"},
    {"域名":"zfx.top","主机记录":"gfiker","记录类型":"A"}
]

完美结束
然后就可以使用了,运行方式Python3 ddns.py ddns.conf
由于腾讯云限制,访问速度不能超过20次/秒
再设置一下自动执行,可以用cron,cron不懂去百度,现在就可以愉快地玩耍了。
声明
本程序仅在Ubuntu 21上面进行了使用,其他系统请自行测试或修改。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zfb + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xingyuanbao 发表于 2022-2-27 22:51
小白更推荐ddns-go管理,支持腾讯云,阿里云,CF,华为云等,支持更新结果推送到server酱和钉钉!

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
AlexGong + 1 谢谢@Thanks!
xxuw2009 + 1 + 1 谢谢@Thanks!

查看全部评分

云的彼岸918 发表于 2022-2-28 03:54
yoyoma211 发表于 2022-2-27 22:03
gztf 发表于 2022-2-28 05:23
做网站收藏备用
zm55555 发表于 2022-2-28 08:17
谢谢分享!
你是我的人 发表于 2022-2-28 09:03
感谢分享
头像被屏蔽
daisypojie 发表于 2022-2-28 09:03
提示: 作者被禁止或删除 内容自动屏蔽
latvro 发表于 2022-2-28 09:09
感谢你的分享
t1r0 发表于 2022-2-28 10:22
20次/秒,对于访问量小的网站来说够用了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表