2010-01-02 2 views
1

Могу ли я зависеть от IP-адреса запрашивающего, проходящего через все веб-запросы?Все веб-запросы содержат IP-адрес запрашивающего?

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

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

Или есть лучший идентификатор, чем IP?

+3

«Я бы хотел использовать IP для идентификации не прошедших проверку посетителей». - что, если в интранете используется 100 машин, которые используют один и тот же внешний ip? – Ally

+0

Какие технологии вы здесь работаете? Существует ряд инфраструктур аутентификации. –

+0

Вы не можете использовать куки? – jbochi

ответ

3

Вы можете получить это от Request.ServerVariables["REMOTE_ADDR"].

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

Могло быть много причин для того, чтобы это значение не было полезным. Вы можете получить только адрес последнего прыжка, например, балансировщик нагрузки или декодер SSL в локальной сети. Это может быть прокси-сервер ISP или какой-либо сетевой брандмауэр компании.

На этой заметке некоторые прокси могут предоставить IP-адрес, для которого они пересылают трафик в дополнительном HTTP-заголовке, доступном через Request.ServerVariables["HTTP_X_FORWARDED_FOR"]. Вы можете сначала проверить это, затем вернуться к Request.ServerVariables["REMOTE_ADDR"] или Request.UserHostAddress.

Это, конечно же, неплохая идея зарегистрировать эти вещи для справки/аудита.

+0

+1 и вы можете добавить список проблем с REMOTE_ADDR, что он немного напуган, когда используется IPV6. – AnthonyWJones

1

Ну, веб-запрос является http-соединением, которое является подключением tcp, и все соединения tcp имеют две конечные точки. Таким образом, он всегда существует. Но это примерно так, как вы знаете об этом. Он не является ни уникальным, ни надежным (со всеми прокси-серверами и т. Д.).

2

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

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

0

IP-адрес не используется для идентификации пользователей. Как уже упоминалось, корпоративные прокси и другие частные сети могут отображаться как один IP-адрес.

Как вы аутентифицируете пользователей? Как правило, вы должны войти в систему, а затем сохранить это состояние в своем сеансе в своем приложении.

2

Вы всегда будете получать IP-адрес, если ваш веб-сервер не прослушивает какую-то сеть, которая не является сетью IP. Но IP-адрес не обязательно будет уникальным для каждого пользователя.

1

Да, каждый запрос должен иметь IP-адрес, но, как указано выше, некоторые прокси-серверы ISP, NAT или шлюзы, которые могут не дать вам компьютер пользователя. .

Вы можете легко получить этот IP-адрес (в C#) с:

строки IP = Context.Request.ServerVariables [ "REMOTE_ADDR"] ToString();

или осины/VBScript с

IP = Request.ServerVariables ("REMOTE_ADDR")

Смежные вопросы