1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- import re
- import warnings
-
-
- # this is not intended to be an all-knowing IP address regex
- IP_RE = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
-
-
- def get_ip(request):
- """
- Retrieves the remote IP address from the request data. If the user is
- behind a proxy, they may have a comma-separated list of IP addresses, so
- we need to account for that. In such a case, only the first IP in the
- list will be retrieved. Also, some hosts that use a proxy will put the
- REMOTE_ADDR into HTTP_X_FORWARDED_FOR. This will handle pulling back the
- IP from the proper place.
-
- **NOTE** This function was taken from django-tracking (MIT LICENSE)
- http://code.google.com/p/django-tracking/
- """
-
- # if neither header contain a value, just use local loopback
- ip_address = request.META.get('HTTP_X_FORWARDED_FOR',
- request.META.get('REMOTE_ADDR', '127.0.0.1'))
- if ip_address:
- # make sure we have one and only one IP
- try:
- ip_address = IP_RE.match(ip_address)
- if ip_address:
- ip_address = ip_address.group(0)
- else:
- # no IP, probably from some dirty proxy or other device
- # throw in some bogus IP
- ip_address = '10.0.0.1'
- except IndexError:
- pass
-
- return ip_address
-
-
- class RemovedInHitCount13Warning(DeprecationWarning):
- pass
-
- # enable warnings by default for our deprecated
- warnings.simplefilter("default", RemovedInHitCount13Warning)
|