Files
GoTunnel/cmd/client/main.go
Flik 381c6911af
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 41s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 1m29s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m33s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 1m28s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m54s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 1m17s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 1m43s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 1m46s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 2m12s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 1m14s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 1m47s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 1m21s
feat(version): 添加版本信息注入功能
- 在 client 和 server 中添加 Version 变量用于版本信息注入
- 创建 version 包的 SetVersion 函数支持运行时设置版本号
- 修改 version 包将常量改为变量以支持动态设置
- 通过 ldflags 机制实现编译时版本信息注入
2026-01-22 15:28:17 +08:00

79 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"flag"
"log"
"github.com/gotunnel/internal/client/config"
"github.com/gotunnel/internal/client/tunnel"
"github.com/gotunnel/pkg/crypto"
"github.com/gotunnel/pkg/plugin"
"github.com/gotunnel/pkg/version"
)
// 版本信息(通过 ldflags 注入)
var Version string
func init() {
version.SetVersion(Version)
}
func main() {
server := flag.String("s", "", "server address (ip:port)")
token := flag.String("t", "", "auth token")
id := flag.String("id", "", "client id (optional, auto-assigned if empty)")
noTLS := flag.Bool("no-tls", false, "disable TLS")
configPath := flag.String("c", "", "config file path")
flag.Parse()
// 优先加载配置文件
var cfg *config.ClientConfig
if *configPath != "" {
var err error
cfg, err = config.LoadClientConfig(*configPath)
if err != nil {
log.Fatalf("Failed to load config: %v", err)
}
} else {
cfg = &config.ClientConfig{}
}
// 命令行参数覆盖配置文件
if *server != "" {
cfg.Server = *server
}
if *token != "" {
cfg.Token = *token
}
if *id != "" {
cfg.ID = *id
}
if *noTLS {
cfg.NoTLS = *noTLS
}
if cfg.Server == "" || cfg.Token == "" {
log.Fatal("Usage: client [-c config.yaml] | [-s <server:port> -t <token> [-id <client_id>] [-no-tls]]")
}
client := tunnel.NewClient(cfg.Server, cfg.Token, cfg.ID)
// TLS 默认启用,默认跳过证书验证(类似 frp
if !cfg.NoTLS {
client.TLSEnabled = true
client.TLSConfig = crypto.ClientTLSConfig()
log.Printf("[Client] TLS enabled")
}
// 初始化插件注册表(用于 JS 插件)
registry := plugin.NewRegistry()
client.SetPluginRegistry(registry)
// 初始化版本存储
if err := client.InitVersionStore(); err != nil {
log.Printf("[Client] Warning: failed to init version store: %v", err)
}
client.Run()
}