получение правильного IP-адреса от пользователя во фляге

1

Я видел в этом потоке StackOverflow: как найти местоположение с IP-адресом в Python?

Ответ работал на меня, но до сих пор я тестировал его только на localhost, и я хочу убедиться, что IP-адрес на самом деле является IP от пользователя, а не от самого сервера.

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

 #I'm using a Mail API, but here I will print for simplicity
'IP-address from user ' + request.remote_addr #retures 127.0.0.1 when running on localhost

всякий раз, когда я пытаюсь использовать API ipinfo, я получаю фактический IP-адрес из своего интернет-соединения, а не из localhost.

url= 'http://ipinfo.io/json'
response = urlopen(url)
data = json.load(response)

IP=data['ip']
org=data['org']
city = data['city']
country=data['country']
region=data['region']  

 print('IP : {4} \nRegion : {1} \nCountry : {2} \nCity : {3} \nOrg : {0}'.format(org,region,country,city,IP))
#returns actual IP-address from my internet connection

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

Теги:
email
ip

1 ответ

1
Лучший ответ

request.remote_addr дает вам адрес, с которого пришел запрос. Если вы используете это на своем локальном хосте, то да, запрос также будет поступать с localhost, так что IP-адрес вы получите.

Если ваш сервер настроен в определенной конфигурации проксирования, так что весь ваш сервер видит входящие запросы, это IP-адрес прокси-сервера, тогда вы должны знать, что это дело (потому что вы так настраиваете сервер) и убедитесь, что прокси пропускает IP-адрес посетителя каким-то другим способом (т.е. заголовки HTTP) и специально использует это вместо request.remote_addr. Опять же, это то, что вы узнаете о том, когда и когда вы находитесь в этой ситуации.

Когда вы делаете запрос на ipinfo.io со своего сервера, ipinfo.io увидит адрес вашего сервера в качестве источника запроса и использует его в качестве IP-адреса, о котором вы спрашиваете. Поскольку запрос проходит через Интернет, он видит ваш общедоступный интернет-адрес. Если вы хотите, чтобы ваш сервер запрашивал IP-адрес вашего посетителя, ваш сервер должен будет включить IP-адрес посетителя в запрос, иначе ipinfo.io не имеет никакого шанса узнать этот IP-адрес. Затем запрос должен выглядеть так:

url = 'http://ipinfo.io/' + request.remote_addr
  • 0
    Это верный момент, спасибо за ваш ответ ... Однако всякий раз, когда я пытаюсь это сделать, я получаю ошибку HTTP 404. Я не думаю, что могу передать IP-адрес непосредственно в URL.
  • 0
    Ошибка HTTP: ошибка HTTP 404: не найден
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню