TechieeGeek Ответов: 1

Правильный способ получения IP-адреса пользователя в ASP.NET


В нашем asp.net веб-приложение мы хотим получить подробную информацию об IP-адресе пользователей, делающих запрос в наше приложение. Я столкнулся с двумя способами получения сведений об IP-адресе. Пожалуйста, дайте мне знать, какой из них является более надежным способом.

Что я уже пробовал:

I have come across below two ways to get client IP details:-

1. HttpContext.Current.Request.UserHostAddress

2. This approach will return correct ip address in case if any proxy web server exists in between. So I am thinking to opt for this approach.

string ip;
    ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
If(ip=="" || ip== null)
   ip= Request.ServerVariables["REMOTE_ADDR"];

1 Ответов

Рейтинг:
10

MadMyche

Я столкнулся ниже с двумя способами получения сведений об IP-адресе клиента:-

Это не возвращает IP-адрес, а возвращает UserAgent; который обычно идентифицирует информацию о браузере и операционной системе.
HttpContext.Current.Request.UserAgent

Это был бы лучший подход:

string ip;
ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

if(ip=="" || ip== null) 
   ip= Request.ServerVariables["REMOTE_ADDR"];


Обновления ответов из-за обновленного вопроса
Действительно не нужны; и я буду стоять за первоначальное предложение.

Причина в том, что HttpContext.Current.Request.UserHostAddress это просто ... обертка вокруг свойства "REMOTE_ADDR", так что оно в любом случае было бы хорошо только в качестве вторичного поиска и ассоциировало бы с ним накладные расходы.

Резервный код для метода UserHostAddress
public string UserHostAddress {
    get {
        if (this._wr != null) { // _wr = Instance of an HttpWorkerRequest
            return this._wr.GetRemoteAddress();
        }
        return null;
    }
}
/* and the method that is being called above is */
public override string GetRemoteAddress() {
    return this.GetServerVariable("REMOTE_ADDR");
}


TechieeGeek

Я обновил свой ответ. На самом деле я имел в виду использование UserHostAddress вместо свойства UserAgent. Не могли бы вы подсказать, какой из них будет более надежным?

MadMyche

Оригинальное предложение использовать метод 2 стоит.. и я обновил ответ о том, почему это так