纯粹练手用的,大家轻喷

  1. 获取SecretId,SecretKey

    打开腾讯云,登录之后打开https://console.cloud.tencent.com/cam/capi,然后新建密钥记录生成的SecretId,SecretKey

  2. 获取RecordId

    然后打开https://console.cloud.tencent.com/api/explorer?Product=dnspod&Version=2021-03-23&Action=DescribeRecordList&SignVersion=点击在线调试,然后将自己的域名输入到Domain下面的框里,点击发送请求,此时会让扫码登录,微信扫码登录即可,登录之后在响应结果框里会出现自己的RecordId,记录一下自己需要修改的RecordId

  3. 添加一个dnspodRecord.go文件
package main

import (
"fmt"
"io/ioutil"
"net/http"
"regexp"
"strconv"
"strings"
"time" "github.com/robfig/cron"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
)
//全局IP,本次获取与上次作比较,相同IP不需要更新
var currentIp = "" func main() {
c := cron.New()
spec := "*/30 * * * * ?" //可自行更改,默认是30秒执行一次
c.AddFunc(spec, func() {
fmt.Printf("start:%v \n", time.Now())
modifyRecordAfterGetIp()
fmt.Printf("shop:%v \n", time.Now())
})
c.Start() select {}
}
//循环获取公网IP,对比变化,变化后同步
func modifyRecordAfterGetIp() {
fmt.Printf("currentIp: %s \n", currentIp)
//获取记录
records := [][]string{}
row1 := []string{"yourhost.cn", "A", "yourRecordId", "默认", "", "*"}
row2 := []string{"yourhost.cn", "A", "yourRecordId", "默认", "", "@"}
row3 := []string{"yourhost.cn", "A", "yourRecordId", "默认", "", "www"}
records = append(records, row1)
records = append(records, row2)
records = append(records, row3) //获取Ip的网址
sliceIp := []string{"myip.ipip.net/s", "api.ip.sb/ip", "ident.me", "ip.3322.net", "ip.cip.cc", "api.ipify.org"}
// 迭代每一个元素,获取Ip并判断Ip是否符合,再调用修改腾讯云记录
for index, value := range sliceIp {
fmt.Printf("---- 开始请求IP %s ----\n", value)
result := string(getIp("http://" + value))
isIpv4 := matchIpv4(result)
fmt.Printf("Index: %d Value: %s result:%s matchIpv4:%t \n", index, value, result, isIpv4)
if isIpv4 {
if currentIp != result {
fmt.Printf("---- 结束请求IP ----\n \n")
currentIp = result
var i int
for i = 0; i < 3; i++ {
intNum, _ := strconv.Atoi(records[i][2])
modifyDynamicDNS(records[i][0], records[i][1], uint64(intNum), records[i][3], currentIp, records[i][5])
}
fmt.Printf("currentIp: %s \n", currentIp)
}
fmt.Printf("Ip未发生变化 \n")
break
}
}
fmt.Printf("---- 结束 ---- \n")
fmt.Printf("currentIp: %s \n", currentIp)
} //调用腾讯云api修改记录
func modifyDynamicDNS(domain string, recordType string, recordId uint64, recordLine string, ip string, subDomain string) {
credential := common.NewCredential(
"yourSecretId",
"yourSecretKey",
)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = "dnspod.tencentcloudapi.com"
client, _ := dnspod.NewClient(credential, "", cpf) request := dnspod.NewModifyRecordBatchRequest() request.RecordIdList = make([]*uint64, 1) fmt.Printf("开始更新记录:%d \n", recordId) request.RecordIdList[0] = &recordId request.Change = new(string)
request.ChangeTo = new(string) *request.Change = "value"
*request.ChangeTo = strings.Replace(ip, "\n", "", -1) fmt.Printf("requestJson:%s \n", request.ToJsonString())
response, err := client.ModifyRecordBatch(request)
if _, ok := err.(*errors.TencentCloudSDKError); ok {
fmt.Printf("error:An API error has returned: %s \n", err)
return
}
if err != nil {
panic(err)
}
fmt.Printf("response:%s \n", response.ToJsonString())
fmt.Printf("结束更新记录:%d \n \n", recordId) } //获取公网IP
func getIp(url string) string {
client := http.Client{
Timeout: 2 * time.Second,
}
resp, err := client.Get(url)
if err != nil {
fmt.Printf(" err:%s \n", err)
return "error"
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
result := string(body)
fmt.Printf("body:%s", string(body))
fmt.Printf("StatusCode:%d \n", resp.StatusCode)
if resp.StatusCode == 200 {
fmt.Printf("ok" + " \n")
}
return result
} //匹配是否是Ipv4
func matchIpv4(ip string) bool {
matched, err := regexp.MatchString("((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}", ip)
if err != nil {
fmt.Println("ip匹配出现错误")
return false
}
if matched { // 匹配上了
if len(ip) < 16 {
return true
}
}
return false
}
  1. get缺少的go环境,进入dnspodRecord.go所在文件夹的命令框,完全执行后将会新增同名mod、sum文件

    1. 使用腾讯云镜像加速下载:

      1. Linux 或 MacOS:

        export GOPROXY=https://mirrors.tencent.com/go/
      2. Windows:

        set GOPROXY=https://mirrors.tencent.com/go/
    2. go mod初始化,将会生成一个同名mod文件

      go mod init dnspodRecord
    3. 拉取公共基础包

      go get -v -u github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common
    4. 拉取dnspod包

      go get -v -u github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod
    5. 本地电脑不可能只执行一次,拉取cron包

      go get github.com/robfig/cron
  2. 运行测试,将会30秒执行一次,将自己的IP地址同步到dnspod的记录解析中

    go run dnspodRecord.go

go更新腾讯云DNSPod的解析记录的更多相关文章

  1. 网站配置https(腾讯云域名操作)

    我们都知道http协议是超文本传输协议,早期的网站使用的都是http,但是并不安全,数据在传输过程中容易被拦截篡改.所以后面有了https,也就是经过ssl加密的http协议.本文主要对网站配置htt ...

  2. 利用腾讯云为你的域名申请并配置免费SSL一年

    我想,点进来的朋友,应该都知道SSL的重要性吧.这里就简单提一下,大型网站域名只有配置了SSL后,才会更加安全. 现在,微信小程序也开始要求后台必须是SSL配置后的域名了.说了这么多,估计有些人还是有 ...

  3. 网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+

    网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+ HTTPDNS_移动开发_域名解析_域名防劫持-阿里云https://www.aliyun.com/prod ...

  4. 腾讯云数据库团队:MySQL AHI 实现解析

    MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...

  5. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  6. 腾讯云,体验域名注册解析与SSL证书

    体验域名注册解析与SSL证书 购买域名 任务时间:30min ~ 60min 在腾讯云上购买域名 首先需要在腾讯云上购买域名, 点击以下链接可以观看购买操作的指引 如何在腾讯云上购买域名 域名解析 域 ...

  7. 腾讯云数据库团队:SQL Server 数据加密功能解析

    数据加密是数据库被破解.物理介质被盗.备份被窃取的最后一道防线:数据加密,一方面解决数据被窃取安全问题,另一方面有关法律要求强制加密数据:SQL Server 的数据加密相较于其他数据库,功能相对完善 ...

  8. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  9. 如何在腾讯云上搭建一个人力资源Saas

    版权声明:本文由ihr原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/180 来源:腾云阁 https://www.qclo ...

随机推荐

  1. NLP教程(5) - 语言模型、RNN、GRU与LSTM

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...

  2. NMS技术总结(NMS原理、多类别NMS、NMS的缺陷、NMS的改进思路、各种NMS方法)

    ​  前言  本文介绍了NMS的应用场合.基本原理.多类别NMS方法和实践代码.NMS的缺陷和改进思路.介绍了改进NMS的几种常用方法.提供了其它不常用的方法的链接. 本文很早以前发过,有个读者评论说 ...

  3. 【mq】从零开始实现 mq-08-配置优化 fluent

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  4. 用 Python 远程控制 Windows 服务器,太好用了!

    在很多企业会使用闲置的 Windows 机器作为临时服务器,有时候我们想远程调用里面的程序或查看日志文件 Windows 内置的服务「 winrm 」可以满足我们的需求 它是一种基于标准简单对象访问协 ...

  5. leetcode 524. Longest Word in Dictionary through Deleting 通过删除字母匹配到字典里最长单词

    一.题目大意 https://leetcode.cn/problems/longest-word-in-dictionary-through-deleting 给你一个字符串 s 和一个字符串数组 d ...

  6. MongoDB 各项命名规范

    每日一句 Progress is the result of a bunch of failures. 进步是不断失败的成果. 概述 MongoDB涉及到的一些比如集合啥的命令规范. 集合的命名规范 ...

  7. hexo + typora 图片插入解决办法

    Typora 是一款知名的 Markdown 编辑器,简单好用,体验良好.使用 hexo 搭建好博客后,主要是用 Markdown 来编写博客,typora 便是我的首选编辑器.但直接使用 typor ...

  8. .Net分表分库动态化处理

    介绍 本期主角:ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵 背景 最近有个小伙伴来问我,分表下他有一批数据,这个 ...

  9. 面试官:Dubbo怎么实现服务降级,他有什么好处?

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,今天周一了,招聘软件 ...

  10. KNN算法推理与实现

    Overview K近邻值算法 KNN (K - Nearest Neighbors) 是一种机器学习中的分类算法:K-NN是一种非参数的惰性学习算法.非参数意味着没有对基础数据分布的假设,即模型结构 ...