From 90a28e90e05af48f479a936edebc8fc0aa88fa22 Mon Sep 17 00:00:00 2001 From: koaiwu Date: Thu, 27 Oct 2022 11:48:50 +0800 Subject: [PATCH 1/2] parseIP supports IPv6 --- cmd/gost/cfg.go | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/cmd/gost/cfg.go b/cmd/gost/cfg.go index b8fda231..dc696c82 100644 --- a/cmd/gost/cfg.go +++ b/cmd/gost/cfg.go @@ -152,17 +152,25 @@ func parseIP(s string, port string) (ips []string) { port = "8080" // default port } + addrFn := func(s, port string) string { + c := strings.Count(s, ":") + if c == 0 || //ipv4 or domain + s[len(s)-1] == ']' { //[ipv6] + return s + ":" + port + } + if c > 1 && s[0] != '[' { // ipv6 + return "[" + s + "]:" + port + } + return s //ipv4:port or [ipv6]:port + } + file, err := os.Open(s) if err != nil { ss := strings.Split(s, ",") for _, s := range ss { s = strings.TrimSpace(s) if s != "" { - // TODO: support IPv6 - if !strings.Contains(s, ":") { - s = s + ":" + port - } - ips = append(ips, s) + ips = append(ips, addrFn(s, port)) } } @@ -175,10 +183,7 @@ func parseIP(s string, port string) (ips []string) { if line == "" || strings.HasPrefix(line, "#") { continue } - if !strings.Contains(line, ":") { - line = line + ":" + port - } - ips = append(ips, line) + ips = append(ips, addrFn(line, port)) } return } From 83e0a82ad58eb31437a6828640a3dd42f4375fdb Mon Sep 17 00:00:00 2001 From: koaiwu Date: Fri, 28 Oct 2022 11:40:05 +0800 Subject: [PATCH 2/2] toSocksAddr supports IPv6 --- socks.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/socks.go b/socks.go index fe7a7a23..dfd8012a 100644 --- a/socks.go +++ b/socks.go @@ -10,6 +10,7 @@ import ( "net" "net/url" "strconv" + "strings" "sync" "time" @@ -1630,17 +1631,21 @@ func (h *socks5Handler) muxBindOn(conn net.Conn, addr string) { } } -// TODO: support ipv6 and domain +// TODO: support domain func toSocksAddr(addr net.Addr) *gosocks5.Addr { host := "0.0.0.0" port := 0 + addrType := gosocks5.AddrIPv4 if addr != nil { h, p, _ := net.SplitHostPort(addr.String()) host = h port, _ = strconv.Atoi(p) + if strings.Count(host, ":") > 0 { + addrType = gosocks5.AddrIPv6 + } } return &gosocks5.Addr{ - Type: gosocks5.AddrIPv4, + Type: addrType, Host: host, Port: uint16(port), }