700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 搭建服务器 运用阿里云DNS自己实现DDNS

搭建服务器 运用阿里云DNS自己实现DDNS

时间:2022-10-13 20:06:00

相关推荐

搭建服务器 运用阿里云DNS自己实现DDNS

异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复;本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告。本人所有文章仅在CSDN、掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是盗文!

先说需求:我在家里有一台服务器,但是没有静态IP。之前使用的是花生壳免费的服务,但是后来收费了,就想到自己实现一个。

参考资料:

API获取自己的公网IP地址 API查询IP信息_异想之旅的博客-CSDN博客_获取公网ip的api阿里云 OpenAPI 开发者门户

大体的实现思路:

获取当前的服务器IP检测是否与阿里云的记录相等进行更改或一段时间后进行下一次检测

当然,还要加上缓存等东西

保证DNS上有一个这个主机的A解析,然后改好开头四个变量,挂到服务器就好了(获取AccessToken:RAM 访问控制)

主机 = "yxzlownserveraddress"域名 = "yxzl.top"AccessKey = "AccessKey"SecretKey = "SecretKey"import jsonimport requestsimport timefrom aliyunsdkcore.client import AcsClientfrom aliyunsdkalidns.request.v0109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequestfrom aliyunsdkalidns.request.v0109.UpdateDomainRecordRequest import UpdateDomainRecordRequestclient = AcsClient(AccessKey, SecretKey) # 初始化记录ID = 旧的IP = ""page_number = 1while True:request = DescribeDomainRecordsRequest()request.set_accept_format("json")request.set_DomainName(域名)request.set_PageNumber(page_number)request.set_PageSize(100)response = client.do_action_with_exception(request)text = str(response, encoding="utf-8")print(json.loads(text))for i in json.loads(text)["DomainRecords"]["Record"]:if i["RR"] == 主机:记录ID = i["RecordId"]旧的IP = i["Value"]breakif 记录ID:breakpage_number += 1while True:try:新的IP = requests.get("/").textif 新的IP != 旧的IP:# 更改记录try:request = UpdateDomainRecordRequest()request.set_accept_format("json")request.set_RecordId(记录ID)request.set_RR(主机)request.set_Type("A")request.set_Value(新的IP)response = client.do_action_with_exception(request)print("%s\tIP发生了变化(%s -> %s),已进行更新。" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), 旧的IP, 新的IP))except:print("%s\tIP发生了变化(%s -> %s),但更新失败。" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), 旧的IP, 新的IP))else:print("%s\tIP相同(%s),未进行更改。" %(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), 新的IP))旧的IP = 新的IPexcept Exception as e:print("%s\t发生错误:%s" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), e))# raise epasstime.sleep(90)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。