From ab3e625ce9b2537d9a91be75ba088ff6dd5ce0fd Mon Sep 17 00:00:00 2001 From: xxf098 Date: Sat, 14 Jan 2023 21:27:52 -0500 Subject: [PATCH] fix JoinHostPort --- config/parser.go | 10 ++++++---- config/shadowsocksr.go | 4 ++-- core/core.go | 4 +++- proxy/proxy.go | 3 ++- web/msg.go | 6 ++++-- web/server.go | 3 ++- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/config/parser.go b/config/parser.go index e592ae1..2bb9c1d 100644 --- a/config/parser.go +++ b/config/parser.go @@ -4,7 +4,9 @@ import ( "encoding/base64" "encoding/json" "fmt" + "net" "net/url" + "strconv" "strings" "github.com/xxf098/lite-proxy/common/structure" @@ -31,7 +33,7 @@ func ParseProxy(mapping map[string]interface{}, namePrefix string) (string, erro break } auth := fmt.Sprintf("%s:%s", ssOption.Cipher, ssOption.Password) - link = fmt.Sprintf("ss://%s@%s:%d", base64.StdEncoding.EncodeToString([]byte(auth)), ssOption.Server, ssOption.Port) + link = fmt.Sprintf("ss://%s@%s", base64.StdEncoding.EncodeToString([]byte(auth)), net.JoinHostPort(ssOption.Server, strconv.Itoa(ssOption.Port))) if len(ssOption.Name) > 0 { link = fmt.Sprintf("%s#%s", link, url.QueryEscape(ssOption.Name)) } @@ -42,7 +44,7 @@ func ParseProxy(mapping map[string]interface{}, namePrefix string) (string, erro break } password := base64.StdEncoding.EncodeToString([]byte(ssrOption.Password)) - link = fmt.Sprintf("%s:%d:%s:%s:%s:%s", ssrOption.Server, ssrOption.Port, ssrOption.Protocol, ssrOption.Cipher, ssrOption.Obfs, password) + link = fmt.Sprintf("%s:%s:%s:%s:%s", net.JoinHostPort(ssrOption.Server, strconv.Itoa(ssrOption.Port)), ssrOption.Protocol, ssrOption.Cipher, ssrOption.Obfs, password) remarks := base64.StdEncoding.EncodeToString([]byte(ssrOption.Name)) obfsParam := base64.StdEncoding.EncodeToString([]byte(ssrOption.ObfsParam)) @@ -118,7 +120,7 @@ func ParseProxy(mapping map[string]interface{}, namePrefix string) (string, erro break } - link = fmt.Sprintf("trojan://%s@%s:%d", trojanOption.Password, trojanOption.Server, trojanOption.Port) + link = fmt.Sprintf("trojan://%s@%s", trojanOption.Password, net.JoinHostPort(trojanOption.Server, strconv.Itoa(trojanOption.Port))) query := []string{} // allowInsecure if trojanOption.SkipCertVerify { @@ -162,7 +164,7 @@ func ParseProxy(mapping map[string]interface{}, namePrefix string) (string, erro if err != nil { break } - link = fmt.Sprintf("http://%s@%s:%d", httpOption.Password, httpOption.Server, httpOption.Port) + link = fmt.Sprintf("http://%s@%s", httpOption.Password, net.JoinHostPort(httpOption.Server, strconv.Itoa(httpOption.Port))) query := []string{} query = append(query, fmt.Sprintf("tls=%t", httpOption.TLS)) if len(httpOption.UserName) > 0 { diff --git a/config/shadowsocksr.go b/config/shadowsocksr.go index 3e39cc2..8a655d6 100644 --- a/config/shadowsocksr.go +++ b/config/shadowsocksr.go @@ -2,7 +2,7 @@ package config import ( "errors" - "fmt" + "net" "net/url" "regexp" "strconv" @@ -77,7 +77,7 @@ func SSRLinkToSSROption(link string) (*outbound.ShadowSocksROption, error) { remarks, err := utils.DecodeB64(rawQuery.Get("remarks")) if err == nil { if remarks == "" { - remarks = fmt.Sprintf("%s:%d", ssrOption.Server, ssrOption.Port) + remarks = net.JoinHostPort(ssrOption.Server, strconv.Itoa(ssrOption.Port)) } ssrOption.Remarks = remarks ssrOption.Name = remarks diff --git a/core/core.go b/core/core.go index 39d8bb9..02162d4 100644 --- a/core/core.go +++ b/core/core.go @@ -5,6 +5,8 @@ import ( "errors" "fmt" "log" + "net" + "strconv" "time" "github.com/xxf098/lite-proxy/config" @@ -52,7 +54,7 @@ func StartInstance(c Config) (*proxy.Proxy, error) { Attempts: c.Ping, TimeOut: 1200 * time.Millisecond, } - info := fmt.Sprintf("%s %s:%d", cfg.Remarks, cfg.Server, cfg.Port) + info := fmt.Sprintf("%s %s", cfg.Remarks, net.JoinHostPort(cfg.Server, strconv.Itoa(cfg.Port))) if elapse, err := request.PingLinkInternal(link, opt); err == nil { info = fmt.Sprintf("%s \033[32m%dms\033[0m", info, elapse) } else { diff --git a/proxy/proxy.go b/proxy/proxy.go index 3854af8..76768f3 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "net" + "strconv" "time" "github.com/xxf098/lite-proxy/common" @@ -60,7 +61,7 @@ func (p *Proxy) relayConnLoop() { if networkType == "" { networkType = "tcp" } - add := fmt.Sprintf("%s:%d", addr.IP.String(), addr.Port) + add := net.JoinHostPort(addr.IP.String(), strconv.Itoa(addr.Port)) outbound, err = net.Dial(networkType, add) } else { outbound, err = p.sink.DialConn(addr, nil) diff --git a/web/msg.go b/web/msg.go index c511daa..c1ca81b 100644 --- a/web/msg.go +++ b/web/msg.go @@ -3,6 +3,8 @@ package web import ( "encoding/json" "fmt" + "net" + "strconv" "strings" "github.com/xxf098/lite-proxy/config" @@ -48,7 +50,7 @@ func gotserverMsg(id int, link string, groupName string) []byte { if err == nil { msg.Group = groupName msg.Remarks = cfg.Remarks - msg.Server = fmt.Sprintf("%s:%d", cfg.Server, cfg.Port) + msg.Server = net.JoinHostPort(cfg.Server, strconv.Itoa(cfg.Port)) msg.Protocol = cfg.Protocol if cfg.Protocol == "vmess" && cfg.Net != "" { msg.Protocol = fmt.Sprintf("%s/%s", cfg.Protocol, cfg.Net) @@ -68,7 +70,7 @@ func gotserversMsg(startID int, links []string, groupName string) []byte { if err == nil { msg.Group = groupName msg.Remarks = cfg.Remarks - msg.Server = fmt.Sprintf("%s:%d", cfg.Server, cfg.Port) + msg.Server = net.JoinHostPort(cfg.Server, strconv.Itoa(cfg.Port)) msg.Protocol = cfg.Protocol if (cfg.Protocol == "vmess" || cfg.Protocol == "trojan") && cfg.Net != "" { msg.Protocol = fmt.Sprintf("%s/%s", cfg.Protocol, cfg.Net) diff --git a/web/server.go b/web/server.go index d60d5b4..ad7a9f2 100644 --- a/web/server.go +++ b/web/server.go @@ -13,6 +13,7 @@ import ( "net/http" "net/url" "os" + "strconv" "strings" "time" @@ -33,7 +34,7 @@ func ServeFile(port int) error { http.HandleFunc("/generateResult", generateResult) log.Printf("Start server at http://127.0.0.1:%d\n", port) if ipAddr, err := localIP(); err == nil { - log.Printf("Start server at http://%s:%d", ipAddr.String(), port) + log.Printf("Start server at http://%s", net.JoinHostPort(ipAddr.String(), strconv.Itoa(port))) } err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil) return err