یک پکیج حرفهای Django برای شناسایی و مدیریت IP کاربران، با پشتیبانی ویژه از شبکههای ایرانی و CDNهای محلی.
- ✅ شناسایی خودکار IP از هدرهای مختلف (Arvancloud، Cloudflare، و...)
- ✅ پشتیبانی از CDNهای ایرانی (ابرآروان، دراک)
- ✅ Fallback به سرویسهای خارجی در صورت عدم دسترسی به هدر
- ✅ کش هوشمند برای کاهش درخواستهای API
- ✅ شناسایی IPهای ایرانی
- ✅ Geolocation و شناسایی ISP
- ✅ Rate limiting بر اساس IP
- ✅ اعتبارسنجی IP
- ✅ پشتیبانی کامل از IPv4
- ✅ Middleware آماده برای Django
- ✅ سازگار با Django 4.2+ و Python 3.10+
pip install django-iran-ipیا با Poetry:
poetry add django-iran-ip# settings.py
INSTALLED_APPS = [
# ...
'django_iran_ip',
]# settings.py
MIDDLEWARE = [
# ...
'django_iran_ip.contrib.django.middleware.IranIPMiddleware',
]from django.http import JsonResponse
def my_view(request):
client_ip = request.client_ip
return JsonResponse({
'ip': client_ip,
'is_valid': request.client_ip_valid,
'type': request.client_ip_type,
'is_iran': getattr(request, 'is_iran_ip', None),
})from django_iran_ip.contrib.django.utils import get_client_ip
def my_view(request):
client_ip = get_client_ip(request)
return JsonResponse({'ip': client_ip})# settings.py
# استراتژیهای شناسایی IP (به ترتیب اولویت)
IRAN_IP_STRATEGIES = [
'django_iran_ip.core.strategies.HeaderStrategy',
'django_iran_ip.core.strategies.ServiceStrategy',
]
# سرویسهای خارجی برای دریافت IP
IRAN_IP_SERVICE_URLS = [
"https://api.ipify.org",
"https://ifconfig.me/ip",
"https://icanhazip.com",
]
# استفاده از سرویسهای ایرانی
IRAN_IP_USE_IRAN_SERVICES = True
# فعالسازی کش
IRAN_IP_ENABLE_CACHE = True
IRAN_IP_CACHE_DURATION = 3600 # 1 ساعت
# تایماوت درخواستها
IRAN_IP_REQUEST_TIMEOUT = 3.0
# اعتبارسنجی IP
IRAN_IP_VALIDATE_IP = True
# بررسی IP ایرانی
IRAN_IP_CHECK_IRAN_IP = True
# مسدود کردن IPهای غیر ایرانی (اختیاری)
IRAN_IP_BLOCK_NON_IRAN_IP = False
# فعالسازی Geolocation
IRAN_IP_ENABLE_GEOLOCATION = True
# سطح لاگ
IRAN_IP_LOG_LEVEL = 'INFO' # DEBUG, INFO, WARNING, ERROR
# اولویت هدرها
IRAN_IP_HEADER_PRIORITY = [
'HTTP_AR_REAL_IP', # ابرآروان
'HTTP_X_REAL_IP', # دراک
'HTTP_CF_CONNECTING_IP', # کلودفلر
'HTTP_X_FORWARDED_FOR',
'REMOTE_ADDR',
]از نسخه 0.2.0، این پکیج به مکانیزم پیشرفته Chain of Trust مجهز شده است تا از حملات جعل IP (IP Spoofing) جلوگیری کند.
- ✅ تشخیص هوشمند IP واقعی حتی در پشت Cloudflare، ArvanCloud و Load Balancerها.
- ✅ قابلیت تعریف
TRUSTED_PROXIESبرای امنیت حداکثری. - ✅ الگوریتم Right-to-Left برای نادیده گرفتن هدرهای جعلی (
X-Forwarded-For).
📖 برای مطالعه مستندات کامل امنیتی و نحوه پیکربندی، اینجا کلیک کنید
from django_iran_ip.core.validators import IranIPChecker
checker = IranIPChecker()
is_iran = checker.is_iran_ip("5.22.10.20") # True
print(f"IP is from Iran: {is_iran}")from django_iran_ip.core.validators import IPGeolocation
geo = IPGeolocation()
info = geo.get_location("8.8.8.8")
print(info)
# {
# 'country': 'United States',
# 'country_code': 'US',
# 'city': 'Mountain View',
# 'isp': 'Google LLC',
# 'timezone': 'America/Los_Angeles'
# }from django_iran_ip.core.validators import IPValidator
validator = IPValidator()
print(validator.is_valid_ipv4("192.168.1.1")) # True
print(validator.is_private_ip("192.168.1.1")) # True
print(validator.get_ip_type("8.8.8.8")) # "public"from django_iran_ip.core.resolver import IPResolver
from django_iran_ip.core.strategies import HeaderStrategy, ServiceStrategy
# استفاده از استراتژی خاص
resolver = IPResolver(strategies=[
HeaderStrategy(),
ServiceStrategy(timeout=5.0)
])
ip = resolver.get_client_ip(request)from django_iran_ip.core.resolver import IPResolver
resolver = IPResolver()
info = resolver.get_client_info(request)
print(info)
# {
# 'ip': '5.22.10.20',
# 'strategy_used': 'HeaderStrategy',
# 'is_valid': True
# }# settings.py
MIDDLEWARE = [
'django_iran_ip.contrib.django.middleware.IranIPLoggingMiddleware',
# ...
]# settings.py
MIDDLEWARE = [
'django_iran_ip.contrib.django.middleware.IranIPRateLimitMiddleware',
# ...
]
# تنظیمات Rate Limit
IRAN_IP_RATE_LIMIT = 100 # تعداد درخواست
IRAN_IP_RATE_PERIOD = 3600 # بازه زمانی (ثانیه)from django.http import HttpResponseForbidden
from django_iran_ip.core.validators import IranIPChecker
def iran_only_view(request):
checker = IranIPChecker()
if not checker.is_iran_ip(request.client_ip):
return HttpResponseForbidden("فقط کاربران ایرانی مجاز هستند")
return render(request, 'template.html')def user_info_view(request):
context = {
'ip': request.client_ip,
'is_iran': getattr(request, 'is_iran_ip', False),
'geo': getattr(request, 'client_geo', {}),
}
return render(request, 'user_info.html', context)- ✅ ابرآروان (Arvancloud)
- ✅ دراک (Derak)
- ✅ کلودفلر (Cloudflare)
- ✅ Akamai
- ✅ و سایر CDNهای استاندارد
- بررسی کنید Middleware به درستی اضافه شده است
- سطح لاگ را به
DEBUGتغییر دهید:IRAN_IP_LOG_LEVEL = 'DEBUG'
- در لاگها بررسی کنید کدام استراتژی در حال اجرا است
اولویت هدرها را بررسی کنید. برای CDNهای ایرانی:
IRAN_IP_HEADER_PRIORITY = [
'HTTP_AR_REAL_IP', # ابرآروان را اول قرار دهید
'HTTP_X_REAL_IP',
'HTTP_CF_CONNECTING_IP',
'REMOTE_ADDR',
]مشارکتها همیشه خوشآمد هستند! لطفاً:
- مخزن را Fork کنید
- یک branch جدید بسازید (
git checkout -b feature/amazing-feature) - تغییرات خود را commit کنید (
git commit -m 'Add amazing feature') - به branch خود push کنید (
git push origin feature/amazing-feature) - یک Pull Request باز کنید
MIT License - برای جزئیات بیشتر فایل LICENSE را ببینید.
- 📧 Email: takishayan@icloud.com
- 🐛 Issues: GitHub Issues
- 📖 Documentation: Full Documentation
- اولین انتشار
- پشتیبانی از شناسایی IP از هدرهای مختلف
- Fallback به سرویسهای API
- پشتیبانی از CDNهای ایرانی
- کش هوشمند
- Middleware آماده
ساخته شده با ❤️ برای جامعه توسعهدهندگان ایرانی