From e242c9288f1d330ef1462430da78237a112074a5 Mon Sep 17 00:00:00 2001 From: Toby Chui Date: Sat, 30 Mar 2024 15:52:10 +0800 Subject: [PATCH] Fixed recursive port detection logic + Fixed recursive port detection logic + Added support for CF-Connecting-IP #114 --- src/mod/dynamicproxy/dpcore/dpcore.go | 15 +++++++++++++-- src/reverseproxy.go | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/mod/dynamicproxy/dpcore/dpcore.go b/src/mod/dynamicproxy/dpcore/dpcore.go index 8b70556..1d9cc6a 100644 --- a/src/mod/dynamicproxy/dpcore/dpcore.go +++ b/src/mod/dynamicproxy/dpcore/dpcore.go @@ -298,8 +298,19 @@ func addXForwardedForHeader(req *http.Request) { } if req.Header.Get("X-Real-Ip") == "" { - //Not exists. Fill it in with client IP - req.Header.Set("X-Real-Ip", clientIP) + //Check if CF-Connecting-IP header exists + CF_Connecting_IP := req.Header.Get("CF-Connecting-IP") + if CF_Connecting_IP != "" { + //Use CF Connecting IP + req.Header.Set("X-Real-Ip", CF_Connecting_IP) + } else { + // Not exists. Fill it in with first entry in X-Forwarded-For + ips := strings.Split(clientIP, ",") + if len(ips) > 0 { + req.Header.Set("X-Real-Ip", strings.TrimSpace(ips[0])) + } + } + } } diff --git a/src/reverseproxy.go b/src/reverseproxy.go index b7b95b4..c83a22c 100644 --- a/src/reverseproxy.go +++ b/src/reverseproxy.go @@ -896,7 +896,7 @@ func HandleIncomingPortSet(w http.ResponseWriter, r *http.Request) { } proxyRoot := strings.TrimSuffix(dynamicProxyRouter.Root.Domain, "/") - if strings.HasPrefix(proxyRoot, "localhost:"+strconv.Itoa(newIncomingPortInt)) || strings.HasPrefix(proxyRoot, "127.0.0.1:"+strconv.Itoa(newIncomingPortInt)) { + if strings.EqualFold(proxyRoot, "localhost:"+strconv.Itoa(newIncomingPortInt)) || strings.EqualFold(proxyRoot, "127.0.0.1:"+strconv.Itoa(newIncomingPortInt)) { //Listening port is same as proxy root //Not allow recursive settings utils.SendErrorResponse(w, "Recursive listening port! Check your proxy root settings.")