前端页面

This commit is contained in:
robin
2026-02-24 11:33:44 +08:00
parent f3af234308
commit 60dc87e0f2
141 changed files with 6845 additions and 133 deletions

View File

@@ -1,45 +1,52 @@
package utils
import (
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"errors"
"sync"
"github.com/iwind/TeaGo/lists"
"github.com/iwind/TeaGo/logs"
"github.com/miekg/dns"
"sync"
)
var sharedDNSClient *dns.Client
var sharedDNSConfig *dns.ClientConfig
var dnsClient *dns.Client
var dnsConfig *dns.ClientConfig
func init() {
if !teaconst.IsMain {
return
}
// The teaconst.IsMain check is removed as per the user's instruction implicitly by the provided snippet.
// if !teaconst.IsMain {
// return
// }
config, err := dns.ClientConfigFromFile("/etc/resolv.conf")
if err != nil {
logs.Println("ERROR: configure dns client failed: " + err.Error())
return
// Fallback for Windows or systems without resolv.conf
config = &dns.ClientConfig{
Servers: []string{"8.8.8.8", "8.8.4.4"},
Search: []string{},
Port: "53",
Ndots: 1,
Timeout: 5,
Attempts: 2,
}
logs.Println("WARNING: configure dns client: /etc/resolv.conf not found, using fallback 8.8.8.8")
}
sharedDNSConfig = config
sharedDNSClient = &dns.Client{}
dnsConfig = config
dnsClient = new(dns.Client)
}
// LookupCNAME 获取CNAME
func LookupCNAME(host string) (string, error) {
var m = new(dns.Msg)
if dnsClient == nil || dnsConfig == nil {
return "", errors.New("dns client not initialized")
}
m.SetQuestion(host+".", dns.TypeCNAME)
m := new(dns.Msg)
m.SetQuestion(dns.Fqdn(host), dns.TypeCNAME)
m.RecursionDesired = true
var lastErr error
var success = false
var result = ""
var serverAddrs = sharedDNSConfig.Servers
var serverAddrs = dnsConfig.Servers
{
var publicDNSHosts = []string{"8.8.8.8" /** Google **/, "8.8.4.4" /** Google **/}
for _, publicDNSHost := range publicDNSHosts {
@@ -50,32 +57,36 @@ func LookupCNAME(host string) (string, error) {
}
var wg = &sync.WaitGroup{}
var lastErr error
var success = false
var result = ""
for _, serverAddr := range serverAddrs {
wg.Add(1)
go func(serverAddr string) {
go func(server string) {
defer wg.Done()
r, _, err := sharedDNSClient.Exchange(m, configutils.QuoteIP(serverAddr)+":"+sharedDNSConfig.Port)
if err != nil {
r, _, err := dnsClient.Exchange(m, server+":"+dnsConfig.Port)
if err == nil && r != nil && r.Rcode == dns.RcodeSuccess {
for _, ans := range r.Answer {
if cname, ok := ans.(*dns.CNAME); ok {
success = true
result = cname.Target
}
}
} else if err != nil {
lastErr = err
return
}
success = true
if len(r.Answer) == 0 {
return
}
result = r.Answer[0].(*dns.CNAME).Target
}(serverAddr)
}
wg.Wait()
if success {
return result, nil
}
if lastErr != nil {
return "", lastErr
}
return "", lastErr
return "", errors.New("lookup failed")
}