From 989e2924ed69bd5b58f1250979b866ea0442175d Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 5 Jan 2021 14:10:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9F=9F=E5=90=8D=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=97=B6=E9=80=92=E5=BD=92=E6=9F=A5=E8=AF=A2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 6 ++++ internal/const/const.go | 2 +- internal/utils/lookup.go | 28 +++++++++++++++++++ .../web/actions/default/servers/status.go | 17 +++++++++-- 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 internal/utils/lookup.go diff --git a/go.mod b/go.mod index 59d08730..9709d3ee 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/go-sql-driver/mysql v1.5.0 github.com/go-yaml/yaml v2.1.0+incompatible github.com/iwind/TeaGo v0.0.0-20201206115018-cdd967bfb13d + github.com/miekg/dns v1.1.35 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/tealeg/xlsx/v3 v3.2.3 github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 diff --git a/go.sum b/go.sum index f68e9779..5ac78384 100644 --- a/go.sum +++ b/go.sum @@ -63,6 +63,8 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/miekg/dns v1.1.35 h1:oTfOaDH+mZkdcgdIjH6yBajRGtIwcwcaR+rt23ZSrJs= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -105,6 +107,7 @@ github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 h1:YyPWX3jLOtYKulBR6AScG github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119/go.mod h1:/nuTSlK+okRfR/vnIPqR89fFKonnWPiZymN5ydRJkX8= go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -130,6 +133,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -137,6 +141,7 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -153,6 +158,7 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= diff --git a/internal/const/const.go b/internal/const/const.go index 34af19c1..8d582c18 100644 --- a/internal/const/const.go +++ b/internal/const/const.go @@ -1,7 +1,7 @@ package teaconst const ( - Version = "0.0.7" + Version = "0.0.7.1" ProductName = "Edge Admin" ProcessName = "edge-admin" diff --git a/internal/utils/lookup.go b/internal/utils/lookup.go new file mode 100644 index 00000000..75d1d96d --- /dev/null +++ b/internal/utils/lookup.go @@ -0,0 +1,28 @@ +package utils + +import ( + "github.com/miekg/dns" +) + +// 获取CNAME +func LookupCNAME(host string) (string, error) { + config, err := dns.ClientConfigFromFile("/etc/resolv.conf") + if err != nil { + return "", err + } + + c := new(dns.Client) + m := new(dns.Msg) + + m.SetQuestion(host+".", dns.TypeCNAME) + m.RecursionDesired = true + r, _, err := c.Exchange(m, config.Servers[0]+":"+config.Port) + if err != nil { + return "", err + } + if len(r.Answer) == 0 { + return "", nil + } + + return r.Answer[0].(*dns.CNAME).Target, nil +} diff --git a/internal/web/actions/default/servers/status.go b/internal/web/actions/default/servers/status.go index 66d4deb8..b4d718bc 100644 --- a/internal/web/actions/default/servers/status.go +++ b/internal/web/actions/default/servers/status.go @@ -9,7 +9,6 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/maps" - "net" "sync" ) @@ -129,13 +128,19 @@ func (this *StatusAction) RunPost(params struct { for _, serverName := range serverNames { if len(serverName.SubNames) == 0 { // TODO 可以指定查找解析记录的DNSResolver - result, err := net.LookupCNAME(serverName.Name) + result, err := utils.LookupCNAME(serverName.Name) if err != nil { m["type"] = "dnsResolveErr" m["message"] = "域名解析错误" m["todo"] = "错误信息:解析域名'" + serverName.Name + "' CNAME记录时出错:" + err.Error() + ",请修复此问题。如果已经修改,请等待一个小时后再试。" return } + if len(result) == 0 { + m["type"] = "dnsResolveErr" + m["message"] = "域名解析错误" + m["todo"] = "错误信息:找不到域名'" + serverName.Name + "'的CNAME记录,请修复此问题。如果已经修改,请等待一个小时后再试。" + return + } if result == serverName.Name+"." { m["type"] = "dnsResolveErr" m["message"] = "域名解析错误" @@ -151,13 +156,19 @@ func (this *StatusAction) RunPost(params struct { } else { for _, subName := range serverName.SubNames { // TODO 可以指定查找解析记录的DNSResolver - result, err := net.LookupCNAME(subName) + result, err := utils.LookupCNAME(subName) if err != nil { m["type"] = "dnsResolveErr" m["message"] = "域名解析错误" m["todo"] = "错误信息:解析域名'" + subName + "' CNAME记录时出错:" + err.Error() + ",请修复此问题。如果已经修改,请等待一个小时后再试。" return } + if len(result) == 0 { + m["type"] = "dnsResolveErr" + m["message"] = "域名解析错误" + m["todo"] = "错误信息:找不到域名'" + subName + "'的CNAME记录,请修复此问题。如果已经修改,请等待一个小时后再试。" + return + } if result == cname+"." { m["type"] = "dnsResolveErr" m["message"] = "域名解析错误"