Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SSL请求中获取请求IP地址_C#_Ssl_Amazon Ec2 - Fatal编程技术网

C# 如何在SSL请求中获取请求IP地址

C# 如何在SSL请求中获取请求IP地址,c#,ssl,amazon-ec2,C#,Ssl,Amazon Ec2,我有一个在AmazonEC2中运行的服务。该服务同时公开http端点和https端点。当我记录数据时,我正在对用户IP地址进行地理查找。对于进入http端点的请求,一切都正常工作。我必须抓取X-Forwarded-For报头,这样我就不会占用Amazon负载平衡器的地址,而且我总是能够得到我需要的东西。但是,对于https端点上的请求,所有IP地址都是相同的 为了提取IP地址,我使用以下C代码: public static string FetchClientIp(HttpRequest

我有一个在AmazonEC2中运行的服务。该服务同时公开http端点和https端点。当我记录数据时,我正在对用户IP地址进行地理查找。对于进入http端点的请求,一切都正常工作。我必须抓取X-Forwarded-For报头,这样我就不会占用Amazon负载平衡器的地址,而且我总是能够得到我需要的东西。但是,对于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上终止SSL,则客户端IP地址将为X-Forwarded-For

HttpContext.Current.Request.Headers["X-Forwarded-For"]
听起来像是在web服务器上终止SSL,然后ELB无法解密流量并将X-Forwarded-For头添加到HTTP请求中。因此,头REMOTE_ADDR中的客户端IP地址是HttpRequest.UserHostAddress返回的头,它是最后一个跃点的IP—在本例中是ELB的内部IP地址


请记住,X-Forwared-For可能包含多个IP地址,如中所述。在这种情况下,您可能对列出的第一个地址最感兴趣。

很明显,问题出在亚马逊流量管理器上,而且它非常神秘,所以我不知道您在这里会有多幸运。建议您咨询供应商论坛或支持。疯狂建议:您确定与您连接的端点的IP不是客户端IP地址吗?