2013-06-19 2 views
1

Я использую Django-ipware для получения общественного IP пользователяDjango дает мне локальный IP всегда на моем сайте

https://github.com/un33k/django-ipware

Мой сайт размещен на виртуальной машине с djnago , mod_wsgi , apache

Этом мой код

g = GeoIP() 
    ip_address = get_ip_address_from_request(self.request) 
    raise Exception(ip_address) 

это дало мне 127.0.0.1

Я обращаюсь к нему с другого компьютера в той же сети.

, как я могу получить свой публичный IP

Я также попытался это также

PRIVATE_IPS_PREFIX = ('10.', '172.', '192.',) 

def get_client_ip(request): 
"""get the client ip from the request 
""" 
remote_address = request.META.get('REMOTE_ADDR') 
# set the default value of the ip to be the REMOTE_ADDR if available 
# else None 
ip = remote_address 
# try to get the first non-proxy ip (not a private ip) from the 
# HTTP_X_FORWARDED_FOR 
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') 
if x_forwarded_for: 
    proxies = x_forwarded_for.split(',') 
    # remove the private ips from the beginning 
    while (len(proxies) > 0 and 
      proxies[0].startswith(PRIVATE_IPS_PREFIX)): 
     proxies.pop(0) 
    # take the first ip which is not a private one (of a proxy) 
    if len(proxies) > 0: 
     ip = proxies[0] 

return ip 

Он вернулся мне 192.168.0.10 мой локальный компьютер IP

+0

1. Прочитайте это [вопрос] [1] 2. Прочитайте документацию VM [1]: http://stackoverflow.com/questions/4581789/ how-do-i-get-user-ip-address-in-django –

+0

@AlokTiwari я уже прочитал этот пост, и я получил свое решение с этой должности. но не смог найти решение – user1958218

+1

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

ответ

1

Джанго-ipware попытки получить (клиент-х, например, браузер) публичный (исходящий от маршрута) IP-адрес, и он не может этого сделать, поэтому он возвращает «127.0.0.1» (локальный loopback, IPv4), указывающий на сбой в соответствии с его документацией (версия 0.0.1).

Это происходит, поскольку ваш сервер работает в той же (частной) сети, что и ваш собственный локальный компьютер. (192.168.x.x private block)

Вы можете перейти на версию django-ipware> = 0.0.5, которая поддерживает как IPv4 & IPv6, так и использовать его, как показано ниже.

# if you want the real IP address (public and externally route-able) 
from ipware.ip import get_real_ip 
ip = get_real_ip(request) 
if ip is not None: 
    # your server got the client's real public ip address 
else: 
    # your server doesn't have a real public ip address for user 


# if you want the best matched IP address (public and/or private) 
from ipware.ip import get_ip 
ip = get_ip(request) 
if ip is not None: 
    # your server got the client's real ip address 
else: 
    # your server doesn't have a real ip address for user 

####### NOTE: 
# A `Real` IP address is the IP address of the client accessing your server 
# and not that of any proxies in between. 
# A `Public` IP address is an address that is publicly route-able on the internet. 
Смежные вопросы