mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	优化CNAME查询程序
This commit is contained in:
		@@ -2,6 +2,11 @@
 | 
			
		||||
 | 
			
		||||
package teaconst
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	IsRecoverMode = false
 | 
			
		||||
 | 
			
		||||
@@ -10,4 +15,18 @@ var (
 | 
			
		||||
 | 
			
		||||
	NewVersionCode        = "" // 有新的版本
 | 
			
		||||
	NewVersionDownloadURL = "" // 新版本下载地址
 | 
			
		||||
 | 
			
		||||
	IsMain = checkMain()
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 检查是否为主程序
 | 
			
		||||
func checkMain() bool {
 | 
			
		||||
	if len(os.Args) == 1 ||
 | 
			
		||||
		(len(os.Args) >= 2 && os.Args[1] == "pprof") {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	exe, _ := os.Executable()
 | 
			
		||||
	return strings.HasSuffix(exe, ".test") ||
 | 
			
		||||
		strings.HasSuffix(exe, ".test.exe") ||
 | 
			
		||||
		strings.Contains(exe, "___")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +1,40 @@
 | 
			
		||||
package utils
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
 | 
			
		||||
	"github.com/iwind/TeaGo/logs"
 | 
			
		||||
	"github.com/miekg/dns"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// LookupCNAME 获取CNAME
 | 
			
		||||
func LookupCNAME(host string) (string, error) {
 | 
			
		||||
	config, err := dns.ClientConfigFromFile("/etc/resolv.conf")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
var sharedDNSClient *dns.Client
 | 
			
		||||
var sharedDNSConfig *dns.ClientConfig
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	if !teaconst.IsMain {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	c := new(dns.Client)
 | 
			
		||||
	m := new(dns.Msg)
 | 
			
		||||
	config, err := dns.ClientConfigFromFile("/etc/resolv.conf")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logs.Println("ERROR: configure dns client failed: " + err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sharedDNSConfig = config
 | 
			
		||||
	sharedDNSClient = &dns.Client{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupCNAME 获取CNAME
 | 
			
		||||
func LookupCNAME(host string) (string, error) {
 | 
			
		||||
	var m = new(dns.Msg)
 | 
			
		||||
 | 
			
		||||
	m.SetQuestion(host+".", dns.TypeCNAME)
 | 
			
		||||
	m.RecursionDesired = true
 | 
			
		||||
 | 
			
		||||
	var lastErr error
 | 
			
		||||
	for _, serverAddr := range config.Servers {
 | 
			
		||||
		r, _, err := c.Exchange(m, configutils.QuoteIP(serverAddr)+":"+config.Port)
 | 
			
		||||
	for _, serverAddr := range sharedDNSConfig.Servers {
 | 
			
		||||
		r, _, err := sharedDNSClient.Exchange(m, configutils.QuoteIP(serverAddr)+":"+sharedDNSConfig.Port)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			lastErr = err
 | 
			
		||||
			continue
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								internal/utils/lookup_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								internal/utils/lookup_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
			
		||||
 | 
			
		||||
package utils_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestLookupCNAME(t *testing.T) {
 | 
			
		||||
	t.Log(utils.LookupCNAME("www.yun4s.cn"))
 | 
			
		||||
}
 | 
			
		||||
@@ -9,7 +9,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestNewUpgradeManager(t *testing.T) {
 | 
			
		||||
	var manager = utils.NewUpgradeManager("admin")
 | 
			
		||||
	var manager = utils.NewUpgradeManager("admin", "")
 | 
			
		||||
 | 
			
		||||
	var ticker = time.NewTicker(2 * time.Second)
 | 
			
		||||
	go func() {
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ Tea.context(function () {
 | 
			
		||||
			.params({
 | 
			
		||||
				serverIds: serverIds
 | 
			
		||||
			})
 | 
			
		||||
			.timeout(300)
 | 
			
		||||
			.success(function (resp) {
 | 
			
		||||
				let status = resp.data.status
 | 
			
		||||
				this.servers.forEach(function (server) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user