gpt4 book ai didi

c# - 如何获取 SSL 请求的请求 IP 地址

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:16 29 4
gpt4 key购买 nike

我有一项在 Amazon Ec2 中运行的服务。该服务公开了一个 http 端点和一个 https 端点。当我记录数据时,我正在对用户 IP 地址进行一些地理查找。对于进入 http 端点的请求,一切正常。我必须获取 X-Forwarded-For header ,这样我就不会使用 Amazon Load Balancer UP 地址,而且我始终能够获得我需要的东西。但是,对于来自 https 端点的请求,所有 IP 地址都是相同的。

为了提取 IP 地址,我使用以下 C# 代码:

    public static string FetchClientIp(HttpRequest req)
{
var value = req.Headers["X-Forwarded-For"];
return string.IsNullOrEmpty(value) ? req.UserHostAddress : value;
}

我找不到我需要做的任何其他特定于 https 请求的事情,所以我希望这里的人以前遇到过这个问题。我将对此进行测试,以尝试更好地隔离问题。

谢谢

最佳答案

这取决于您如何设置 ELB。

如果您在 ELB ( new feature as of October 2010 ) 上终止 SSL,则客户端 IP 地址将位于“X-Forwarded-For”中。

HttpContext.Current.Request.Headers["X-Forwarded-For"]

这听起来像是您要在 Web 服务器上终止 SSL,然后 ELB 无法解密流量并将“X-Forwarded-For” header 添加到 HTTP 请求。因此, header “REMOTE_ADDR”(由 HttpRequest.UserHostAddress 返回的 header )中的客户端 IP 地址是最后一跳的 IP——在本例中为 ELB 的内部 IP 地址。

请记住,“X-Forwared-For”可能包含多个 IP 地址,如 http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?SvcIntro.html#X-Forwarded-For 中所述。 .在这种情况下,您可能对列出的第一个地址最感兴趣。

关于c# - 如何获取 SSL 请求的请求 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4207859/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com