Compare commits

..

8 Commits

Author SHA1 Message Date
spiritlhl
6953182cb4 fix: 尝试性修复安卓TMUX下可能存在的DNS解析问题 2026-03-02 10:05:54 +00:00
spiritlhl
22c9eb7611 fix:权限不足时自动降级处理提示使用方式 2026-03-02 09:37:59 +00:00
spiritlhl
f4d6fe1a8a Merge pull request #16 from fallin03/master
Update README.md
2026-02-25 10:07:48 +08:00
飘落fallin
90f7b9a94b Update README.md
fix typo in README.md
2026-02-24 22:00:21 +08:00
github-actions[bot]
e5f8f87f7e chore: update ECS_VERSION to 0.1.115 in goecs.sh 2026-02-07 05:59:06 +00:00
spiritlhl
0b87d169a3 fix: 修复错误码处理 2026-02-07 05:41:46 +00:00
spiritlhl
b8fe9d3d98 fix: 更新MetaAI检测 2026-02-07 05:29:28 +00:00
github-actions[bot]
8f46bd3f4f chore: update ECS_VERSION to 0.1.114 in goecs.sh 2026-02-02 07:49:17 +00:00
7 changed files with 112 additions and 20 deletions

View File

@@ -45,7 +45,7 @@ Shell 版本:[https://github.com/spiritLHLS/ecs](https://github.com/spiritLHLS
| 系统 | 说明 |
|----------------|---------------------------|
| OpenBSD/NetBSD | 部分Goalng的官方库未支持本系统(尤其是net相关项目) |
| OpenBSD/NetBSD | 部分Golang的官方库未支持本系统(尤其是net相关项目) |
---

View File

@@ -45,7 +45,7 @@ Shell version: [https://github.com/spiritLHLS/ecs/blob/main/README_EN.md](https:
| OS | Notes |
|--------|-------------------------------------------------------------------------------------------------|
| OpenBSD/NetBSD | Some of Goalng's official libraries do not support this system (especially net-related items) |
| OpenBSD/NetBSD | Some of Golang's official libraries do not support this system (especially net-related items) |
---

2
go.mod
View File

@@ -4,7 +4,7 @@ go 1.25.4
require (
github.com/imroc/req/v3 v3.54.0
github.com/oneclickvirt/UnlockTests v0.0.34-20260130055000
github.com/oneclickvirt/UnlockTests v0.0.35-20260207053956
github.com/oneclickvirt/backtrace v0.0.8-20251109090457
github.com/oneclickvirt/basics v0.0.16-20251112033526
github.com/oneclickvirt/cputest v0.0.12-20251111095842

4
go.sum
View File

@@ -96,8 +96,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/nxtrace/NTrace-core v1.5.0 h1:n+a/FObw/+CcqvhuSQiWcm1q+ODtfo7Wt3VmaIx504I=
github.com/nxtrace/NTrace-core v1.5.0/go.mod h1:/jME48iJ7QaVTzsrTPQyTJ+yExhjeWjax2L6uBd4ckk=
github.com/oneclickvirt/UnlockTests v0.0.34-20260130055000 h1:amgZH8QyTmgZ09t6j0Fi0SbSU03vhZIFjW/1/sOT70M=
github.com/oneclickvirt/UnlockTests v0.0.34-20260130055000/go.mod h1:oOa6wj/qECtRMxwBO6D7o0L0F0Q/5sQ747OCnFQqoGE=
github.com/oneclickvirt/UnlockTests v0.0.35-20260207053956 h1:yccGrw/sYOHZMaFJghPVN3Xn6JyTOXsEQc9v0I92k3M=
github.com/oneclickvirt/UnlockTests v0.0.35-20260207053956/go.mod h1:oOa6wj/qECtRMxwBO6D7o0L0F0Q/5sQ747OCnFQqoGE=
github.com/oneclickvirt/backtrace v0.0.8-20251109090457 h1:599/R/qMAtfPCPG1bPoi6KbjNJzVkKtxm8dvVIdtn5o=
github.com/oneclickvirt/backtrace v0.0.8-20251109090457/go.mod h1:mj9TSow7FNszBb3bQj2Hhm41LwBo7HQP6sgaPtovKdM=
github.com/oneclickvirt/basics v0.0.16-20251112033526 h1:bgoLaqStV3a6mbPiM++0mYizd278GVa6J6yeIiusV+A=

View File

@@ -27,7 +27,7 @@ import (
)
var (
ecsVersion = "v0.1.114" // 融合怪版本号
ecsVersion = "v0.1.116" // 融合怪版本号
configs = params.NewConfig(ecsVersion) // 全局配置实例
userSetFlags = make(map[string]bool) // 用于跟踪哪些参数是用户显式设置的
)
@@ -63,6 +63,7 @@ func main() {
return
}
initLogger()
utils.CheckAndFixAndroidDNS(configs.Language)
preCheck := utils.CheckPublicAccess(3 * time.Second)
go func() {
if preCheck.Connected {

View File

@@ -152,7 +152,7 @@ goecs_check() {
os=$(uname -s 2>/dev/null || echo "Unknown")
arch=$(uname -m 2>/dev/null || echo "Unknown")
check_china
ECS_VERSION="0.1.113"
ECS_VERSION="0.1.115"
for api in \
"https://api.github.com/repos/oneclickvirt/ecs/releases/latest" \
"https://githubapi.spiritlhl.workers.dev/repos/oneclickvirt/ecs/releases/latest" \
@@ -164,8 +164,8 @@ goecs_check() {
sleep 1
done
if [ -z "$ECS_VERSION" ]; then
_yellow "Unable to get version info, using default version 0.1.113"
ECS_VERSION="0.1.113"
_yellow "Unable to get version info, using default version 0.1.115"
ECS_VERSION="0.1.115"
fi
version_output=""
for cmd_path in "goecs" "./goecs" "/usr/bin/goecs" "/usr/local/bin/goecs"; do
@@ -260,29 +260,38 @@ goecs_check() {
fi
rm -f goecs.zip README.md LICENSE README_EN.md
chmod 777 goecs
installed_to_system=false
for install_path in "/usr/bin" "/usr/local/bin"; do
if [ -d "$install_path" ]; then
cp -f goecs "$install_path/"
break
if cp -f goecs "$install_path/" 2>/dev/null; then
installed_to_system=true
break
fi
fi
done
if [ "$installed_to_system" = "false" ]; then
_yellow "权限不足无法安装到系统路径goecs 已保留在当前目录下"
_yellow "Insufficient permissions to install to system path, goecs is kept in the current directory"
_yellow "请使用以下命令运行: ./goecs"
_yellow "Please use the following command to run: ./goecs"
fi
if [ "$os" != "Darwin" ]; then
PARAM="net.ipv4.ping_group_range"
NEW_VALUE="0 2147483647"
if [ -f /etc/sysctl.conf ]; then
if grep -q "^$PARAM" /etc/sysctl.conf; then
sed -i "s/^$PARAM.*/$PARAM = $NEW_VALUE/" /etc/sysctl.conf
if grep -q "^$PARAM" /etc/sysctl.conf 2>/dev/null; then
sed -i "s/^$PARAM.*/$PARAM = $NEW_VALUE/" /etc/sysctl.conf 2>/dev/null || true
else
echo "$PARAM = $NEW_VALUE" >> /etc/sysctl.conf
echo "$PARAM = $NEW_VALUE" >> /etc/sysctl.conf 2>/dev/null || true
fi
sysctl -p >/dev/null 2>&1
sysctl -p >/dev/null 2>&1 || true
fi
fi
setcap cap_net_raw=+ep goecs 2>/dev/null
setcap cap_net_raw=+ep /usr/bin/goecs 2>/dev/null
setcap cap_net_raw=+ep /usr/local/bin/goecs 2>/dev/null
_green "goecs installation complete, current version:"
goecs -v || ./goecs -v
setcap cap_net_raw=+ep goecs 2>/dev/null || true
setcap cap_net_raw=+ep /usr/bin/goecs 2>/dev/null || true
setcap cap_net_raw=+ep /usr/local/bin/goecs 2>/dev/null || true
_green "goecs 安装完成 / goecs installation complete, 当前版本 / current version:"
goecs -v 2>/dev/null || ./goecs -v
}
InstallSysbench() {

View File

@@ -26,6 +26,88 @@ import (
"github.com/oneclickvirt/security/network"
)
// IsAndroid 检测当前是否在 Android (Termux) 环境下运行
func IsAndroid() bool {
// Termux 会设置 TERMUX_VERSION 或 PREFIX 环境变量
if os.Getenv("TERMUX_VERSION") != "" {
return true
}
if prefix := os.Getenv("PREFIX"); strings.Contains(prefix, "termux") {
return true
}
// Android 系统标志文件
if _, err := os.Stat("/system/build.prop"); err == nil {
return true
}
// ANDROID_ROOT 环境变量 (Android 系统设置为 /system)
if os.Getenv("ANDROID_ROOT") != "" {
return true
}
return false
}
// androidDNSServers 是用于修复 Android/Termux 下 DNS 问题的备用服务器列表
var androidDNSServers = []string{
"nameserver 8.8.8.8",
"nameserver 8.8.4.4",
"nameserver 1.1.1.1",
"nameserver 223.5.5.5",
}
// CheckAndFixAndroidDNS 检测并尝试修复 Android Termux 下的 DNS 解析问题。
// 仅在检测到 Android 环境下调用。不出现问题时无任何输出。
// language: "zh" 或 "en"
func CheckAndFixAndroidDNS(language string) {
if !IsAndroid() {
return
}
resolvPath := "/etc/resolv.conf"
hasValidDNS := false
if data, err := os.ReadFile(resolvPath); err == nil {
for _, line := range strings.Split(string(data), "\n") {
line = strings.TrimSpace(line)
if strings.HasPrefix(line, "nameserver") && len(strings.Fields(line)) >= 2 {
hasValidDNS = true
break
}
}
}
if hasValidDNS {
// DNS 配置正常,无需处理
return
}
// /etc/resolv.conf 缺失或无有效 nameserver尝试自动创建
content := strings.Join(androidDNSServers, "\n") + "\n"
err := os.WriteFile(resolvPath, []byte(content), 0644)
if err != nil {
// 写入失败(权限不足),给出双语提示和修复建议
fmt.Println("-----------------------------------------------------")
fmt.Println("[Android/Termux] 检测到 DNS 解析配置缺失!")
fmt.Println("这将导致依赖系统 DNS 的测试项目无法正常运行。")
fmt.Println("解决方案(推荐):")
fmt.Println(" 通过 Magisk / KernelSU 刷入以下模块后重启手机:")
fmt.Println(" https://github.com/weigui404/resolv.conf")
fmt.Println("解决方案(临时):")
fmt.Println(" 以 root 身份执行: echo 'nameserver 8.8.8.8' > /etc/resolv.conf")
fmt.Println("-----------------------------------------------------")
fmt.Println("[Android/Termux] DNS resolver config is missing!")
fmt.Println("This will cause DNS-dependent tests to fail.")
fmt.Println("Fix (recommended):")
fmt.Println(" Flash the following module via Magisk / KernelSU and reboot:")
fmt.Println(" https://github.com/weigui404/resolv.conf")
fmt.Println("Fix (temporary):")
fmt.Println(" Run as root: echo 'nameserver 8.8.8.8' > /etc/resolv.conf")
fmt.Println("-----------------------------------------------------")
} else {
// 写入成功
if language == "zh" {
fmt.Println("[Android/Termux] DNS 配置缺失,已自动写入 /etc/resolv.confDNS 解析已恢复。")
} else {
fmt.Println("[Android/Termux] DNS config was missing; auto-written to /etc/resolv.conf, DNS resolution restored.")
}
}
}
// 获取本程序本日及总执行的统计信息
type StatsResponse struct {
Counter string `json:"counter"`