ECS
融合怪测评项目 - Go 版本
除可选的环境安装步骤仍会调用 shell 外,项目本体不依赖额外 shell 文件。环境安装只是为了提升测试准确度,极端情况下即使不安装这些依赖,也依然可以完成大部分测试。
如有问题请 issues 反馈。
Go 版本:https://github.com/oneclickvirt/ecs
Shell 版本:https://github.com/spiritLHLS/ecs
适配系统和架构
编译与测试支持情况
| 编译支持的架构 | 测试支持的架构 | 编译支持的系统 | 测试支持的系统 |
|---|---|---|---|
| amd64 | amd64 | Linux | Linux |
| arm64 | arm64 | Windows | Windows |
| arm | macOS(Darwin) | macOS | |
| 386 | FreeBSD | ||
| mips,mipsle | Android | ||
| mips64,mips64le | |||
| ppc64,ppc64le | |||
| s390x | s390x | ||
| riscv64 |
更多架构与系统请自行测试或编译,如有问题请开 issues。
待支持的系统
| 系统 | 说明 |
|---|---|
| OpenBSD/NetBSD | 部分Golang的官方库暂未支持本系统(尤其是 net 相关项目) |
功能
- 系统基础信息查询,IP基础信息并发查询:basics、gostun
- CPU 测试:cputest,支持 sysbench(lua/golang版本)、geekbench、winsat
- 内存测试:memorytest,支持 sysbench、dd、winsat、mbw、stream
- 硬盘测试:disktest,支持 dd、fio、winsat
- 流媒体平台解锁测试并发查询:UnlockTests,逻辑借鉴 RegionRestrictionCheck 等
- IP 质量/安全信息并发查询:二进制文件编译至 securityCheck
- 邮件端口测试:portchecker
- 上游及回程路由线路检测:借鉴 zhanghanyun/backtrace,二次开发至 oneclickvirt/backtrace
- 三网路由测试:基于 NTrace-core,二次开发至 nt3
- 网速测试:基于 speedtest.net 和 speedtest.cn 数据,开发至 oneclickvirt/speedtest,同时融合私有国内测速节点
- 三网 Ping 值测试:借鉴 ecsspeed,二次开发至 pingtest
- 支持root或admin环境下测试,支持非root或非admin环境下测试,支持离线环境下进行测试;在线且本地 DNS 确认不可用时可使用进程内 DoH/DoT 继续测试,不改写系统 DNS 文件,短暂网络波动会保留系统解析 本项目初次使用建议查看说明:跳转
无本地 DNS 的在线环境
默认 -dns-mode=auto 保留系统 DNS,只有多个独立探测均确认本地解析器不可用时才回退。成功响应或 NXDOMAIN 都视为系统解析可用;超时、SERVFAIL、丢包和短暂网络错误均为不确定结果,不会直接切换到公共 DNS。
确认本地 DNS 失效后,程序会通过内置的固定地址对公共上游执行真实 TLS DNS 查询,按实际查询延迟选择可用的非过滤 DoH 或 DoT 服务。固定地址只用于引导这些上游,普通测试域名仍使用所选上游的实时 DNS 回应。
-dns-mode=auto:默认模式,仅在确认本地 DNS 失效后自动选择最快的已校验 DoH 或 DoT。-dns-mode=system:只使用系统 DNS;Android/Termux 的原有 resolver 文件修复逻辑仅在此模式使用。-dns-mode=doh:强制使用内置 DoH。-dns-mode=dot:强制使用内置 DoT。
回退仅作用于当前进程,不会改写 /etc/resolv.conf 或 /etc/hosts。-ut-dns 是流媒体解锁模块的独立显式 DNS 覆盖,不会被此机制替换;留空时才会继承当前进程解析器。上游地址清单随 basics 依赖嵌入,并在发布 tag 前以固定地址 TLS/DNS 查询校验刷新。
安装脚本尚未下载到本机前,系统无法使用程序内回退。若主机在线但本地 DNS 不可用,需要支持 DoH 的 curl(例如 curl 7.62+)先引导下载:
export noninteractive=true && curl --doh-url https://cloudflare-dns.com/dns-query --resolve cloudflare-dns.com:443:1.1.1.1,1.0.0.1 -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs使用说明
Linux/FreeBSD/macOS
一键命令
一键命令将默认不安装依赖,默认不更新包管理器,默认无交互模式
国际用户无加速:
bashexport noninteractive=true && curl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs1国际/国内使用 CDN 加速:
bashexport noninteractive=true && curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs1国内用户使用 CNB 加速:
bashexport noninteractive=true && export CN=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs1短链接:
bashexport noninteractive=true && curl -L https://bash.spiritlhl.net/goecs -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs1或
bashexport noninteractive=true && curl -L https://ba.sh/JrVa -o goecs.sh && chmod +x goecs.sh && ./goecs.sh install && goecs1
如果需要测试更准确,请按照下面的详细说明进行安装,添加非必需的依赖
详细说明
以下命令可控制是否安装依赖,是否更新包管理器,交互模式和无交互模式
展开查看详细说明
下载脚本
国际用户无加速:
bashcurl -L https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh1国际/国内使用 CDN 加速:
bashcurl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh -o goecs.sh && chmod +x goecs.sh1国内用户使用 CNB 加速:
bashexport CN=true && curl -L https://cnb.cool/oneclickvirt/ecs/-/git/raw/main/goecs.sh -o goecs.sh && chmod +x goecs.sh1更新包管理器(可选择)并安装环境
bash./goecs.sh env1无交互模式:
bashexport noninteractive=true && ./goecs.sh env1安装
goecs本体(仅下载二进制文件无依赖安装)bash./goecs.sh install1升级
goecs本体bash./goecs.sh upgrade1卸载
goecs本体bash./goecs.sh uninstall1帮助命令
bash./goecs.sh -h1唤起菜单
bashgoecs1
命令参数化
展开查看各参数说明
Usage: goecs [options]
-backtrace
Enable/Disable backtrace test (in 'en' language or on windows it always false) (default true)
-basic
Enable/Disable basic test (default true)
-ut
Enable/Disable unlock media test (default true)
-cpu
Enable/Disable CPU test (default true)
-cpum string
Set CPU test method (supported: sysbench, geekbench, winsat) (default "sysbench")
-cpu-method string
Set CPU test method (supported: sysbench, geekbench, winsat) (default "sysbench")
-cput string
Set CPU test thread mode (supported: single, multi) (default "multi")
-cpu-thread string
Set CPU test thread mode (supported: single, multi) (default "multi")
-disk
Enable/Disable disk test (default true)
-diskm string
Set disk test method (supported: fio, dd, winsat) (default "fio")
-disk-method string
Set disk test method (supported: fio, dd, winsat) (default "fio")
-diskmc
Enable/Disable multiple disk checks, e.g., -diskmc=false
-diskp string
Set disk test path, e.g., -diskp /root
-dns-mode string
DNS mode (auto=preserve system then encrypted fallback, system=system DNS only, doh=force DoH, dot=force DoT) (default "auto")
-email
Enable/Disable email port test (default true)
-h Show help information
-help
Show help information
-l string
Set language (supported: en, zh) (default "zh")
-lang string
Set language (supported: en, zh) (default "zh")
-log
Enable/Disable logging in the current path
-memory
Enable/Disable memory test (default true)
-memorym string
Set memory test method (supported: stream, sysbench, dd, winsat, auto) (default "stream")
-memory-method string
Set memory test method (supported: stream, sysbench, dd, winsat, auto) (default "stream")
-menu
Enable/Disable menu mode, disable example: -menu=false (default true)
-nt3
Enable/Disable NT3 test (in 'en' language or on windows it always false) (default true)
-nt3loc string
Specify NT3 test location (supported: GZ, SH, BJ, CD, ALL for Guangzhou, Shanghai, Beijing, Chengdu and all) (default "GZ")
-nt3-location string
Specify NT3 test location (supported: GZ, SH, BJ, CD, ALL for Guangzhou, Shanghai, Beijing, Chengdu and all) (default "GZ")
-nt3t string
Set NT3 test type (supported: both, ipv4, ipv6) (default "ipv4")
-nt3-type string
Set NT3 test type (supported: both, ipv4, ipv6) (default "ipv4")
-ping
Enable/Disable ping test
-security
Enable/Disable security test (default true)
-speed
Enable/Disable speed test (default true)
-spnum int
Set the number of servers per operator for speed test (default 2)
-tgdc
Enable/Disable Telegram DC test
-upload
Enable/Disable upload the result (default true)
-v Display version information
-version
Display version information
-web
Enable/Disable popular websites test2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Windows
- 下载带 exe 文件的压缩包:Releases
- 解压后,右键以管理员模式运行。
PS:如果是在虚拟机环境中运行,不以管理员模式启动通常也可以,因为虚拟机缺少部分原生测试工具时会自动启用替代方案。 PPS:暂时不要下载带 GUI 标签的 exe 文件,相关适配还不完整,优先使用常规 CI 产物压缩包。
Docker
展开查看使用说明
国际镜像地址:https://hub.docker.com/r/spiritlhl/goecs
请确保执行下述命令前本机已安装Docker
特权模式+host网络
docker run --rm --privileged --network host spiritlhl/goecs:latest -menu=false -l zh非特权模式+非host网络
docker run --rm spiritlhl/goecs:latest -menu=false -l zh使用Docker执行测试,硬件测试会有一些偏差和虚拟化架构判断失效,还是推荐直接测试而不使用Docker测试。
国内阿里云镜像加速
请确保执行下述命令前本机已安装Docker
特权模式+host网络
docker run --rm --privileged --network host crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com/oneclickvirt/ecs:latest -menu=false -l zh非特权模式+非host网络
docker run --rm crpi-8tmognxgyb86bm61.cn-guangzhou.personal.cr.aliyuncs.com/oneclickvirt/ecs:latest -menu=false -l zh实际上还有 CNB 镜像地址 https://cnb.cool/oneclickvirt/ecs/-/packages/docker/ecs ,但由于组织空间不足,目前无法继续推送,因此更推荐直接使用阿里云镜像加速。
从源码进行编译
展开查看编译说明
- 克隆仓库的 public 分支(不含私有依赖)
git clone -b public https://github.com/oneclickvirt/ecs.git
cd ecs2
- 安装 Go 环境(如已安装可跳过)
选择 Go 1.25.4 版本进行安装
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/one-click-installation-script/main/install_scripts/go.sh -o go.sh && chmod +x go.sh && bash go.sh- 编译
go build -o goecs- 运行测试
./goecs -menu=false -l zh支持的编译参数:
- GOOS:支持 linux、windows、darwin、freebsd、openbsd
- GOARCH:支持 amd64、arm、arm64、386、mips、mipsle、s390x、riscv64
跨平台编译示例:
# 编译 Windows 版本
GOOS=windows GOARCH=amd64 go build -o goecs.exe
# 编译 macOS 版本
GOOS=darwin GOARCH=amd64 go build -o goecs_darwin2
3
4
QA
Q: 为什么默认使用sysbench而不是geekbench
A: 比较二者特点
| 比较项 | sysbench | geekbench |
|---|---|---|
| 适用范围 | 轻量级,几乎可在任何服务器上运行 | 重量级,小型机器无法运行 |
| 测试要求 | 无需网络,无特殊硬件需求 | 需联网,IPV4环境,至少1G内存 |
| 开源情况 | 基于LUA,开源,可自行编译各架构版本 | 官方二进制闭源代码,不支持自行编译 |
| 测试稳定性 | 核心测试组件10年以上未变 | 每个大版本更新测试项,分数不同版本间难以对比(每个版本对标当前最好的CPU) |
| 测试内容 | 仅测试计算性能 | 覆盖多种性能测试,分数加权计算,但部分测试实际不常用 |
| 适用场景 | 适合快速测试,仅测试计算性能 | 适合综合全面的测试 |
| 排行榜 | sysbench.spiritlhl.net | browser.geekbench.com |
且goecs测试使用何种CPU测试方式可使用参数指定,默认只是为了更多用户快速测试的需求
Q: 为什么使用Golang而不是Rust重构
A: 因为网络相关的项目目前以Golang语言为趋势,大多组件有开源生态维护,Rust很多得自己手搓,我懒得搞我没那个技术力
Q: 为什么不继续开发Shell版本而是选择重构
A: 因为太多千奇百怪的环境问题了,还是提前编译好测试的二进制文件比较容易解决环境问题(泛化性更好)
Q: 每个测试项目的说明有吗?
A: 每个测试项目有对应的维护仓库,自行点击查看仓库说明
Q: 测试进行到一半如何手动终止?
A: 按 Ctrl+C 终止程序。终止后依然会在当前目录下生成 goecs.txt 文件和分享链接,里面会保留已经完成的测试结果。
Q: 非Root环境如何进行测试?
A: 可以先尝试手动执行安装命令。若确实无法安装依赖,也没关系,直接去 release 页面下载对应架构的压缩包,解压后执行即可,只要当前环境允许运行该文件。若可用 Docker,也可以直接通过 Docker 运行。
致谢
感谢 DKLYDataHub - IP Geolocation Datahe.net bgp.tools ipinfo.io maxmind.com cloudflare.com ip.sb scamalytics.com abuseipdb.com ip2location.com ip-api.com ipregistry.co ipdata.co ipgeolocation.io ipwhois.io ipapi.com ipapi.is ipqualityscore.com bigdatacloud.com virustotal.com ipfighter.com getipintel.net fraudlogix.com 等网站提供的API进行检测,感谢互联网各网站提供的查询资源
感谢
提供的免费托管支持本开源项目的共享测试结果存储
同时感谢以下平台提供编辑和测试支持


