From a05f82a9eb7c560619bf1c7d0bdfa53228e7187c Mon Sep 17 00:00:00 2001 From: Regela Date: Sun, 20 Apr 2025 19:50:36 +0300 Subject: [PATCH] Fix priority bug --- go.mod | 5 +++++ src/main.go | 54 +++++++++++++++++++++++++++-------------------------- 2 files changed, 33 insertions(+), 26 deletions(-) create mode 100644 go.mod diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..56d228d --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module RegelaHttpsBalancer + +go 1.22.5 + +require github.com/goccy/go-yaml v1.14.3 diff --git a/src/main.go b/src/main.go index 971ea35..4ee82bc 100644 --- a/src/main.go +++ b/src/main.go @@ -4,7 +4,6 @@ import ( "flag" "fmt" "github.com/goccy/go-yaml" - "io/ioutil" "log" "net" "os" @@ -12,9 +11,9 @@ import ( "time" ) -type Rule struct{ +type Rule struct { Host string - Ip string + Ip string } type Listener struct { @@ -25,18 +24,18 @@ type Listener struct { DefaultIp string } -type Settings struct{ +type Settings struct { Listeners []Listener } -func printExample() { +func printExample() { settings := Settings{ - Listeners:[]Listener{ + Listeners: []Listener{ { ListenAddress: "0.0.0.0:1443", Protocol: "tcp", - PacketType: "https", - Rules: []Rule{ + PacketType: "https", + Rules: []Rule{ { Host: "host1.ru", Ip: "10.10.0.50:443", @@ -51,8 +50,8 @@ func printExample() { { ListenAddress: "0.0.0.0:1080", Protocol: "tcp", - PacketType: "http", - Rules: []Rule{ + PacketType: "http", + Rules: []Rule{ { Host: "host1.ru", Ip: "10.10.0.50:80", @@ -67,11 +66,13 @@ func printExample() { }, } out, _ := yaml.Marshal(settings) - fmt.Printf("%s",out) + fmt.Printf("%s", out) } + var settings Settings -func main(){ - printExampleFlag := flag.Bool("example",false,"") + +func main() { + printExampleFlag := flag.Bool("example", false, "") ConfigFile := flag.String("i", "none", "/path/to/config/file.yml") flag.Parse() @@ -80,13 +81,13 @@ func main(){ os.Exit(0) } - cf, err := ioutil.ReadFile(*ConfigFile) + cf, err := os.ReadFile(*ConfigFile) if err != nil { log.Fatalf("Read configuration error: %s", err.Error()) } - err = yaml.Unmarshal(cf,&settings) - for _, listener := range settings.Listeners{ + err = yaml.Unmarshal(cf, &settings) + for _, listener := range settings.Listeners { go listen(listener) } for { @@ -94,7 +95,7 @@ func main(){ } } -func listen(listener Listener){ +func listen(listener Listener) { log.Println(listener.Protocol, listener.ListenAddress) ln, err := net.Listen(listener.Protocol, listener.ListenAddress) if err != nil { @@ -114,30 +115,31 @@ func listen(listener Listener){ func handleConnection(conn net.Conn, listener Listener) { var b = make([]byte, 1024*128) n, err := conn.Read(b) - if err != nil{ + if err != nil { log.Println(err) return } var conn2 net.Conn finded := false - for _, rule := range listener.Rules{ - if strings.Contains(string(b),rule.Host) { + for _, rule := range listener.Rules { + if strings.Contains(string(b), rule.Host) { finded = true conn2, err = net.Dial(listener.Protocol, rule.Ip) fmt.Println(rule.Host) + break } } if !finded { conn2, err = net.Dial(listener.Protocol, listener.DefaultIp) fmt.Println("Default") } - if err != nil{ + if err != nil { log.Println(err) return } _, err = conn2.Write(b[:n]) - if err != nil{ + if err != nil { log.Println(err) return } @@ -145,21 +147,21 @@ func handleConnection(conn net.Conn, listener Listener) { go connToConn(conn2, conn) } -func connToConn(conn1 net.Conn,conn2 net.Conn){ +func connToConn(conn1 net.Conn, conn2 net.Conn) { defer conn1.Close() defer conn2.Close() var b = make([]byte, 1024*128) for { n, err := conn1.Read(b) - if err != nil{ + if err != nil { log.Println(err.Error()) break } _, err = conn2.Write(b[:n]) - if err != nil{ + if err != nil { log.Println(err.Error()) break } } -} \ No newline at end of file +}