瀏覽代碼

Fix ipv6 hostname parsing for subscriptions (#3782)

bakatrouble 2 天之前
父節點
當前提交
fc6344b840
共有 1 個文件被更改,包括 24 次插入1 次删除
  1. 24 1
      web/service/setting.go

+ 24 - 1
web/service/setting.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+    "net"
 	"reflect"
 	"strconv"
 	"strings"
@@ -717,6 +718,28 @@ func (s *SettingService) GetDefaultXrayConfig() (any, error) {
 	return jsonData, nil
 }
 
+func extractHostname(host string) string {
+    h, _, err := net.SplitHostPort(host)
+    // Err is not nil means host does not contain port
+    if err != nil {
+        h = host
+    }
+
+    ip := net.ParseIP(h)
+    // If it's not an IP, return as is
+    if ip == nil {
+        return h
+    }
+
+    // If it's an IPv4, return as is
+    if ip.To4() != nil {
+        return h
+    }
+
+    // IPv6 needs bracketing
+    return "[" + h + "]"
+}
+
 func (s *SettingService) GetDefaultSettings(host string) (any, error) {
 	type settingFunc func() (any, error)
 	settings := map[string]settingFunc{
@@ -767,7 +790,7 @@ func (s *SettingService) GetDefaultSettings(host string) (any, error) {
 			subTLS = true
 		}
 		if subDomain == "" {
-			subDomain = strings.Split(host, ":")[0]
+			subDomain = extractHostname(host)
 		}
 		if subTLS {
 			subURI = "https://"