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

15 篇文章 7 订阅
2 篇文章 1 订阅

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


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

参考资料:

大体的实现思路:

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

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

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

主机 = "yxzlownserveraddress"
域名 = "yxzl.top"
AccessKey = "AccessKey"
SecretKey = "SecretKey"

import json
import requests
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest

client = AcsClient(AccessKey, SecretKey)  # 初始化

记录ID = 旧的IP = ""
page_number = 1

while 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"]
            break
    if 记录ID:
        break
    page_number += 1

while True:
    try:
        新的IP = requests.get("http://ip.3322.net/").text
        if 新的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 = 新的IP
    except Exception as e:
        print("%s\t发生错误:%s" % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), e))
        # raise e
        pass
    time.sleep(90)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异想之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值