From 438a9684ee04caf353020bc0d8c0cea19aa4ee5c Mon Sep 17 00:00:00 2001 From: Ilya <74469029+voronin9032@users.noreply.github.com> Date: Sun, 11 Aug 2024 19:26:43 +0300 Subject: [PATCH] Fix #2470 (The subscription service gives two ports for VLESS) (#2479) * Fix #2470 --- sub/subController.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/sub/subController.go b/sub/subController.go index 6212f5b2bd..4f23c424f3 100644 --- a/sub/subController.go +++ b/sub/subController.go @@ -3,6 +3,7 @@ package sub import ( "encoding/base64" "net" + "strings" "github.com/gin-gonic/gin" ) @@ -54,7 +55,10 @@ func (a *SUBController) initRouter(g *gin.RouterGroup) { func (a *SUBController) subs(c *gin.Context) { subId := c.Param("subid") - host := c.GetHeader("X-Forwarded-Host") + var host string + if h, err := getHostFromXFH(c.GetHeader("X-Forwarded-Host")); err == nil { + host = h + } if host == "" { host = c.GetHeader("X-Real-IP") } @@ -89,7 +93,10 @@ func (a *SUBController) subs(c *gin.Context) { func (a *SUBController) subJsons(c *gin.Context) { subId := c.Param("subid") - host := c.GetHeader("X-Forwarded-Host") + var host string + if h, err := getHostFromXFH(c.GetHeader("X-Forwarded-Host")); err == nil { + host = h + } if host == "" { host = c.GetHeader("X-Real-IP") } @@ -113,3 +120,14 @@ func (a *SUBController) subJsons(c *gin.Context) { c.String(200, jsonSub) } } + +func getHostFromXFH(s string) (string, error) { + if strings.Contains(s, ":") { + realHost, _, err := net.SplitHostPort(s) + if err != nil { + return "", err + } + return realHost, nil + } + return s, nil +}