瀏覽代碼

新增配置处理

kangsongzhang 5 年之前
當前提交
a519678c4c
共有 4 個文件被更改,包括 130 次插入0 次删除
  1. 6 0
      config.json
  2. 5 0
      go.mod
  3. 111 0
      main.go
  4. 8 0
      restart.sh

+ 6 - 0
config.json

@@ -0,0 +1,6 @@
+{
+  "secretId": "1",
+  "secretKey": "1",
+  "domain": "dszgame.cn",
+  "subname": "home"
+}

+ 5 - 0
go.mod

@@ -0,0 +1,5 @@
+module q-ddns
+
+go 1.15
+
+require github.com/athurg/go-qcloud-cns-sdk v0.0.0-20180413090041-c5f8ec5d0c89

+ 111 - 0
main.go

@@ -0,0 +1,111 @@
+package main
+
+import (
+	"encoding/json"
+	"flag"
+	"github.com/athurg/go-qcloud-cns-sdk"
+	"io/ioutil"
+	"log"
+	"net"
+	"net/http"
+	"strconv"
+	"strings"
+	"time"
+)
+
+var gSecretId = *flag.String("secretId", "111123123", "腾讯云秘钥id")
+var gSecretKey = *flag.String("secretKey", "222222", "腾讯云秘钥key")
+var gDomain = *flag.String("domain", "dszgame.cn", "域名")
+var gSubName = *flag.String("subname", "home", "二级域名")
+
+// 获取当前网络环境的公网IP
+func GetIP() string {
+	resp, err := http.Get("http://ip.cip.cc")
+	if err != nil {
+		return ""
+	}
+	defer resp.Body.Close()
+	body, err := ioutil.ReadAll(resp.Body)
+	return string(body)
+}
+
+// unicode转中文
+func u2s(form string) string {
+	str, err := strconv.Unquote(strings.Replace(strconv.Quote(string(form)), `\\u`, `\u`, -1))
+	if err != nil {
+		return ""
+	}
+	return str
+}
+
+// 检测域名是否需要修改解析
+func checkDomain(secretId, secretKey, sDomain, sSubName string){
+	url := sSubName +"." + sDomain
+	oldips, err := net.LookupHost(url)
+	if err != nil {
+		log.Println(err.Error())
+	}
+	oldip := strings.ReplaceAll(oldips[0], "\n", "")
+	curip := strings.ReplaceAll(GetIP(), "\n", "")
+	if oldip == curip {
+		log.Println("解析出来的IP本来就是当前公网IP:", url, curip)
+		return
+	}
+	log.Println("开始检测 url:" + url + " ip:", GetIP(), " host:", oldip)
+
+	cli := cns.New( secretId, secretKey)
+	lists, err := cli.RecordList(sDomain)
+
+	for _, rec := range lists {
+		if rec.Name == sSubName && rec.Type == "A" { // 找到要修改的解析
+			log.Println("record:", rec)
+			if oldip != rec.Value || curip != oldip {
+				rec.Value = curip
+				err1 := cli.RecordModify(sDomain, rec)
+				if err1 != nil {
+					log.Println("RecordModify error:", err1.Error())
+				}else{
+					log.Println("RecordModify succeded:", url, rec.Value)
+				}
+			}
+
+		}
+	}
+}
+
+func main() {
+
+	bytes, err := ioutil.ReadFile("./config.json")
+	if err == nil {
+		log.Println("读取json文件成功")
+
+		configjson := map[string]string{}
+		json.Unmarshal(bytes, &configjson)
+
+		gSecretId = configjson["secretId"]
+		gSecretKey = configjson["secretKey"]
+		gDomain = configjson["domain"]
+		gSubName = configjson["subname"]
+	}
+
+	log.Println("start:", gSecretId, gSecretKey, gDomain, gSubName)
+
+
+	// 默认启动执行一次检测
+	checkDomain(gSecretId, gSecretKey, gDomain, gSubName)
+
+	go func() {
+		for {
+			ticker := time.NewTicker(120 * time.Second)
+			select {
+			case <-ticker.C:
+				log.Println("当前时间为:", time.Now())
+				checkDomain(gSecretId, gSecretKey, gDomain, gSubName)
+			}
+		}
+	}()
+
+	for {
+		time.Sleep(time.Second * 1)
+	}
+}

+ 8 - 0
restart.sh

@@ -0,0 +1,8 @@
+#!/bin/bash
+
+chmod 777 q_ddns_arm_go_linux 
+killall ./q_ddns_arm_go_linux
+
+nohup ./q_ddns_arm_go_linux &
+
+ps -ef | grep q_ddns_arm_go_linux