我的网站在亚马逊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,好吗?
答案 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)。