Przeglądaj źródła

normalize remote ip

Luke Pulverenti 9 lat temu
rodzic
commit
2e78362db2

+ 18 - 2
MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs

@@ -136,11 +136,27 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
             {
             {
                 return remoteIp ??
                 return remoteIp ??
                     (remoteIp = XForwardedFor ??
                     (remoteIp = XForwardedFor ??
-                                (XRealIp ??
-                                ((request.RemoteEndPoint != null) ? request.RemoteEndPoint.Address.ToString() : null)));
+                                (NormalizeIp(XRealIp) ??
+                                ((request.RemoteEndPoint != null) ? NormalizeIp(request.RemoteEndPoint.Address.ToString()) : null)));
             }
             }
         }
         }
 
 
+        private string NormalizeIp(string ip)
+        {
+            if (!string.IsNullOrWhiteSpace(ip))
+            {
+                // Handle ipv4 mapped to ipv6
+                const string srch = "::ffff:";
+                var index = ip.IndexOf(srch, StringComparison.OrdinalIgnoreCase);
+                if (index == 0)
+                {
+                    ip = ip.Substring(srch.Length);
+                }
+            }
+
+            return ip;
+        }
+
         public bool IsSecureConnection
         public bool IsSecureConnection
         {
         {
             get { return request.IsSecureConnection || XForwardedProtocol == "https"; }
             get { return request.IsSecureConnection || XForwardedProtocol == "https"; }