NameSilo API 密钥使用环境变量或者 -k 指定
This commit is contained in:
75
main.go
75
main.go
@@ -3,8 +3,10 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@@ -124,32 +126,27 @@ func check_domain_ipv6(domain string) string {
|
||||
}
|
||||
|
||||
// 循环获取域名解析地址和当前地址,并判断是否需要更新域名解析地址
|
||||
func Loop() {
|
||||
func Loop(info INFO) {
|
||||
|
||||
var Domain_ipv6_addr string
|
||||
var Now_ipv6_addr string
|
||||
var Domain = "aixiao.me" // 主域名
|
||||
var _interface = "pppoe-wan" // openwrt 网卡
|
||||
|
||||
key := "28b94fdd541d213de7bcaef" // 你的 API Key
|
||||
Subdomain := "v6.aixiao.me" // 你要获取的特定子域名
|
||||
|
||||
Domain_ipv6_addr = check_domain_ipv6(Subdomain)
|
||||
Now_ipv6_addr = pppoe_interface_ipv6(_interface)
|
||||
Domain_ipv6_addr = check_domain_ipv6(*info._Subdomain)
|
||||
Now_ipv6_addr = pppoe_interface_ipv6(*info._interface)
|
||||
|
||||
if Now_ipv6_addr != Domain_ipv6_addr {
|
||||
log.Printf("域名解析地址: %s\n", Domain_ipv6_addr)
|
||||
log.Printf("当前地址: %s\n", Now_ipv6_addr)
|
||||
log.Printf("域名解析地址与现在地址不相等!!!\n")
|
||||
|
||||
RecordID := FetchSubdomainRecord(key, Domain, Subdomain)
|
||||
RecordID := FetchSubdomainRecord(*info._Key, *info._Domain, *info._Subdomain)
|
||||
log.Printf("RecordID:%s\n", RecordID)
|
||||
if RecordID != "NULL" {
|
||||
rrid := RecordID
|
||||
rrhost := strings.Split(Subdomain, ".")[0] // 获取子域名前缀 v6
|
||||
rrhost := strings.Split(*info._Subdomain, ".")[0] // 获取子域名前缀 v6
|
||||
rrvalue := Now_ipv6_addr
|
||||
|
||||
r := ProcessDNSUpdateForDomain(key, Domain, rrid, rrhost, rrvalue)
|
||||
r := ProcessDNSUpdateForDomain(*info._Key, *info._Domain, rrid, rrhost, rrvalue)
|
||||
if r == 1 {
|
||||
|
||||
}
|
||||
@@ -167,17 +164,71 @@ func Sleep(m int) {
|
||||
time.Sleep(time.Duration(m) * time.Minute)
|
||||
}
|
||||
|
||||
func TimeZone() {
|
||||
// 设置 Go 的本地时区为 Asia/Shanghai
|
||||
loc, err := time.LoadLocation("Asia/Shanghai")
|
||||
if err != nil {
|
||||
log.Fatalf("加载时区失败: %v", err)
|
||||
}
|
||||
time.Local = loc
|
||||
}
|
||||
|
||||
type INFO struct {
|
||||
_interface *string
|
||||
_Domain *string
|
||||
_Subdomain *string
|
||||
_Key *string
|
||||
}
|
||||
|
||||
func GetDaemon(_Subdomain *string) *string {
|
||||
// 使用 strings.Split 分割域名
|
||||
parts := strings.Split(*_Subdomain, ".")
|
||||
// 检查分割后的部分数量
|
||||
if len(parts) < 2 {
|
||||
fmt.Println("无效的域名")
|
||||
return nil
|
||||
}
|
||||
// 获取主域名
|
||||
mainDomain := parts[len(parts)-2] + "." + parts[len(parts)-1]
|
||||
|
||||
return &mainDomain
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
daemon := flag.Bool("d", false, "守护进程模式")
|
||||
_interface := flag.String("i", "pppoe-wan", "网卡")
|
||||
_Subdomain := flag.String("s", "v6.aixiao.me", "子域名")
|
||||
_key := flag.String("k", "NULL", "NameSilo API 密钥")
|
||||
flag.Parse()
|
||||
|
||||
var info INFO
|
||||
info._interface = _interface
|
||||
info._Subdomain = _Subdomain
|
||||
info._Key = _key
|
||||
info._Domain = GetDaemon(_Subdomain)
|
||||
|
||||
if *info._Key == "NULL" {
|
||||
envKey := os.Getenv("NAMESILO")
|
||||
if envKey != "" {
|
||||
info._Key = &envKey // 将环境变量的值赋值给 info._Key
|
||||
} else {
|
||||
log.Fatalf("密钥未设置,请通过 -k 参数或 NAMESILO 环境变量提供密钥")
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("主域名:", *info._Domain)
|
||||
fmt.Println("子域名:", *info._Subdomain)
|
||||
fmt.Println("密钥:", *info._Key)
|
||||
|
||||
// 守护进程模式
|
||||
if *daemon {
|
||||
Daemon()
|
||||
}
|
||||
|
||||
//TimeZone()
|
||||
for {
|
||||
Loop()
|
||||
Loop(info)
|
||||
Sleep(15)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user