0

我的网站在 Amazon ELB 上运行。我需要为我们在网站上做的事情捕获客户的 IP 地址——这并不理想,但我们现在肯定需要这个 IP。

这曾经在专用服务器上工作得很好。但是自从搬到ELB后,我在使用时只得到ELB的内部IP地址作为客户端的IP地址Request.UserHostAddress

我添加的一些博客开始X-Forwarded-For,即使我的 IIS 日志具有正确的客户端 IP,该 IP 也不会传递给实际的网页。

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

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

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

请问如何从 C# 获取真实的客户端 IP?

4

2 回答 2

1

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

我不得不使用Request.ServerVariables并寻找REMOTE_ADDR找到客户端IP。

像这样的东西:

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

这对我有用..

于 2013-01-23T12:12:54.323 回答
1

在我的测试中,客户端 IP 地址在以下两种情况下均由弹性负载均衡器填充。

Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

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

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

See Amazon's Elastic Load Balancing Developer Guide for further details (search for X-Forwarded-For).

于 2013-02-15T10:29:13.033 回答