在azure中作为docker linux托管的.net core 2.1应用程序中获取远程ip地址

rslzwgfq  于 2021-06-24  发布在  Kudu
关注(0)|答案(1)|浏览(527)

我试图从aspnetcore2.1api的控制器中的客户端获取远程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 Jmeter 板中,我可以在标题中看到我的真实ip: X-Client-IP ,和 X-Forwarded-For ,但仍无法在请求上下文中获取它。
我错过了什么?有另一种方法从客户端获取远程ip地址吗?

fcipmucu

fcipmucu1#

我们可以用密码 HttpContext.Connection.RemoteIpAddress; 为了获得客户端ip地址,我已经测试了你的代码,它工作得很好。
请执行以下故障排除:
1.确保我们调用 UseForwardedHeaders 在使用其他中间软件之前。
2.默认情况下不启用中间件。必须启用转发标头中间件,应用程序才能使用useforwardedheaders处理转发标头。
作为一个额外的解决方法,我们可以使用 Request.Headers["X-Forwarded-For"] 获取客户端的ip地址而不是 X-Client-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();
        }

相关问题