From 7ebf968aec4b964aa44494e175272091b6c64a07 Mon Sep 17 00:00:00 2001 From: uoosef Date: Thu, 10 Aug 2023 13:20:38 +0330 Subject: [PATCH] fix config.json problem and bring TLSHeaderLength config back --- bepass/cmd/cli/main.go | 65 +++++++++++++++++++++++------------------ bepass/cmd/core/core.go | 1 + bepass/server/server.go | 3 +- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/bepass/cmd/cli/main.go b/bepass/cmd/cli/main.go index 0d69cc3..1746d56 100644 --- a/bepass/cmd/cli/main.go +++ b/bepass/cmd/cli/main.go @@ -2,50 +2,59 @@ package main import ( "bepass/cmd/core" - "fmt" "github.com/spf13/cobra" "github.com/spf13/viper" - "os" + "log" ) -func loadConfig() (*core.Config, error) { - viper.SetConfigName("config") - viper.AddConfigPath(".") - if err := viper.ReadInConfig(); err != nil { - return nil, err +var configPath string + +func loadConfig() { + if configPath != "" { + viper.SetConfigFile(configPath) + } else { + viper.SetConfigName("config") + viper.AddConfigPath(".") + viper.SetConfigType("json") } + viper.AutomaticEnv() - var config core.Config - if err := viper.Unmarshal(&config); err != nil { - return nil, err + err := viper.ReadInConfig() + if err != nil { + log.Fatal(err) } +} - return &config, nil +func init() { + cobra.OnInitialize(loadConfig) } func main() { - var configPath string - - config, err := loadConfig() - if err != nil { - panic(err) - } - rootCmd := &cobra.Command{ - Use: "cli", - Short: "cli is a socks5 proxy server", - RunE: func(cmd *cobra.Command, args []string) error { - return core.RunServer(config, true) + Use: "Bepass", + Short: "Bepass is an Anti DPI and anti censorship proxy solution", + Run: func(cmd *cobra.Command, args []string) { + config := &core.Config{} + err := viper.Unmarshal(&config) + if err != nil { + log.Fatal(err) + } + err = core.RunServer(config, true) + if err != nil { + log.Fatal(err) + } }, } rootCmd.PersistentFlags().StringVarP(&configPath, "config", "c", "./config.json", "Path to configuration file") - viper.BindPFlag("config", rootCmd.PersistentFlags().Lookup("config")) - viper.SetEnvPrefix("cli") - viper.AutomaticEnv() + err := viper.BindPFlag("config", rootCmd.PersistentFlags().Lookup("config")) + if err != nil { + log.Fatal(err) + } + viper.SetEnvPrefix("Bepass") - if err := rootCmd.Execute(); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + err = rootCmd.Execute() + if err != nil { + log.Fatal(err) } } diff --git a/bepass/cmd/core/core.go b/bepass/cmd/core/core.go index e831e9c..2188676 100644 --- a/bepass/cmd/core/core.go +++ b/bepass/cmd/core/core.go @@ -56,6 +56,7 @@ func RunServer(config *Config, captureCTRLC bool) error { BeforeSniLength: config.SniChunksLength, AfterSniLength: config.ChunksLengthAfterSni, Delay: config.DelayBetweenChunks, + TLSHeaderLength: config.TLSHeaderLength, } workerConfig := server.WorkerConfig{ diff --git a/bepass/server/server.go b/bepass/server/server.go index 80a9c5c..7384640 100644 --- a/bepass/server/server.go +++ b/bepass/server/server.go @@ -24,6 +24,7 @@ import ( // ChunkConfig Constants for chunk lengths and delays. type ChunkConfig struct { + TLSHeaderLength int BeforeSniLength [2]int AfterSniLength [2]int Delay [2]int @@ -177,7 +178,7 @@ func (s *Server) getSNBlock(data []byte) ([]byte, error) { // getExtensionBlock finds the extension block given a raw TLS Client Hello. func (s *Server) getExtensionBlock(data []byte) ([]byte, error) { dataLen := len(data) - index := 5 + 38 + index := s.ChunkConfig.TLSHeaderLength + 38 if dataLen <= index+1 { return nil, fmt.Errorf("not enough bits to be a Client Hello")