refactor: refactor server configuration and logging structure

This commit is contained in:
SunBK201 2025-10-28 14:53:52 +08:00
parent 380a1f15f2
commit 3222c81f4e
5 changed files with 60 additions and 21 deletions

View File

@ -1,10 +1,20 @@
package config package config
import "flag" import (
"flag"
"fmt"
)
const (
ServerModeSocks5 = "socks5"
ServerModeTProxy = "tproxy"
)
type Config struct { type Config struct {
ServerMode string
BindAddr string BindAddr string
Port int Port int
ListenAddr string
LogLevel string LogLevel string
PayloadUA string PayloadUA string
UAPattern string UAPattern string
@ -13,6 +23,7 @@ type Config struct {
func Parse() (*Config, bool) { func Parse() (*Config, bool) {
var ( var (
serverMode string
bindAddr string bindAddr string
port int port int
loglevel string loglevel string
@ -22,6 +33,7 @@ func Parse() (*Config, bool) {
showVer bool showVer bool
) )
flag.StringVar(&serverMode, "m", ServerModeSocks5, "server mode: socks5 or tproxy (default: socks5)")
flag.StringVar(&bindAddr, "b", "127.0.0.1", "bind address (default: 127.0.0.1)") flag.StringVar(&bindAddr, "b", "127.0.0.1", "bind address (default: 127.0.0.1)")
flag.IntVar(&port, "p", 1080, "port") flag.IntVar(&port, "p", 1080, "port")
flag.StringVar(&payloadUA, "f", "FFF", "User-Agent") flag.StringVar(&payloadUA, "f", "FFF", "User-Agent")
@ -32,8 +44,10 @@ func Parse() (*Config, bool) {
flag.Parse() flag.Parse()
cfg := &Config{ cfg := &Config{
ServerMode: serverMode,
BindAddr: bindAddr, BindAddr: bindAddr,
Port: port, Port: port,
ListenAddr: fmt.Sprintf("%s:%d", bindAddr, port),
LogLevel: loglevel, LogLevel: loglevel,
PayloadUA: payloadUA, PayloadUA: payloadUA,
UAPattern: uaPattern, UAPattern: uaPattern,

View File

@ -63,9 +63,9 @@ func SetLogConf(level string) {
} }
} }
func LogHeader(version string, addr string, cfg *config.Config) { func LogHeader(version string, cfg *config.Config) {
logrus.Info("UA3F v" + version) logrus.Info("UA3F v" + version)
logrus.Infof("Listen on %s", addr) logrus.Infof("Listen on %s", cfg.ListenAddr)
logrus.Infof("User-Agent: %s", cfg.PayloadUA) logrus.Infof("User-Agent: %s", cfg.PayloadUA)
logrus.Infof("User-Agent Regex Pattern: '%s'", cfg.UAPattern) logrus.Infof("User-Agent Regex Pattern: '%s'", cfg.UAPattern)
logrus.Infof("Enable Partial Replace: %v", cfg.EnablePartialReplace) logrus.Infof("Enable Partial Replace: %v", cfg.EnablePartialReplace)

View File

@ -0,0 +1,22 @@
package server
import (
"fmt"
"github.com/sunbk201/ua3f/internal/config"
"github.com/sunbk201/ua3f/internal/rewrite"
"github.com/sunbk201/ua3f/internal/server/socks5"
)
type Server interface {
Start() error
}
func NewServer(cfg *config.Config, rw *rewrite.Rewriter) (Server, error) {
switch cfg.ServerMode {
case config.ServerModeSocks5:
return socks5.New(cfg, rw), nil
default:
return nil, fmt.Errorf("unknown server mode: %s", cfg.ServerMode)
}
}

View File

@ -37,7 +37,6 @@ type Server struct {
cfg *config.Config cfg *config.Config
rw *rewrite.Rewriter rw *rewrite.Rewriter
listener net.Listener listener net.Listener
ListenAddr string
} }
// New returns a new Server with given config, rewriter, and version string. // New returns a new Server with given config, rewriter, and version string.
@ -45,13 +44,12 @@ func New(cfg *config.Config, rw *rewrite.Rewriter) *Server {
return &Server{ return &Server{
cfg: cfg, cfg: cfg,
rw: rw, rw: rw,
ListenAddr: fmt.Sprintf("%s:%d", cfg.BindAddr, cfg.Port),
} }
} }
// Start begins listening for SOCKS5 clients. // Start begins listening for SOCKS5 clients.
func (s *Server) Start() (err error) { func (s *Server) Start() (err error) {
if s.listener, err = net.Listen("tcp", s.ListenAddr); err != nil { if s.listener, err = net.Listen("tcp", s.cfg.ListenAddr); err != nil {
return fmt.Errorf("listen failed: %w", err) return fmt.Errorf("listen failed: %w", err)
} }

View File

@ -8,7 +8,7 @@ import (
"github.com/sunbk201/ua3f/internal/config" "github.com/sunbk201/ua3f/internal/config"
"github.com/sunbk201/ua3f/internal/log" "github.com/sunbk201/ua3f/internal/log"
"github.com/sunbk201/ua3f/internal/rewrite" "github.com/sunbk201/ua3f/internal/rewrite"
"github.com/sunbk201/ua3f/internal/server/socks5" "github.com/sunbk201/ua3f/internal/server"
) )
const version = "0.9.0" const version = "0.9.0"
@ -26,8 +26,13 @@ func main() {
logrus.Fatal(err) logrus.Fatal(err)
} }
srv := socks5.New(cfg, rw) srv, err := server.NewServer(cfg, rw)
log.LogHeader(version, srv.ListenAddr, cfg) if err != nil {
logrus.Fatal(err)
}
log.LogHeader(version, cfg)
if err := srv.Start(); err != nil { if err := srv.Start(); err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }