From 8af46d4bfb4e67502d5fc27426ec5452709b56b0 Mon Sep 17 00:00:00 2001 From: spiritysdx Date: Wed, 3 Jul 2024 23:20:43 +0800 Subject: [PATCH] update --- go.mod | 2 ++ go.sum | 2 ++ goecs.go | 27 +++++++++++----- utils/utils.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 107 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index f5d7d29b..017f4301 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/oneclickvirt/gostun v0.0.3-20240702054621 github.com/oneclickvirt/memorytest v0.0.2-20240702031042 github.com/oneclickvirt/nt3 v0.0.3-20240702132013 + github.com/oneclickvirt/pingtest v0.0.4-20240703142340 github.com/oneclickvirt/portchecker v0.0.1-20240624155429 github.com/oneclickvirt/security v0.0.4-20240702055848 github.com/oneclickvirt/speedtest v0.0.6-20240702134926 @@ -45,6 +46,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/nxtrace/NTrace-core v1.3.1 // indirect diff --git a/go.sum b/go.sum index 6edf7520..c9ae83c5 100644 --- a/go.sum +++ b/go.sum @@ -95,6 +95,8 @@ github.com/oneclickvirt/memorytest v0.0.2-20240702031042 h1:j+LsjOh5glYiidqtSqjZ github.com/oneclickvirt/memorytest v0.0.2-20240702031042/go.mod h1:+YNzy+NeVg61d0kNwSyVDqHyVtKzjuRe1NvMzsDLg0I= github.com/oneclickvirt/nt3 v0.0.3-20240702132013 h1:zPI/zqqCraIVwRnYz07hMkBKDRJVkEBb6gZpZ4M9CjI= github.com/oneclickvirt/nt3 v0.0.3-20240702132013/go.mod h1:UojPmtangn17TiQaDccVrZbn6sZwJOtzBgg3idp68cA= +github.com/oneclickvirt/pingtest v0.0.4-20240703142340 h1:012W8Ly6ALISwIL5cYFM8O1ZLSc9l+Z2hHUCscMemms= +github.com/oneclickvirt/pingtest v0.0.4-20240703142340/go.mod h1:IU9RzZpS5tfP2kcFd2sw2fE80BgtiMUK8jp6qnN/0cY= github.com/oneclickvirt/portchecker v0.0.1-20240624155429 h1:+wapaOcFrg1iWJDhBKThDzppyIMY7hWxK7F5RBkZg4o= github.com/oneclickvirt/portchecker v0.0.1-20240624155429/go.mod h1:HQxSTrqM8/QFqHMTBZ7S8H9eEO5FkUXU1eb7ZX5Mk+k= github.com/oneclickvirt/security v0.0.4-20240702055848 h1:UCfjfoslcfKhCvJm37jQmhJ+O8d4lL+uvBJVcLAXc2s= diff --git a/goecs.go b/goecs.go index 6cdd9a53..f3e97f9e 100644 --- a/goecs.go +++ b/goecs.go @@ -20,6 +20,8 @@ import ( gostunmodel "github.com/oneclickvirt/gostun/model" memorytestmodel "github.com/oneclickvirt/memorytest/memory" nt3model "github.com/oneclickvirt/nt3/model" + ptmodel "github.com/oneclickvirt/pingtest/model" + "github.com/oneclickvirt/pingtest/pt" "github.com/oneclickvirt/portchecker/email" speedtestmodel "github.com/oneclickvirt/speedtest/model" "net/http" @@ -34,8 +36,9 @@ import ( ) var ( - ecsVersion = "v0.0.32" + ecsVersion = "v0.0.33" menuMode bool + onlyChinaTest bool input, choice string showVersion bool enableLogger bool @@ -49,7 +52,7 @@ var ( width = 82 basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus bool commTestStatus, utTestStatus, securityTestStatus, emailTestStatus bool - backtraceStatus, nt3Status, speedTestStatus bool + backtraceStatus, nt3Status, speedTestStatus, pingTestStatus bool filePath = "goecs.txt" enabelUpload = true help bool @@ -101,7 +104,7 @@ func main() { memorytestmodel.EnableLoger = true disktestmodel.EnableLoger = true commediatests.EnableLoger = true - + ptmodel.EnableLoger = true backtraceori.EnableLoger = true nt3model.EnableLoger = true speedtestmodel.EnableLoger = true @@ -160,6 +163,7 @@ func main() { backtraceStatus = true nt3Status = true speedTestStatus = true + onlyChinaTest = utils.CheckChina(enableLogger) break Loop case "2": basicStatus = true @@ -219,6 +223,7 @@ func main() { backtraceStatus = true nt3Status = true speedTestStatus = true + pingTestStatus = true break Loop default: if language == "zh" { @@ -292,7 +297,7 @@ func main() { emailInfo = email.EmailCheck() }() } - if utTestStatus { + if utTestStatus && !onlyChinaTest { wg1.Add(1) go func() { defer wg1.Done() @@ -300,13 +305,13 @@ func main() { }() } output = utils.PrintAndCapture(func() { - if commTestStatus { + if commTestStatus && !onlyChinaTest { utils.PrintCenteredTitle("御三家流媒体解锁", width) commediatest.ComMediaTest(language) } }, tempOutput, output) output = utils.PrintAndCapture(func() { - if utTestStatus { + if utTestStatus && !onlyChinaTest { utils.PrintCenteredTitle("跨国流媒体解锁", width) wg1.Wait() fmt.Printf(mediaInfo) @@ -327,18 +332,24 @@ func main() { }, tempOutput, output) if runtime.GOOS != "windows" { output = utils.PrintAndCapture(func() { - if backtraceStatus { + if backtraceStatus && !onlyChinaTest { utils.PrintCenteredTitle("三网回程线路检测", width) backtrace.BackTrace() } }, tempOutput, output) // nexttrace 在win上不支持检测,报错 bind: An invalid argument was supplied. output = utils.PrintAndCapture(func() { - if nt3Status { + if nt3Status && !onlyChinaTest { utils.PrintCenteredTitle("三网回程路由检测", width) ntrace.TraceRoute3(language, nt3Location, nt3CheckType) } }, tempOutput, output) + output = utils.PrintAndCapture(func() { + if onlyChinaTest || pingTestStatus { + utils.PrintCenteredTitle("三网ICMP的PING值检测", width) + pt.PingTest() + } + }, tempOutput, output) } output = utils.PrintAndCapture(func() { if speedTestStatus { diff --git a/utils/utils.go b/utils/utils.go index 71e3f0f0..0e396aaa 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -6,6 +6,7 @@ import ( "github.com/imroc/req/v3" "github.com/oneclickvirt/UnlockTests/uts" "github.com/oneclickvirt/basics/system" + . "github.com/oneclickvirt/defaultset" "github.com/oneclickvirt/security/network" "io" "os" @@ -44,6 +45,89 @@ func PrintHead(language string, width int, ecsVersion string) { } } +func CheckChina(enableLogger bool) bool { + if enableLogger { + InitLogger() + defer Logger.Sync() + } + var selectChina bool + client := req.C() + client.SetTimeout(6 * time.Second) + client.R(). + SetRetryCount(2). + SetRetryBackoffInterval(1*time.Second, 3*time.Second). + SetRetryFixedInterval(2 * time.Second) + ipapiURL := "https://ipapi.co/json" + cipccURL := "http://cip.cc" + ipapiResp, err := client.R().Get(ipapiURL) + if err != nil { + if enableLogger { + Logger.Info("无法获取IP信息:" + err.Error()) + } + } else { + defer ipapiResp.Body.Close() + var ipapiBody string + ipapiBody, err = ipapiResp.ToString() + if err != nil { + if enableLogger { + Logger.Info("无法读取IP信息响应:" + err.Error()) + } + } else { + isInChina := strings.Contains(ipapiBody, "China") + if isInChina { + fmt.Println("根据ipapi.co提供的信息,当前IP可能在中国") + var input string + fmt.Print("是否选用中国专项测试(无流媒体测试,有三网Ping值测试)? ([y]/n) ") + fmt.Scanln(&input) + switch strings.ToLower(input) { + case "yes", "y": + fmt.Println("使用中国专项测试") + selectChina = true + case "no", "n": + fmt.Println("不使用中国专项测试") + default: + fmt.Println("使用中国专项测试") + selectChina = true + } + return selectChina + } + } + } + cipccResp, err := client.R().Get(cipccURL) + if err != nil { + if enableLogger { + Logger.Info("无法获取IP信息:" + err.Error()) + } + return false + } + defer cipccResp.Body.Close() + cipccBody, err := cipccResp.ToString() + if err != nil { + if enableLogger { + Logger.Info("无法读取IP信息响应:" + err.Error()) + } + return false + } + isInChina := strings.Contains(cipccBody, "中国") + if isInChina { + fmt.Println("根据cip.cc提供的信息,当前IP可能在中国") + var input string + fmt.Print("是否选用中国专项测试(无流媒体测试,有三网Ping值测试)? ([y]/n) ") + fmt.Scanln(&input) + switch strings.ToLower(input) { + case "yes", "y": + fmt.Println("使用中国专项测试") + selectChina = true + case "no", "n": + fmt.Println("不使用中国专项测试") + default: + fmt.Println("不使用中国专项测试") + selectChina = true + } + } + return selectChina +} + // SecurityCheck 执行安全检查 func SecurityCheck(language, nt3CheckType string, securtyCheckStatus bool) (string, string, string) { var wgt sync.WaitGroup