如何将HTTP_X_FORWARDED_FOR传递给IIS中的aspx页面

时间:2013-01-23 11:39:53

标签: c# amazon-ec2 ip

我的网站在亚马逊ELB上运行。我需要捕获客户端的IP地址以获取我们在网站上所做的事情 - 这不是理想的,但我们现在肯定需要IP。

这曾经在专用服务器上运行良好。但是自从转移到ELB后,当我使用Request.UserHostAddress时,我只获得ELB的内部IP地址作为客户端的IP地址

Going from some blogs我添加了X-Forwarded-For,即使我的IIS日志具有正确的客户端IP,该IP也不会传递到实际的网页..

事实上,标题中没有这样的字段..或者标题中有任何接近的字段。

检查Request.Headers.ToString()会给我我的会话cookie,其他cookie,客户端浏览器(正确)和其他类似的东西,但没有任何关于任何IP。事实上,我甚至看不到elb的静态ip。

Request.Headers["HTTP_X_FORWARDED_FOR"]始终为null,这是可以理解的。

如何从C#获取真正的客户端IP,好吗?

2 个答案:

答案 0 :(得分:1)

几天前我做了类似的事情!

我必须使用Request.ServerVariables并查找REMOTE_ADDR才能找到客户端IP。

这样的事情:

if (Request.ServerVariables["REMOTE_ADDR"] != null)
{
    string userIP = Request.ServerVariables["REMOTE_ADDR"]; 
}

这对我有用..

答案 1 :(得分:1)

在我的测试中,在以下两种情况下,Elastic Load Balancer都填充了客户端IP地址。

Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

Request.Headers["X-Forwarded-For"];

请注意,这些变量的格式不一定只是客户端IP地址。如果请求被多次转发,则服务器IP地址将附加逗号和空格作为分隔符。

有关详细信息,请参阅Amazon's Elastic Load Balancing Developer Guide(搜索X-Forwarded-For)。