# GetIPDataView Documentation ## 📄 **File Location** `api/views/GetIPDataView.py` ### **Overview** Retrieves client IP address information from various HTTP headers and server variables. This view provides comprehensive IP address detection for logging, analytics, and security purposes. ### **Class Details** ```python @permission_classes([AllowAny]) class GetIPDataView(APIView): def get(self, request): # Implementation... ``` #### **Permissions** - **Access Level**: Public (no authentication required) - **Authentication**: None (`@permission_classes([AllowAny])`) ### **Method Details** #### **GET /api/get-ip-data/** ##### **Description** Extracts and returns client IP address information from multiple sources including direct connection, proxy headers, and load balancer information. ##### **Parameters** No parameters required. ##### **Response Format** ```json { "ip_info": { "remote_addr": "string", "http_x_forwarded_for": "string", "http_x_real_ip": "string", "http_client_ip": "string", "http_x_forwarded": "string", "http_x_cluster_client_ip": "string", "http_forwarded_for": "string", "http_forwarded": "string" } } ``` ##### **Response Field Descriptions** | Field | Type | Description | |-------|------|-------------| | `remote_addr` | string | Direct connection IP address | | `http_x_forwarded_for` | string | Comma-separated list of IP addresses from proxy chain | | `http_x_real_ip` | string | Real client IP as seen by reverse proxy | | `http_client_ip` | string | Client IP from custom header | | `http_x_forwarded` | string | Forwarded header value | | `http_x_cluster_client_ip` | string | Cluster client IP header value | | `http_forwarded_for` | string | Standard forwarded for header | | `http_forwarded` | string | Standard forwarded header | ##### **Usage Examples** **Basic Usage:** ```bash curl -X GET http://your-api.com/api/get-ip-data/ ``` **Expected Response:** ```json { "ip_info": { "remote_addr": "192.168.1.100", "http_x_forwarded_for": "203.0.113.50, 198.51.100.25", "http_x_real_ip": "203.0.113.50", "http_client_ip": "", "http_x_forwarded": "", "http_x_cluster_client_ip": "", "http_forwarded_for": "", "http_forwarded": "" } } ``` **Empty Response Example:** ```json { "ip_info": { "remote_addr": "", "http_x_forwarded_for": "", "http_x_real_ip": "", "http_client_ip": "", "http_x_forwarded": "", "http_x_cluster_client_ip": "", "http_forwarded_for": "", "http_forwarded": "" } } ``` ### **Error Handling** #### **Status Codes** - **200 OK**: Request successful, returns IP information - **No explicit error handling**: Missing headers return empty strings rather than errors #### **Behavior with Missing Headers** When a specific IP header is not present: - Returns an empty string (`""`) for that field - Does not raise exceptions or return error responses - All fields are always present in the response ### **Implementation Details** #### **Code Analysis** ```python def get(self, request): ip_info = { 'remote_addr': request.META.get('REMOTE_ADDR'), 'http_x_forwarded_for': request.META.get('HTTP_X_FORWARDED_FOR'), # ... other headers } return Response({"ip_info": ip_info}, status=status.HTTP_200_OK) ``` #### **Key Features** - ✅ **Non-intrusive**: No side effects on request processing - ✅ **Comprehensive**: Checks multiple IP source headers - ✅ **Safe**: Gracefully handles missing headers - ✅ **Public access**: No authentication required - ✅ **Lightweight**: Minimal processing overhead ### **Use Cases** #### **Security & Analytics** - Log visitor IP addresses for security monitoring - Track user location patterns - Detect suspicious activity #### **Load Balancer Integration** - Extract original client IP behind proxies - Support for cloud platforms (AWS, GCP, Azure) - Works with CDN configurations #### **Debugging & Development** - Verify client connection details - Test proxy configurations - Debug network routing issues ### **⚠️ Important Notes** #### **Header Priority** The view checks headers in this order (first found takes precedence): 1. `REMOTE_ADDR` (most reliable) 2. `X-Forwarded-For` 3. `X-Real-IP` 4. `Client-Ip` 5. `X-Forwarded` 6. `X-Cluster-Client-IP` 7. `Forwarded-For` 8. `Forwarded` #### **Security Considerations** - **Trust Level**: Be cautious when trusting forwarded headers in production - **Validation**: Consider validating IP addresses before use - **Privacy**: Ensure compliance with data protection regulations #### **Performance Impact** - **Minimal**: Only reads existing request metadata - **No external calls**: Pure local operation - **Constant time**: O(1) complexity regardless of header count ### **Integration Examples** #### **Python Client** ```python import requests response = requests.get('http://api.example.com/api/get-ip-data/') if response.status_code == 200: ip_data = response.json() print(f"Client IP: {ip_data['ip_info']['remote_addr']}") ``` #### **JavaScript Frontend** ```javascript fetch('/api/get-ip-data/') .then(response => response.json()) .then(data => { console.log('IP Info:', data.ip_info); }); ``` #### **Django View Integration** ```python from django.http import JsonResponse def some_view(request): ip_view = GetIPDataView() ip_response = ip_view.get(request) # Process IP data as needed ``` ### **Testing** #### **Test Cases** 1. **Direct Connection**: Test without any proxy headers 2. **Single Proxy**: Test with X-Forwarded-For header 3. **Multiple Proxies**: Test with comma-separated IPs 4. **Mixed Headers**: Test with various header combinations 5. **Missing Headers**: Test with no relevant headers #### **Expected Behavior** - Always returns 200 status code - Always includes all 8 IP info fields - Empty strings for unavailable headers - No exceptions or error responses --- **Last Updated**: Current Session **Version**: 1.0