From 6ebb7870e6d1704b9c6b5ec31520a344df13ee6f Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Mon, 3 Nov 2025 16:49:50 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9Aip=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Filters/ForwardAuthorizeFilter.cs | 4 +- .../Filters/NetUtil.cs | 66 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/InterfaceForward.Application/Filters/NetUtil.cs diff --git a/src/InterfaceForward.Application/Filters/ForwardAuthorizeFilter.cs b/src/InterfaceForward.Application/Filters/ForwardAuthorizeFilter.cs index 7f983e3..499f694 100644 --- a/src/InterfaceForward.Application/Filters/ForwardAuthorizeFilter.cs +++ b/src/InterfaceForward.Application/Filters/ForwardAuthorizeFilter.cs @@ -14,7 +14,7 @@ namespace InterfaceForward.Application.Filters; public class ForwardAuthorizeFilter( InterfaceForwardQuery interfaceForwardQuery, ILogRepository logRepository, - IHttpClientInfoProvider httpClientInfoProvider, + NetUtil netUtil, IBasicRepository interfaceRepository) : IAsyncActionFilter { @@ -28,7 +28,7 @@ public class ForwardAuthorizeFilter( log.IsApp = true; - log.ClientIP = httpClientInfoProvider.ClientIpAddress; + log.ClientIP = netUtil.Ip; log.Address = httpContext.Request.GetDisplayUrl(); // body diff --git a/src/InterfaceForward.Application/Filters/NetUtil.cs b/src/InterfaceForward.Application/Filters/NetUtil.cs new file mode 100644 index 0000000..60188bc --- /dev/null +++ b/src/InterfaceForward.Application/Filters/NetUtil.cs @@ -0,0 +1,66 @@ +using System.Net; +using System.Net.Sockets; +using Fake.DependencyInjection; +using Microsoft.AspNetCore.Http; + +namespace InterfaceForward.Application.Filters; + +public class NetUtil(IHttpContextAccessor httpContextAccessor) : ITransientDependency +{ + /// 获取Ip + public string Ip + { + get + { + string ip = string.Empty; + if (httpContextAccessor.HttpContext != null) + ip = GetWebClientIp(); + if (string.IsNullOrEmpty(ip)) + ip = NetUtil.GetLanIp(); + return ip; + } + } + + /// 得到客户端IP地址 + /// + private string GetWebClientIp() + { + foreach (string hostNameOrAddress in GetWebRemoteIp().Split(',')) + { + foreach (IPAddress hostAddress in Dns.GetHostAddresses(hostNameOrAddress)) + { + if (hostAddress.AddressFamily == AddressFamily.InterNetwork) + return hostAddress.ToString(); + } + } + + return string.Empty; + } + + /// 得到局域网IP地址 + /// + public static string GetLanIp() + { + foreach (IPAddress hostAddress in Dns.GetHostAddresses(Dns.GetHostName())) + { + if (hostAddress.AddressFamily == AddressFamily.InterNetwork) + return hostAddress.ToString(); + } + + return string.Empty; + } + + /// 得到远程Ip地址 + /// + private string GetWebRemoteIp() + { + if (httpContextAccessor.HttpContext?.Connection.RemoteIpAddress == null) + return string.Empty; + string webRemoteIp = httpContextAccessor.HttpContext?.Connection.RemoteIpAddress.ToString(); + if (httpContextAccessor.HttpContext!.Request.Headers.ContainsKey("X-Real-IP")) + webRemoteIp = httpContextAccessor.HttpContext.Request.Headers["X-Real-IP"].ToString(); + if (httpContextAccessor.HttpContext.Request.Headers.ContainsKey("X-Forwarded-For")) + webRemoteIp = httpContextAccessor.HttpContext.Request.Headers["X-Forwarded-For"].ToString(); + return webRemoteIp; + } +} \ No newline at end of file