Files
2026-08-05 23:59:15 +08:00

223 lines
6.0 KiB
Markdown

# 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