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

Я видел в этой теме на 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-адрес и местоположение от пользователя, обращается к службе

1 Ответ

0 голосов
/ 27 августа 2018

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

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

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

url = 'http://ipinfo.io/' + request.remote_addr
...