mirror of
https://github.com/oneclickvirt/ecs.git
synced 2025-09-28 12:12:14 +08:00
Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
df735880fe | ||
![]() |
f0b89d4168 | ||
![]() |
8af46d4bfb | ||
![]() |
e8fdbee3e4 | ||
![]() |
6cbd20fc90 | ||
![]() |
25c0b2ba95 | ||
![]() |
f16c0e7bcf | ||
![]() |
12e29bc105 | ||
![]() |
f7a7e34b34 | ||
![]() |
4d7049c9b8 | ||
![]() |
ad61caf1d2 | ||
![]() |
f84cbe2078 | ||
![]() |
a9df37f216 | ||
![]() |
60bec3d46c | ||
![]() |
3c1e1f19c4 | ||
![]() |
207d8ff746 |
25
README.md
25
README.md
@@ -1,11 +1,21 @@
|
|||||||
# ecs
|
# ecs
|
||||||
|
|
||||||
[](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml)
|
[](https://github.com/oneclickvirt/ecs/actions/workflows/main.yaml) [](https://www.spiritlhl.net/)
|
||||||
|
|
||||||
融合怪测评脚本 - GO重构版本
|
融合怪测评脚本 - GO重构版本 - 由于未正式发版,如有问题请issues反馈
|
||||||
|
|
||||||
Shell版本: https://github.com/spiritLHLS/ecs
|
Shell版本: https://github.com/spiritLHLS/ecs
|
||||||
|
|
||||||
|
## 适配系统和架构
|
||||||
|
|
||||||
|
已支持的架构: x86_64、i386、arm64
|
||||||
|
|
||||||
|
待支持的架构(有依赖包不支持该架构): s390x
|
||||||
|
|
||||||
|
已支持的系统: Linux、Windows
|
||||||
|
|
||||||
|
待支持的系统(存在硬件测试BUG未修复): MacOS
|
||||||
|
|
||||||
## 功能
|
## 功能
|
||||||
|
|
||||||
- [x] 系统基础信息查询[自研[basics](https://github.com/oneclickvirt/basics)、[gostun](https://github.com/oneclickvirt/gostun)]
|
- [x] 系统基础信息查询[自研[basics](https://github.com/oneclickvirt/basics)、[gostun](https://github.com/oneclickvirt/gostun)]
|
||||||
@@ -20,14 +30,9 @@ Shell版本: https://github.com/spiritLHLS/ecs
|
|||||||
- [x] 三网回程测试[借鉴[zhanghanyun/backtrace](https://github.com/zhanghanyun/backtrace)二次开发至于[oneclickvirt/backtrace](https://github.com/oneclickvirt/backtrace)]
|
- [x] 三网回程测试[借鉴[zhanghanyun/backtrace](https://github.com/zhanghanyun/backtrace)二次开发至于[oneclickvirt/backtrace](https://github.com/oneclickvirt/backtrace)]
|
||||||
- [x] 三网路由测试[借鉴[NTrace-core](https://github.com/nxtrace/NTrace-core)二次开发至于[nt3](https://github.com/oneclickvirt/nt3)]
|
- [x] 三网路由测试[借鉴[NTrace-core](https://github.com/nxtrace/NTrace-core)二次开发至于[nt3](https://github.com/oneclickvirt/nt3)]
|
||||||
- [x] 测试网速[基于[speedtest.net-爬虫](https://github.com/spiritLHLS/speedtest.net-CN-ID)、[speedtest.cn-爬虫](https://github.com/spiritLHLS/speedtest.cn-CN-ID)的数据,借鉴[speedtest-go](https://github.com/showwin/speedtest-go)二次开发至于[oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)]
|
- [x] 测试网速[基于[speedtest.net-爬虫](https://github.com/spiritLHLS/speedtest.net-CN-ID)、[speedtest.cn-爬虫](https://github.com/spiritLHLS/speedtest.cn-CN-ID)的数据,借鉴[speedtest-go](https://github.com/showwin/speedtest-go)二次开发至于[oneclickvirt/speedtest](https://github.com/oneclickvirt/speedtest)]
|
||||||
|
- [x] 测试三网Ping值[借鉴[ecsspeed](https://github.com/spiritLHLS/ecsspeed)的逻辑二次开发至于[pingtest](https://github.com/oneclickvirt/pingtest)]
|
||||||
|
|
||||||
## TODO
|
## Linux上使用的说明
|
||||||
|
|
||||||
- [ ] 测试三网Ping值[借鉴[ecsspeed](https://github.com/spiritLHLS/ecsspeed)的逻辑二次开发]
|
|
||||||
|
|
||||||
## Linux/macOS上使用的说明
|
|
||||||
|
|
||||||
开发中,勿要使用
|
|
||||||
|
|
||||||
下载脚本
|
下载脚本
|
||||||
|
|
||||||
@@ -71,6 +76,7 @@ shell脚本的说明
|
|||||||
Available commands:
|
Available commands:
|
||||||
|
|
||||||
./goecs.sh env Check and Install package:
|
./goecs.sh env Check and Install package:
|
||||||
|
sudo (Almost all unix-like systems have it.)
|
||||||
tar (Almost all unix-like systems have it.)
|
tar (Almost all unix-like systems have it.)
|
||||||
unzip (Almost all unix-like systems have it.)
|
unzip (Almost all unix-like systems have it.)
|
||||||
dd (Almost all unix-like systems have it.)
|
dd (Almost all unix-like systems have it.)
|
||||||
@@ -78,6 +84,7 @@ Available commands:
|
|||||||
sysbench (Almost all unix-like systems can be installed through the system's package manager.)
|
sysbench (Almost all unix-like systems can be installed through the system's package manager.)
|
||||||
geekbench (geekbench5)(Only support IPV4 environment, and memory greater than 1GB network detection, only support amd64 and arm64 architecture.)
|
geekbench (geekbench5)(Only support IPV4 environment, and memory greater than 1GB network detection, only support amd64 and arm64 architecture.)
|
||||||
speedtest (Use the officially provided binaries for more accurate test results.)
|
speedtest (Use the officially provided binaries for more accurate test results.)
|
||||||
|
ping (Use the officially provided binaries for more accurate test results.)
|
||||||
In fact, sysbench/geekbench is the only one of the above dependencies that must be installed, without which the CPU score cannot be tested.
|
In fact, sysbench/geekbench is the only one of the above dependencies that must be installed, without which the CPU score cannot be tested.
|
||||||
./goecs.sh install Install goecs command
|
./goecs.sh install Install goecs command
|
||||||
./goecs.sh upgrade Upgrade goecs command
|
./goecs.sh upgrade Upgrade goecs command
|
||||||
|
10
go.mod
10
go.mod
@@ -4,19 +4,20 @@ go 1.22.4
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/imroc/req/v3 v3.43.7
|
github.com/imroc/req/v3 v3.43.7
|
||||||
github.com/oneclickvirt/CommonMediaTests v0.0.3-20240702073302
|
github.com/oneclickvirt/CommonMediaTests v0.0.4-20240704024502
|
||||||
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930
|
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930
|
||||||
github.com/oneclickvirt/backtrace v0.0.4-20240624090335
|
github.com/oneclickvirt/backtrace v0.0.4-20240702140722
|
||||||
github.com/oneclickvirt/basics v0.0.5-20240702055351
|
github.com/oneclickvirt/basics v0.0.5-20240702055351
|
||||||
github.com/oneclickvirt/cputest v0.0.8-20240702070215
|
github.com/oneclickvirt/cputest v0.0.8-20240702070215
|
||||||
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
github.com/oneclickvirt/defaultset v0.0.2-20240624082446
|
||||||
github.com/oneclickvirt/disktest v0.0.4-20240702071738
|
github.com/oneclickvirt/disktest v0.0.4-20240702071738
|
||||||
github.com/oneclickvirt/gostun v0.0.3-20240702054621
|
github.com/oneclickvirt/gostun v0.0.3-20240702054621
|
||||||
github.com/oneclickvirt/memorytest v0.0.2-20240702031042
|
github.com/oneclickvirt/memorytest v0.0.2-20240702031042
|
||||||
github.com/oneclickvirt/nt3 v0.0.2-20240630152642
|
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/portchecker v0.0.1-20240624155429
|
||||||
github.com/oneclickvirt/security v0.0.4-20240702055848
|
github.com/oneclickvirt/security v0.0.4-20240702055848
|
||||||
github.com/oneclickvirt/speedtest v0.0.6-20240630114816
|
github.com/oneclickvirt/speedtest v0.0.7-20240704023701
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -45,6 +46,7 @@ require (
|
|||||||
github.com/magiconair/properties v1.8.7 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // 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/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/nxtrace/NTrace-core v1.3.1 // indirect
|
github.com/nxtrace/NTrace-core v1.3.1 // indirect
|
||||||
|
20
go.sum
20
go.sum
@@ -75,14 +75,12 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
|
|||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/nxtrace/NTrace-core v1.3.1 h1:f4z5UaZEuhUP/g6xElpZ2bo+guWITJVrMKrJTqd27oc=
|
github.com/nxtrace/NTrace-core v1.3.1 h1:f4z5UaZEuhUP/g6xElpZ2bo+guWITJVrMKrJTqd27oc=
|
||||||
github.com/nxtrace/NTrace-core v1.3.1/go.mod h1:0Px/Zc60qk6cssmP+yv4kstFxvX9sXqDduoVqBO+qf8=
|
github.com/nxtrace/NTrace-core v1.3.1/go.mod h1:0Px/Zc60qk6cssmP+yv4kstFxvX9sXqDduoVqBO+qf8=
|
||||||
github.com/oneclickvirt/CommonMediaTests v0.0.2-20240630023003 h1:8jQFqDK5m7V9xlLBk8rSUYDyi3u5xzf5kqwEx5b+/7g=
|
github.com/oneclickvirt/CommonMediaTests v0.0.4-20240704024502 h1:hRIYJ2uEp2N3AH5bP5X6bwfdwWfZQO/2WoqpUJ8+WsY=
|
||||||
github.com/oneclickvirt/CommonMediaTests v0.0.2-20240630023003/go.mod h1:DAmFPRjFV5p9fEzUUSml5jJGn2f1NZJQCzTxITHDjc4=
|
github.com/oneclickvirt/CommonMediaTests v0.0.4-20240704024502/go.mod h1:DAmFPRjFV5p9fEzUUSml5jJGn2f1NZJQCzTxITHDjc4=
|
||||||
github.com/oneclickvirt/CommonMediaTests v0.0.3-20240702073302 h1:JbgWWVL6WR44H/dqpBLdet0M7lM/YrnwGEG40FmawRo=
|
|
||||||
github.com/oneclickvirt/CommonMediaTests v0.0.3-20240702073302/go.mod h1:DAmFPRjFV5p9fEzUUSml5jJGn2f1NZJQCzTxITHDjc4=
|
|
||||||
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930 h1:/Sc4Eas1Pso18ak93wlazkuMKRRElCntITja/0opOpM=
|
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930 h1:/Sc4Eas1Pso18ak93wlazkuMKRRElCntITja/0opOpM=
|
||||||
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930/go.mod h1:HP3CvAS+AJWxxY+BVbxIOlvaQ87YOSge89vAMG52b5o=
|
github.com/oneclickvirt/UnlockTests v0.0.10-20240630044930/go.mod h1:HP3CvAS+AJWxxY+BVbxIOlvaQ87YOSge89vAMG52b5o=
|
||||||
github.com/oneclickvirt/backtrace v0.0.4-20240624090335 h1:0LP5KyA6GLlqQAtOF0uyBSAykHJrzOA96Eb87qUhGQw=
|
github.com/oneclickvirt/backtrace v0.0.4-20240702140722 h1:UJ/VWf+ZbhGarc9HcHMIyenpmX+b2LxkXu0hlLk3Gxs=
|
||||||
github.com/oneclickvirt/backtrace v0.0.4-20240624090335/go.mod h1:zvsC7xY/WZqs5KL2JB967OVnuqjNbxu9bW6wXRLo5h8=
|
github.com/oneclickvirt/backtrace v0.0.4-20240702140722/go.mod h1:zvsC7xY/WZqs5KL2JB967OVnuqjNbxu9bW6wXRLo5h8=
|
||||||
github.com/oneclickvirt/basics v0.0.5-20240702055351 h1:Ez9iLNAr+A8AA3EdcDh1aB/XVSWjwSKjhgMUySkcSSY=
|
github.com/oneclickvirt/basics v0.0.5-20240702055351 h1:Ez9iLNAr+A8AA3EdcDh1aB/XVSWjwSKjhgMUySkcSSY=
|
||||||
github.com/oneclickvirt/basics v0.0.5-20240702055351/go.mod h1:CjcPkpy/ClTgrwB6YJtBi//lvseHAWYmsbTrOOm+zCs=
|
github.com/oneclickvirt/basics v0.0.5-20240702055351/go.mod h1:CjcPkpy/ClTgrwB6YJtBi//lvseHAWYmsbTrOOm+zCs=
|
||||||
github.com/oneclickvirt/cputest v0.0.8-20240702070215 h1:CcFpyVPlQkJ6vjFP17BRuJhh/afiJhOhZ0BW+TtfVDg=
|
github.com/oneclickvirt/cputest v0.0.8-20240702070215 h1:CcFpyVPlQkJ6vjFP17BRuJhh/afiJhOhZ0BW+TtfVDg=
|
||||||
@@ -95,14 +93,16 @@ github.com/oneclickvirt/gostun v0.0.3-20240702054621 h1:IE89eEYV9TJbF94SakQDAxTL
|
|||||||
github.com/oneclickvirt/gostun v0.0.3-20240702054621/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
github.com/oneclickvirt/gostun v0.0.3-20240702054621/go.mod h1:f7DPEXAxbmwXSW33dbxtb0/KzqvOBWhTs2Or5xBerQA=
|
||||||
github.com/oneclickvirt/memorytest v0.0.2-20240702031042 h1:j+LsjOh5glYiidqtSqjZJRw694LYW1PHLMh6AovluTQ=
|
github.com/oneclickvirt/memorytest v0.0.2-20240702031042 h1:j+LsjOh5glYiidqtSqjZJRw694LYW1PHLMh6AovluTQ=
|
||||||
github.com/oneclickvirt/memorytest v0.0.2-20240702031042/go.mod h1:+YNzy+NeVg61d0kNwSyVDqHyVtKzjuRe1NvMzsDLg0I=
|
github.com/oneclickvirt/memorytest v0.0.2-20240702031042/go.mod h1:+YNzy+NeVg61d0kNwSyVDqHyVtKzjuRe1NvMzsDLg0I=
|
||||||
github.com/oneclickvirt/nt3 v0.0.2-20240630152642 h1:BkpR1j9JaDxMzx7iIwtsnFDxSldjYr2TUYpZE7m8z/Y=
|
github.com/oneclickvirt/nt3 v0.0.3-20240702132013 h1:zPI/zqqCraIVwRnYz07hMkBKDRJVkEBb6gZpZ4M9CjI=
|
||||||
github.com/oneclickvirt/nt3 v0.0.2-20240630152642/go.mod h1:UojPmtangn17TiQaDccVrZbn6sZwJOtzBgg3idp68cA=
|
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 h1:+wapaOcFrg1iWJDhBKThDzppyIMY7hWxK7F5RBkZg4o=
|
||||||
github.com/oneclickvirt/portchecker v0.0.1-20240624155429/go.mod h1:HQxSTrqM8/QFqHMTBZ7S8H9eEO5FkUXU1eb7ZX5Mk+k=
|
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=
|
github.com/oneclickvirt/security v0.0.4-20240702055848 h1:UCfjfoslcfKhCvJm37jQmhJ+O8d4lL+uvBJVcLAXc2s=
|
||||||
github.com/oneclickvirt/security v0.0.4-20240702055848/go.mod h1:YKmO3FRWjhHYJ5rKqz+1H3hB6sCA4gioik7r8GMfyqo=
|
github.com/oneclickvirt/security v0.0.4-20240702055848/go.mod h1:YKmO3FRWjhHYJ5rKqz+1H3hB6sCA4gioik7r8GMfyqo=
|
||||||
github.com/oneclickvirt/speedtest v0.0.6-20240630114816 h1:gI2hqV0IwcvGqYzLhlt4w2oZvYhCL+73jftUuJYBsuI=
|
github.com/oneclickvirt/speedtest v0.0.7-20240704023701 h1:F8ChZXf3U1/bUk+dCFt0Gc01LSPLhbBhCeHjkEJ6K88=
|
||||||
github.com/oneclickvirt/speedtest v0.0.6-20240630114816/go.mod h1:zd5ZgIGslmtQLQehEfRjyumlvgDHTpCSMchKfKXoASI=
|
github.com/oneclickvirt/speedtest v0.0.7-20240704023701/go.mod h1:zd5ZgIGslmtQLQehEfRjyumlvgDHTpCSMchKfKXoASI=
|
||||||
github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
|
github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA=
|
||||||
github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
|
github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To=
|
||||||
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
|
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
|
||||||
|
55
goecs.go
55
goecs.go
@@ -19,8 +19,12 @@ import (
|
|||||||
"github.com/oneclickvirt/ecs/utils"
|
"github.com/oneclickvirt/ecs/utils"
|
||||||
gostunmodel "github.com/oneclickvirt/gostun/model"
|
gostunmodel "github.com/oneclickvirt/gostun/model"
|
||||||
memorytestmodel "github.com/oneclickvirt/memorytest/memory"
|
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"
|
"github.com/oneclickvirt/portchecker/email"
|
||||||
speedtestmodel "github.com/oneclickvirt/speedtest/model"
|
speedtestmodel "github.com/oneclickvirt/speedtest/model"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
"regexp"
|
||||||
@@ -32,8 +36,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ecsVersion = "v0.0.30"
|
ecsVersion = "v0.0.35"
|
||||||
menuMode bool
|
menuMode bool
|
||||||
|
onlyChinaTest bool
|
||||||
input, choice string
|
input, choice string
|
||||||
showVersion bool
|
showVersion bool
|
||||||
enableLogger bool
|
enableLogger bool
|
||||||
@@ -47,7 +52,7 @@ var (
|
|||||||
width = 82
|
width = 82
|
||||||
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus bool
|
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus bool
|
||||||
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus bool
|
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus bool
|
||||||
backtraceStatus, nt3Status, speedTestStatus bool
|
backtraceStatus, nt3Status, speedTestStatus, pingTestStatus bool
|
||||||
filePath = "goecs.txt"
|
filePath = "goecs.txt"
|
||||||
enabelUpload = true
|
enabelUpload = true
|
||||||
help bool
|
help bool
|
||||||
@@ -99,11 +104,14 @@ func main() {
|
|||||||
memorytestmodel.EnableLoger = true
|
memorytestmodel.EnableLoger = true
|
||||||
disktestmodel.EnableLoger = true
|
disktestmodel.EnableLoger = true
|
||||||
commediatests.EnableLoger = true
|
commediatests.EnableLoger = true
|
||||||
|
ptmodel.EnableLoger = true
|
||||||
backtraceori.EnableLoger = true
|
backtraceori.EnableLoger = true
|
||||||
|
nt3model.EnableLoger = true
|
||||||
speedtestmodel.EnableLoger = true
|
speedtestmodel.EnableLoger = true
|
||||||
}
|
}
|
||||||
|
go func() {
|
||||||
|
http.Get("https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Foneclickvirt%2Fecs&count_bg=%2357DEFF&title_bg=%23000000&icon=cliqz.svg&icon_color=%23E7E7E7&title=hits&edge_flat=false")
|
||||||
|
}()
|
||||||
if menuMode {
|
if menuMode {
|
||||||
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus = false, false, false, false
|
basicStatus, cpuTestStatus, memoryTestStatus, diskTestStatus = false, false, false, false
|
||||||
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus = false, false, false, false
|
commTestStatus, utTestStatus, securityTestStatus, emailTestStatus = false, false, false, false
|
||||||
@@ -155,6 +163,7 @@ func main() {
|
|||||||
backtraceStatus = true
|
backtraceStatus = true
|
||||||
nt3Status = true
|
nt3Status = true
|
||||||
speedTestStatus = true
|
speedTestStatus = true
|
||||||
|
onlyChinaTest = utils.CheckChina(enableLogger)
|
||||||
break Loop
|
break Loop
|
||||||
case "2":
|
case "2":
|
||||||
basicStatus = true
|
basicStatus = true
|
||||||
@@ -214,6 +223,7 @@ func main() {
|
|||||||
backtraceStatus = true
|
backtraceStatus = true
|
||||||
nt3Status = true
|
nt3Status = true
|
||||||
speedTestStatus = true
|
speedTestStatus = true
|
||||||
|
pingTestStatus = true
|
||||||
break Loop
|
break Loop
|
||||||
default:
|
default:
|
||||||
if language == "zh" {
|
if language == "zh" {
|
||||||
@@ -287,7 +297,7 @@ func main() {
|
|||||||
emailInfo = email.EmailCheck()
|
emailInfo = email.EmailCheck()
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
if utTestStatus {
|
if utTestStatus && !onlyChinaTest {
|
||||||
wg1.Add(1)
|
wg1.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer wg1.Done()
|
defer wg1.Done()
|
||||||
@@ -295,13 +305,13 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if commTestStatus {
|
if commTestStatus && !onlyChinaTest {
|
||||||
utils.PrintCenteredTitle("御三家流媒体解锁", width)
|
utils.PrintCenteredTitle("御三家流媒体解锁", width)
|
||||||
commediatest.ComMediaTest(language)
|
commediatest.ComMediaTest(language)
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if utTestStatus {
|
if utTestStatus && !onlyChinaTest {
|
||||||
utils.PrintCenteredTitle("跨国流媒体解锁", width)
|
utils.PrintCenteredTitle("跨国流媒体解锁", width)
|
||||||
wg1.Wait()
|
wg1.Wait()
|
||||||
fmt.Printf(mediaInfo)
|
fmt.Printf(mediaInfo)
|
||||||
@@ -322,18 +332,24 @@ func main() {
|
|||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
if runtime.GOOS != "windows" {
|
if runtime.GOOS != "windows" {
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if backtraceStatus {
|
if backtraceStatus && !onlyChinaTest {
|
||||||
utils.PrintCenteredTitle("三网回程线路检测", width)
|
utils.PrintCenteredTitle("三网回程线路检测", width)
|
||||||
backtrace.BackTrace()
|
backtrace.BackTrace()
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
// nexttrace 在win上不支持检测,报错 bind: An invalid argument was supplied.
|
// nexttrace 在win上不支持检测,报错 bind: An invalid argument was supplied.
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if nt3Status {
|
if nt3Status && !onlyChinaTest {
|
||||||
utils.PrintCenteredTitle("三网回程路由检测", width)
|
utils.PrintCenteredTitle("三网回程路由检测", width)
|
||||||
ntrace.TraceRoute3(language, nt3Location, nt3CheckType)
|
ntrace.TraceRoute3(language, nt3Location, nt3CheckType)
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
|
output = utils.PrintAndCapture(func() {
|
||||||
|
if onlyChinaTest || pingTestStatus {
|
||||||
|
utils.PrintCenteredTitle("三网ICMP的PING值检测", width)
|
||||||
|
pt.PingTest()
|
||||||
|
}
|
||||||
|
}, tempOutput, output)
|
||||||
}
|
}
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if speedTestStatus {
|
if speedTestStatus {
|
||||||
@@ -341,12 +357,12 @@ func main() {
|
|||||||
speedtest.ShowHead(language)
|
speedtest.ShowHead(language)
|
||||||
if (menuMode && choice == "1") || !menuMode {
|
if (menuMode && choice == "1") || !menuMode {
|
||||||
speedtest.NearbySP()
|
speedtest.NearbySP()
|
||||||
speedtest.CustomSP("net", "global", 2)
|
speedtest.CustomSP("net", "global", 2, language)
|
||||||
speedtest.CustomSP("net", "cu", spNum)
|
speedtest.CustomSP("net", "cu", spNum, language)
|
||||||
speedtest.CustomSP("net", "ct", spNum)
|
speedtest.CustomSP("net", "ct", spNum, language)
|
||||||
speedtest.CustomSP("net", "cmcc", spNum)
|
speedtest.CustomSP("net", "cmcc", spNum, language)
|
||||||
} else if menuMode && choice == "2" || choice == "3" || choice == "4" || choice == "5" {
|
} else if menuMode && choice == "2" || choice == "3" || choice == "4" || choice == "5" {
|
||||||
speedtest.CustomSP("net", "global", 4)
|
speedtest.CustomSP("net", "global", 4, language)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
@@ -399,12 +415,6 @@ func main() {
|
|||||||
emailInfo = email.EmailCheck()
|
emailInfo = email.EmailCheck()
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
output = utils.PrintAndCapture(func() {
|
|
||||||
if commTestStatus {
|
|
||||||
utils.PrintCenteredTitle("The Three Main Streaming Media Unlock", width)
|
|
||||||
commediatest.ComMediaTest(language)
|
|
||||||
}
|
|
||||||
}, tempOutput, output)
|
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
if utTestStatus {
|
if utTestStatus {
|
||||||
utils.PrintCenteredTitle("Cross-Border Streaming Media Unlock", width)
|
utils.PrintCenteredTitle("Cross-Border Streaming Media Unlock", width)
|
||||||
@@ -429,10 +439,9 @@ func main() {
|
|||||||
utils.PrintCenteredTitle("Nearby Node Speed Test", width)
|
utils.PrintCenteredTitle("Nearby Node Speed Test", width)
|
||||||
speedtest.ShowHead(language)
|
speedtest.ShowHead(language)
|
||||||
speedtest.NearbySP()
|
speedtest.NearbySP()
|
||||||
speedtest.CustomSP("net", "global", -1)
|
speedtest.CustomSP("net", "global", -1, language)
|
||||||
}
|
}
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
|
|
||||||
endTime := time.Now()
|
endTime := time.Now()
|
||||||
duration := endTime.Sub(startTime)
|
duration := endTime.Sub(startTime)
|
||||||
minutes := int(duration.Minutes())
|
minutes := int(duration.Minutes())
|
||||||
@@ -440,7 +449,7 @@ func main() {
|
|||||||
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
currentTime := time.Now().Format("Mon Jan 2 15:04:05 MST 2006")
|
||||||
output = utils.PrintAndCapture(func() {
|
output = utils.PrintAndCapture(func() {
|
||||||
utils.PrintCenteredTitle("", width)
|
utils.PrintCenteredTitle("", width)
|
||||||
fmt.Printf("Cost Time : %d 分 %d 秒\n", minutes, seconds)
|
fmt.Printf("Cost Time : %d min %d sec\n", minutes, seconds)
|
||||||
fmt.Printf("Current Time : %s\n", currentTime)
|
fmt.Printf("Current Time : %s\n", currentTime)
|
||||||
utils.PrintCenteredTitle("", width)
|
utils.PrintCenteredTitle("", width)
|
||||||
}, tempOutput, output)
|
}, tempOutput, output)
|
||||||
|
37
goecs.sh
37
goecs.sh
@@ -61,7 +61,7 @@ goecs_check() {
|
|||||||
# 检测原始goecs命令是否存在,若存在则升级,不存在则安装
|
# 检测原始goecs命令是否存在,若存在则升级,不存在则安装
|
||||||
version_output=$(goecs -v command 2>/dev/null || ./goecs -v command 2>/dev/null)
|
version_output=$(goecs -v command 2>/dev/null || ./goecs -v command 2>/dev/null)
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
extracted_version=$(echo "${version_output//v/}")
|
extracted_version=${version_output//v/}
|
||||||
if [ -n "$extracted_version" ]; then
|
if [ -n "$extracted_version" ]; then
|
||||||
ecs_version=$ECS_VERSION
|
ecs_version=$ECS_VERSION
|
||||||
if [[ "$(echo -e "$extracted_version\n$ecs_version" | sort -V | tail -n 1)" == "$extracted_version" ]]; then
|
if [[ "$(echo -e "$extracted_version\n$ecs_version" | sort -V | tail -n 1)" == "$extracted_version" ]]; then
|
||||||
@@ -233,8 +233,23 @@ env_check() {
|
|||||||
PACKAGE_INSTALL=("apt-get -y install" "apt-get -y install" "yum -y install" "yum -y install" "yum -y install" "pacman -Sy --noconfirm --needed" "pkg install -y" "apk add")
|
PACKAGE_INSTALL=("apt-get -y install" "apt-get -y install" "yum -y install" "yum -y install" "yum -y install" "pacman -Sy --noconfirm --needed" "pkg install -y" "apk add")
|
||||||
PACKAGE_REMOVE=("apt-get -y remove" "apt-get -y remove" "yum -y remove" "yum -y remove" "yum -y remove" "pacman -Rsc --noconfirm" "pkg delete" "apk del")
|
PACKAGE_REMOVE=("apt-get -y remove" "apt-get -y remove" "yum -y remove" "yum -y remove" "yum -y remove" "pacman -Rsc --noconfirm" "pkg delete" "apk del")
|
||||||
PACKAGE_UNINSTALL=("apt-get -y autoremove" "apt-get -y autoremove" "yum -y autoremove" "yum -y autoremove" "yum -y autoremove" "" "pkg autoremove" "apk autoremove")
|
PACKAGE_UNINSTALL=("apt-get -y autoremove" "apt-get -y autoremove" "yum -y autoremove" "yum -y autoremove" "yum -y autoremove" "" "pkg autoremove" "apk autoremove")
|
||||||
CMD=("$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)" "$(hostnamectl 2>/dev/null | grep -i system | cut -d : -f2)" "$(lsb_release -sd 2>/dev/null)" "$(grep -i description /etc/lsb-release 2>/dev/null | cut -d \" -f2)" "$(grep . /etc/redhat-release 2>/dev/null)" "$(grep . /etc/issue 2>/dev/null | cut -d \\ -f1 | sed '/^[ ]*$/d')" "$(grep -i pretty_name /etc/os-release 2>/dev/null | cut -d \" -f2)" "$(uname -s)" "$(uname -s)")
|
if [ -s /etc/os-release ]; then
|
||||||
SYS="${CMD[0]}"
|
SYS="$(grep -i pretty_name /etc/os-release | cut -d \" -f2)"
|
||||||
|
elif [ -x "$(type -p hostnamectl)" ]; then
|
||||||
|
SYS="$(hostnamectl | grep -i system | cut -d : -f2)"
|
||||||
|
elif [ -x "$(type -p lsb_release)" ]; then
|
||||||
|
SYS="$(lsb_release -sd)"
|
||||||
|
elif [ -s /etc/lsb-release ]; then
|
||||||
|
SYS="$(grep -i description /etc/lsb-release | cut -d \" -f2)"
|
||||||
|
elif [ -s /etc/redhat-release ]; then
|
||||||
|
SYS="$(grep . /etc/redhat-release)"
|
||||||
|
elif [ -s /etc/issue ]; then
|
||||||
|
SYS="$(grep . /etc/issue | cut -d '\' -f1 | sed '/^[ ]*$/d')"
|
||||||
|
elif [ -f /etc/alpine-release ]; then
|
||||||
|
SYS="alpine"
|
||||||
|
else
|
||||||
|
SYS="$(uname -s)}"
|
||||||
|
fi
|
||||||
[[ -n $SYS ]] || exit 1
|
[[ -n $SYS ]] || exit 1
|
||||||
for ((int = 0; int < ${#REGEX[@]}; int++)); do
|
for ((int = 0; int < ${#REGEX[@]}; int++)); do
|
||||||
if [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[int]} ]]; then
|
if [[ $(echo "$SYS" | tr '[:upper:]' '[:lower:]') =~ ${REGEX[int]} ]]; then
|
||||||
@@ -246,6 +261,10 @@ env_check() {
|
|||||||
check_cdn_file
|
check_cdn_file
|
||||||
_green "Update system manager."
|
_green "Update system manager."
|
||||||
$PACKAGE_UPDATE command 2>/dev/null
|
$PACKAGE_UPDATE command 2>/dev/null
|
||||||
|
if ! command -v sudo >/dev/null 2>&1; then
|
||||||
|
_green "Installing sudo"
|
||||||
|
$PACKAGE_INSTALL sudo
|
||||||
|
fi
|
||||||
if ! command -v tar >/dev/null 2>&1; then
|
if ! command -v tar >/dev/null 2>&1; then
|
||||||
_green "Installing tar"
|
_green "Installing tar"
|
||||||
$PACKAGE_INSTALL tar
|
$PACKAGE_INSTALL tar
|
||||||
@@ -300,10 +319,20 @@ env_check() {
|
|||||||
echo "rm -rf /usr/bin/speedtest-go"
|
echo "rm -rf /usr/bin/speedtest-go"
|
||||||
_blue "to uninstall speedtest and speedtest-go"
|
_blue "to uninstall speedtest and speedtest-go"
|
||||||
fi
|
fi
|
||||||
|
if ! command -v ping >/dev/null 2>&1; then
|
||||||
|
_green "Installing ping"
|
||||||
|
${PACKAGE_INSTALL[int]} iputils-ping >/dev/null 2>&1
|
||||||
|
${PACKAGE_INSTALL[int]} ping >/dev/null 2>&1
|
||||||
|
fi
|
||||||
if [ "$(uname -s)" = "Darwin" ]; then
|
if [ "$(uname -s)" = "Darwin" ]; then
|
||||||
echo "Detected MacOS. Installing sysbench and fio..."
|
echo "Detected MacOS. Installing sysbench and fio..."
|
||||||
brew install --force sysbench fio dd
|
brew install --force sysbench fio dd
|
||||||
# 有问题,需要修复,root环境不能brew,brew安装完毕后可能路径不在环境变量中
|
# 有问题,需要修复,root环境不能brew,brew安装完毕后可能路径不在环境变量中
|
||||||
|
else
|
||||||
|
if ! grep -q "^net.ipv4.ping_group_range = 0 2147483647$" /etc/sysctl.conf; then
|
||||||
|
echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.conf
|
||||||
|
sysctl -p
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
_green "The environment is ready."
|
_green "The environment is ready."
|
||||||
}
|
}
|
||||||
@@ -318,6 +347,7 @@ show_help() {
|
|||||||
Available commands:
|
Available commands:
|
||||||
|
|
||||||
./goecs.sh env Check and Install package:
|
./goecs.sh env Check and Install package:
|
||||||
|
sudo (Almost all unix-like systems have it.)
|
||||||
tar (Almost all unix-like systems have it.)
|
tar (Almost all unix-like systems have it.)
|
||||||
unzip (Almost all unix-like systems have it.)
|
unzip (Almost all unix-like systems have it.)
|
||||||
dd (Almost all unix-like systems have it.)
|
dd (Almost all unix-like systems have it.)
|
||||||
@@ -325,6 +355,7 @@ Available commands:
|
|||||||
sysbench (Almost all unix-like systems can be installed through the system's package manager.)
|
sysbench (Almost all unix-like systems can be installed through the system's package manager.)
|
||||||
geekbench (geekbench5)(Only support IPV4 environment, and memory greater than 1GB network detection, only support amd64 and arm64 architecture.)
|
geekbench (geekbench5)(Only support IPV4 environment, and memory greater than 1GB network detection, only support amd64 and arm64 architecture.)
|
||||||
speedtest (Use the officially provided binaries for more accurate test results.)
|
speedtest (Use the officially provided binaries for more accurate test results.)
|
||||||
|
ping (Use the officially provided binaries for more accurate test results.)
|
||||||
In fact, sysbench/geekbench is the only one of the above dependencies that must be installed, without which the CPU score cannot be tested.
|
In fact, sysbench/geekbench is the only one of the above dependencies that must be installed, without which the CPU score cannot be tested.
|
||||||
./goecs.sh install Install goecs command
|
./goecs.sh install Install goecs command
|
||||||
./goecs.sh upgrade Upgrade goecs command
|
./goecs.sh upgrade Upgrade goecs command
|
||||||
|
@@ -19,7 +19,7 @@ func NearbySP() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func CustomSP(platform, operator string, num int) {
|
func CustomSP(platform, operator string, num int, language string) {
|
||||||
var url, parseType string
|
var url, parseType string
|
||||||
if strings.ToLower(platform) == "cn" {
|
if strings.ToLower(platform) == "cn" {
|
||||||
if strings.ToLower(operator) == "cmcc" {
|
if strings.ToLower(operator) == "cmcc" {
|
||||||
@@ -59,8 +59,8 @@ func CustomSP(platform, operator string, num int) {
|
|||||||
parseType = "id"
|
parseType = "id"
|
||||||
}
|
}
|
||||||
if runtime.GOOS == "windows" || sp.OfficialAvailableTest() != nil {
|
if runtime.GOOS == "windows" || sp.OfficialAvailableTest() != nil {
|
||||||
sp.CustomSpeedTest(url, parseType, num)
|
sp.CustomSpeedTest(url, parseType, num, language)
|
||||||
} else {
|
} else {
|
||||||
sp.OfficialCustomSpeedTest(url, parseType, num)
|
sp.OfficialCustomSpeedTest(url, parseType, num, language)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/imroc/req/v3"
|
"github.com/imroc/req/v3"
|
||||||
"github.com/oneclickvirt/UnlockTests/uts"
|
"github.com/oneclickvirt/UnlockTests/uts"
|
||||||
"github.com/oneclickvirt/basics/system"
|
"github.com/oneclickvirt/basics/system"
|
||||||
|
. "github.com/oneclickvirt/defaultset"
|
||||||
"github.com/oneclickvirt/security/network"
|
"github.com/oneclickvirt/security/network"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"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 执行安全检查
|
// SecurityCheck 执行安全检查
|
||||||
func SecurityCheck(language, nt3CheckType string, securtyCheckStatus bool) (string, string, string) {
|
func SecurityCheck(language, nt3CheckType string, securtyCheckStatus bool) (string, string, string) {
|
||||||
var wgt sync.WaitGroup
|
var wgt sync.WaitGroup
|
||||||
|
Reference in New Issue
Block a user