【问题标题】:How to get the client IP address when visiting my website?访问我的网站时如何获取客户端 IP 地址?
【发布时间】:2021-07-26 18:59:25
【问题描述】:

我使用 dotnet core 3.1,我需要网站访问者的 IP 地址,但是当我尝试获取它时,返回的是服务器的 IP,而不是客户端的 IP。这是我使用的代码:

var ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();

这将返回 null。然后我尝试使用第三方网站获取我的 IP 地址。所以我这样做了:

WebRequest request = WebRequest.Create("https://api.ipify.org/");

这也将返回服务器的 IP 地址,而不是客户端。然后我尝试了这个:

var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
    if (ip.AddressFamily == AddressFamily.InterNetwork)
    {
        return ip.ToString();
    }
}

还有这个:

string localIP = string.Empty;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
{
    socket.Connect("8.8.8.8", 65530);
    IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint;
    localIP = endPoint.Address.ToString();
}

但它们返回本地 IP 地址。 return localIP.ToString();

并且某些代码行 HTTPContext.Current.Request.UserHostAddress 或 ServerVariables["REMOTE_ADDR"] 在 dotnet core 中无效。 有什么建议吗?

【问题讨论】:

  • 这能回答你的问题吗? How do I get client IP address in ASP.NET CORE?(检查所有答案,不仅仅是接受的答案)
  • 我用这个:string ipAddress = Request.HttpContext.Connection?.RemoteIpAddress?.ToString();
  • @StephanBauer 这将返回 null;我确实配置了我的 startup.cs 文件,但没有成功。
  • @Catalin 这也返回 null,亲爱的朋友。
  • 只需尝试添加Microsoft.AspNetCore.HttpOverrides NuGet包并根据此文档使用它:thecodebuzz.com/get-ip-address-in-asp-net-core-guidelines。希望对你有帮助

标签: c# asp.net-mvc asp.net-core


【解决方案1】:

我假设您不是通过直接将 Kesterl 暴露给最终客户端而是在一些反向代理 (IIS/nginx) 下运行网站。在这种情况下,Connection.RemoteIpAddress 要使用属性,您必须通过在启动时添加类似以下代码的内容来配置应用程序:

app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 2020-04-06
    • 1970-01-01
    • 2014-12-08
    • 2012-03-14
    • 2012-02-16
    • 2015-12-20
    • 2016-03-29
    相关资源
    最近更新 更多