| 123456789101112131415161718192021222324252627 |
- from netaddr import IPAddress
- __all__ = (
- 'get_client_ip',
- )
- def get_client_ip(request, additional_headers=()):
- """
- Return the client (source) IP address of the given request.
- """
- HTTP_HEADERS = (
- 'HTTP_X_REAL_IP',
- 'HTTP_X_FORWARDED_FOR',
- 'REMOTE_ADDR',
- *additional_headers
- )
- for header in HTTP_HEADERS:
- if header in request.META:
- client_ip = request.META[header].split(',')[0]
- try:
- return IPAddress(client_ip)
- except ValueError:
- raise ValueError(f"Invalid IP address set for {header}: {client_ip}")
- # Could not determine the client IP address from request headers
- return None
|