GolangNote

Golang笔记

Golang 通过 API 更新 DNSPod DNS 设置

Permalink

DNSPod 提供了较简便的方式来更新自己账户下域名的 DNS,只需后台的 token,避免登录认证等麻烦。

使用现有的 go 语言库 github.com/nrdcg/dnspod-go,这个库比较简单,功能够用

操作过程

这里的目的是当服务器 IP 发生改变时,自动更新对应域名的 DNS 设置。

  1. 获取个人域名列表及域名ID
  2. 获取指定域名的记录及记录ID
  3. 通过域名 ID 和 记录 ID 更新 DNS

首次运行要实行前两步,获取两个 ID 后可直接做第三步。

有个小坑是: 完整的 API Token 是由 ID,Token 组合而成,用英文逗号分隔

首先是监测服务器外网 IP 是否变化,有很多网站都可以,如 https://httpbin.org/ip ,也可以在自己的在线网站写一个页面获取客户端的 IP

当 IP 改变就更新了。。。

获取账户下的域名

Go: 获取账户下的域名
1
2
3
4
5
6
7
8
9
10
11
12
params := dnspod.CommonParams{LoginToken: token, Format: "json"}
	dnsClient := dnspod.NewClient(params)
	
	domains, _, err := dnsClient.Domains.List()

	for _, dm := range domains {
		fmt.Printf("Domain: %s (id: %s)\n", dm.Name, dm.ID)
		if dm.Name == domain {
			getDomain, getDomainId = dm.Name, dm.ID.String()
			break
		}
	}

获取指定域名的记录

Go: 获取指定域名的记录
1
2
3
4
5
6
7
8
9
10
11
12
13
records, _, err := dnsClient.Records.List(domainId, "")
	if err != nil {
		log.Println(err)
		return
	}
	var getSubName, getSubNameId, oldValue string
	for _, record := range records {
		fmt.Printf("ID: %s, Name: %s, Type: %s, Value: %s \n", record.ID, record.Name, record.Type, record.Value)
		if record.Name == subName {
			getSubName, getSubNameId, oldValue = record.Name, record.ID, record.Value
			break
		}
	}

添加或更新

Go: 添加
1
2
3
4
5
6
7
record, _, err := dnsClient.Records.Create(dnObj.DomainId, dnspod.Record{
		Name:  subName,
		Type:  dnObj.Type,
		TTL:   "600", // seconds
		Value: serviceIp,
		Line:  "默认",
	})

Go: 更新
1
2
3
4
5
6
7
8
_, _, err = dnsClient.Records.Update(dnObj.DomainId, dnObj.SubNameId, dnspod.Record{
		ID:    dnObj.SubNameId, // 可选
		Name:  dnObj.SubName,  
		Type:  dnObj.Type,
		TTL:   "600", // seconds
		Value: serviceIp,
		Line:  "默认",
	})

参考

本文网址: https://golangnote.com/topic/302.html 转摘请注明来源

Related articles

Golang 泛型性能初识

编程时,我们通常需要编写“泛型”函数,其中确切的数据类型并不重要。例如,您可能想编写一个简单的函数来对数字进行求和。Go 直到最近才有这个概念,但最近才添加了它(从1.18版开始)。...

Golang 实现 10 进制转 N 进制

给定一个不没有重复字符的字符串,如 `[0-9,a-z]`,把一个 10 进制数字转为,该字符集的字符串。应用场合如汽车牌、顺序计数。...

Write a Comment to "Golang 通过 API 更新 DNSPod DNS 设置"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 1ms