From c6ab5ee1b7cedd3ae5035bcd2a0010b53e70482f Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 5 Mar 2022 00:58:35 +0800 Subject: [PATCH] fix: listen error under ipv6 host --- server/args.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/server/args.go b/server/args.go index 3eb65b45b..85e033a4d 100644 --- a/server/args.go +++ b/server/args.go @@ -3,11 +3,17 @@ package main import ( "bytes" "fmt" + "net" "os" "sort" "strings" ) +func isIPv6(str string) bool { + ip := net.ParseIP(str) + return ip != nil && strings.Contains(str, ":") +} + // Key–value mappings for the representation of client and server options. // Args maps a string key to a list of values. It is similar to url.Values. @@ -76,6 +82,12 @@ func parseEnv() (opts Args, err error) { if len(ss_local_host) == 0 { return } + if isIPv6(ss_remote_host) { + ss_remote_host = "[" + ss_remote_host + "]" + } + if isIPv6(ss_local_host) { + ss_local_host = "[" + ss_local_host + "]" + } opts.Add("listen", ss_remote_host+":"+ss_remote_port) opts.Add("target", ss_local_host+":"+ss_local_port) ss_plugin_options := os.Getenv("SS_PLUGIN_OPTIONS")