在Azure中作为Docker Linux托管的.NET CORE 2.1应用程序中获取远程Ip地址



我正在尝试从AspNetCore 2.1 API控制器内的客户端获取远程IP地址,但每次都获取相同的IP(Request.HttpContext?.Connection?.RemoteIpAddress?.ToString() == "::ffff:172.18.0.1"(。

我的转发标头配置:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.All,
RequireHeaderSymmetry = false,
KnownProxies = {
IPAddress.Parse("::ffff:172.18.0.0"),
IPAddress.Parse("::ffff:172.18.0.1"),
IPAddress.Parse("172.18.0.1"),
IPAddress.Parse("172.18.0.0")
}
});

我正在使用AspNetCore 2.1应用程序的标准Dockerfile。同样在Azure的Kudu面板中,我可以在标题中看到我的真实IP:X-Client-IPX-Forwarded-For,但仍然无法在请求上下文中获得它。

我缺少什么?有其他方法可以从客户端获取远程Ip地址吗?

我们可以使用代码HttpContext.Connection.RemoteIpAddress;来获取客户端IP地址,我已经测试了您的代码,它运行良好。

请执行以下故障排除:

1.确保在使用其他中间件之前调用UseForwardedHeaders的方法。

2.默认情况下,未启用Forwarded Headers中间件。必须启用转发的标头中间件,应用程序才能使用UseForwardedHeaders处理转发的标头。

作为一个额外的解决方法,我们可以使用Request.Headers["X-Forwarded-For"]而不是X-Client-IP来获取客户端的IP地址。

我们可以做如下:

string IpAddress = null;
if (Request.Headers["X-Forwarded-For"].ToString().IndexOf(",") > 0)
{
IpAddress = Request.Headers["X-Forwarded-For"].ToString().Split(',')[0];
}
else
{
IpAddress = Request.Headers["X-Forwarded-For"].ToString();
}

相关内容

  • 没有找到相关文章

最新更新