Нахождение IP-адреса клиента, соединенного через прокси

Для разъяснения объяснения camflan давайте предположим, что Вы имеете

  • правило url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • во входящем запросе на http://domain/user/thaiyoshi/?message=Hi

Правило диспетчера URL поймает части пути URL (здесь "user/thaiyoshi/") и передайте их функции представления наряду с объектом запроса.

Строка запроса (здесь message=Hi) анализируется и параметры хранятся как a QueryDict в request.GET. Никакое дальнейшее соответствие или обработка для HTTP НЕ ДОБИРАЮТСЯ, параметры сделан.

Эта функция представления использовала бы обе части, извлеченные из пути URL и параметра запроса:

def profile_page(request, username=None):
    user = User.objects.get(username=username)
    message = request.GET.get('message')

Как примечание стороны, Вы найдете метод запроса (в этом случае "GET", и для отправленных форм обычно "POST") в request.method. В некоторых случаях полезно проверить, что это соответствует тому, что Вы ожидаете.

Обновление: При решении, использовать ли путь URL или параметры запроса для передающей информации, следующее может помочь:

  • используйте путь URL для однозначного определения ресурсов, например. /blog/post/15/ (нет /blog/posts/?id=15)
  • используйте параметры запроса для изменения путем, ресурс отображен, например. /blog/post/15/?show_comments=1 или /blog/posts/2008/?sort_by=date&direction=desc
  • для создания человеческих дружественных URL избегайте использования Идентификационных номеров и использования, например, дат, категорий и/или кратких заголовков: /blog/post/2008/09/30/django-urls/
8
задан Kshitij Saxena -KJ- 14 August 2009 в 06:31
поделиться

3 ответа

Стандартное решение (на php):

if ($_SERVER['HTTP_X_FORWARDED_FOR']){
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} 
else{ 
    $ip = $_SERVER['REMOTE_ADDR'];
}

Но, как сказано в первом ответе, все зависит от фактически установленного заголовка.

12
ответ дан 5 December 2019 в 06:54
поделиться

Это зависит от прокси. Некоторые прокси-серверы добавляют заголовок, который дает исходный IP-адрес, заголовок X-Forwarded-For, но с учетом того, что большинство компаний используют прокси-серверы для скрытия внутренней сетевой структуры, что редко. Если это так, то вы не сможете сделать это легко.

Если у вас есть контроль над прокси, то он '

12
ответ дан 5 December 2019 в 06:54
поделиться

X-Forwarded-For - единственный способ получить IP-адрес клиента. Проверьте, есть ли способ включить это в вашем прокси.

На некоторых прокси он дает вам возможность обрабатывать существующий заголовок XFF (когда запрос проходит через несколько прокси). Вот что вам нужно принять во внимание:

  1. Если адрес клиента предназначен для целей безопасности / доверия (например, ACL или ограничение скорости), существующий заголовок XFF должен быть удален прокси.
  2. Если адрес предназначен только для информации (ведение журнала, отладка), вы должны добавить одноранговый адрес к существующему XFF через запятую. Первым IP-адресом в списке будет IP-адрес клиента.
1
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: