无法获取用户IP地址(代理/防火墙/负载均衡器)

时间:2011-05-16 08:33:29

标签: asp.net vb.net ip-address iis-7.5

我之前使用了以下代码来获取asp.net的客户端ip,但是在我转移到VDS之后,这个函数开始只返回我的子网掩码178.18.198.1或178.18.198.2。 任何人都可以帮我解决这个问题吗?

Private Function GetIPAddress() As String
    Dim sIPAddress As String = Nothing
    sIPAddress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

    If String.IsNullOrEmpty(sIPAddress) Then
        sIPAddress = Request.ServerVariables("REMOTE_ADDR")
    End If

    Return sIPAddress
End Function

修改

发现类似问题here

  

已经部署了许多2008 32位   使用Citrix的标准Web服务器   netscaler isapi(netscaler是一个   负载均衡器),在所有情况下   客户端IP地址记录在   标准的IIS日志。在一个新项目我   被要求部署2008 R2,   配置IIS 7.5与   我以前如何配置IIS 7.0,   但是这次客户端ip是   返回负载均衡器地址   日志。这是奇怪的部分,我   安装“高级日志记录”,它是   显示客户端IP地址   正确,所以isapi正在做它   工作。用Google搜索了这个死神   并且可以使用一些建议。

我还发现了ISAPI过滤器模块,但无法使其正常工作:devcentral.f5.com/x_forwarded_for_log_filter_for_windows_servers

2 个答案:

答案 0 :(得分:4)

在源代码文件中使用HTTP_CLIENT_IP而不是REMOTE_ADDR解决了问题。

通过按建议here安装IIS高级日志记录模块,解决了IIS日志问题。安装高级日志记录后,我收到错误“503:Service Unavailable”,但是通过向Program Files \ IIS文件夹的Everyone授予读写权限并启动了失败的应用程序池来解决此问题。

http://kb.parallels.com/6735

另一个建议here的解决方案是:

  

在NetScaler下“加载   平衡“,”服务“然后在   高级选项卡,在设置下,检查   “使用源IP”框和   然后在Header字段中输入“Client IP”   “CLIENT-IP”

答案 1 :(得分:0)

我用

IP.Text = Request.UserHostAddress;

在C#中。这对你有用吗?