System.Web.HttpContext.Current.Request.UserHostAddress; - PullRequest
4 голосов
/ 15 марта 2012

Я использую следующий код для получения пользователя I.P. адрес, но что-то странное происходит. Я получаю один и тот же IP-адрес каждый раз, независимо от того, нахожусь ли я на своем рабочем столе или на моем iPhone. Я нахожусь в нашей сети, где живут веб-серверы, когда я попадаю на страницу со своего рабочего стола, но на моем iPhone меня даже не было в здании. Я не сталкивался с этой проблемой ранее, IP-адрес, который я получаю, является внутренним, назначенным веб-серверам.

string ip = System.Web.HttpContext.Current.Request.UserHostAddress;
Response.Write(ip);

За пределами моей сети я все еще получаю тот же IP-адрес 172.16.0.22, который является адресом маршрутизатора, а не нашим внешним IP-адресом. Есть ли способ получить внешний IP-адрес.

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

см. Ссылку http://thepcspy.com/read/getting_the_real_ip_of_your_users/

        // Look for a proxy address first
        _ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        // If there is no proxy, get the standard remote address
        if (_ip == null || _ip.ToLower() == "unknown")
            _ip = Request.ServerVariables["REMOTE_ADDR"];
3 голосов
/ 13 марта 2013

Надеюсь, к этому времени это будет решено, я столкнулся с той же проблемой. Как и вы, мы знали, что IP-адрес был одним из серверов в сети (Load Balancer).

Если ваше решение предназначено для веб-серверов с балансировкой нагрузки, то есть высокая вероятность того, что ваш балансировщик нагрузки обновляет информацию заголовка запроса, перенаправляя его через какой-либо программный балансировщик нагрузки или что-то в этом роде.

В случае локального тестирования обновите конфигурацию маршрутизатора, чтобы передать детали запроса. прочтите руководство по настройке маршрутизатора, там должно быть что-то, что будет иметь эту настройку. :)

Укажите информацию о вашем маршрутизаторе, кто-то знает об этом.

Я не эксперт по аппаратному обеспечению, но попросите вашего сетевого администратора либо передать информацию заголовка как есть, либо хотя бы обновить информацию «X-Forwarded-For». Таким образом, вы можете создать код для последовательного чтения этой информации.

Более подробная информация о методах маршрутизации трафика, используемых в промышленности, и проблемах здесь .

Санджай

1 голос
/ 23 июля 2012

Попробуйте это;

if (!String.IsNullOrEmpty(HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"]))
      ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_CLIENT_IP"];
else
      ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

Request.UserHostAddress возвращает IP-адрес сервера, на котором работает IIS.

...