Не удается получить IP-адрес пользователя (прокси / брандмауэр / балансировщик нагрузки)

я использовал код ниже, чтобы получить ip-адрес клиента с asp.net до, но после того, как я перешел на 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

редактировать

найдена аналогичная проблема здесь:

развернули много 2008 32 бит стандартные веб-серверы, использующие citrix netscaler isapi (netscaler является балансировщик нагрузки), во всех дела IP-адрес клиента регистрируется в стандартные журналы IIS. О новом проекте I попросили развернуть 2008 R2 с, настроенный IIS 7.5 идентично с как я настроил IIS 7.0 в прошлом, однако на этот раз клиент ИС возврат адреса балансировщика нагрузки в бревно. Вот что странно, я установлен "расширенный журнал", и это отображение IP-адреса клиента правильно, поэтому isapi делает свое работа. Погуглили это до смерти и мог бы использовать некоторые консультация.

Я также нашел модуль фильтра ISAPI, но не могу заставить его работать:devcentral.f5.com/x_forwarded_for_log_filter_for_windows_servers

2 ответов


проблема решена с помощью HTTP_CLIENT_IP вместо REMOTE_ADDR в файлах исходного кода.

проблема с журналами IIS была решена путем установки модуля расширенного ведения журнала IIS, как было предложено здесь. Также я получил ошибку "503: служба недоступна" после установки расширенного ведения журнала, но решил это, предоставив разрешения на чтение-запись всем для папки Program Files\IIS и запустил неудачное приложение бассейны.

http://kb.parallels.com/6735

другое решение предложил здесь - это:

на NetScaler в разделе " Загрузка балансировка", "услуги", а затем под вкладке Дополнительно в разделе параметры проверки поле для "использовать исходный IP" и "Клиентский IP" затем в поле заголовка "КЛИЕНТ-IP"


Я использую

IP.Text = Request.UserHostAddress;

В C#. Тебе это подходит?