腾讯域名 ddns 实现动态域名解析支持ipv6和ipv4
本帖最后由 ZFX520 于 2022-2-27 21:12 编辑简介
DDNS是动态域名服务(Dynamic Domain Name Server)的缩写,可以实现固定域名到动态IP地址之间的解析。 通常情况下,用户每次连接因特网时都会从ISP得到一个动态IP地址,即用户每次连接因特网得到的IP地址都不同。
前期准备
首先你要有一个腾讯云的域名,进入腾讯云的DNSPOD然后点击右上角头像选择api秘钥进入后点击腾讯云api秘钥在点击新建秘钥
新建完成后会有2个参数,一个是SecretId另一个是SecretKey,我们吧这两个参数记下来。
然后去域名解析那里解析一个域名,如果用ipv6的地址就设置解析记录类型为AAAA,先随便填写一个记录值(简单点的记录值,fe80::ac34),ipv4同理
最后来安装腾讯云的Python包
pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python
至此准备工作完成。
源码展示
ddns.py
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')['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
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
下面还可以填写很多,填写方式就按下面的方式进行添加。
[
{"域名":"zfx.top","主机记录":"wxllha","记录类型":"AAAA"},
{"域名":"zfx.top","主机记录":"gfiker","记录类型":"A"}
]
完美结束
然后就可以使用了,运行方式Python3 ddns.py ddns.conf
由于腾讯云限制,访问速度不能超过20次/秒
再设置一下自动执行,可以用cron,cron不懂去百度,现在就可以愉快地玩耍了。
声明
本程序仅在Ubuntu 21上面进行了使用,其他系统请自行测试或修改。 小白更推荐ddns-go管理,支持腾讯云,阿里云,CF,华为云等,支持更新结果推送到server酱和钉钉! 看着好高大上,这个是干什么用的? 感谢楼主分享,这个学习一下先 做网站收藏备用 谢谢分享! 感谢分享 感谢你的分享 20次/秒,对于访问量小的网站来说够用了
页:
[1]
2