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

Has*_*anG 6 vb.net asp.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
Run Code Online (Sandbox Code Playgroud)

编辑

发现了类似的问题在这里:

使用citrix netscaler isapi(netscaler是负载均衡器)部署了许多2008 32位标准Web服务器,在所有情况下,客户端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

Has*_*anG 4

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

有关 IIS 日志的问题已通过按照此处的建议安装 IIS 高级日志记录模块来解决。另外,在安装高级日志记录后,我收到错误“503:服务不可用”,但通过向“每个人”授予 Program Files\IIS 文件夹的读写权限并启动失败的应用程序池解决了此问题。

http://kb.parallels.com/6735

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

在 NetScaler 上的“负载平衡”、“服务”下,然后在高级选项卡下的设置下,选中“使用源 IP”和“客户端 IP”框,然后在标头字段“客户端 IP”中选中