2016-05-04 5 views
8

क्या django में ALLOWED_HOSTS आईपी की एक श्रृंखला सेट करने का कोई तरीका है?Django ALLOWED_HOSTS आईपी रेंज

कुछ इस तरह:

ALLOWED_HOSTS = ['172.17.*.*'] 
+1

के बारे में मैं "हाँ" जवाब देने के लिए था, लेकिन कुछ गूगल खुदाई की और एक विशिष्ट उदाहरण नहीं मिला जहां किसी ने यह किया है। [डॉक्स] (https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts) के अनुसार, आप सूची में एकमात्र वाइल्डकार्ड का उपयोग कर सकते हैं, जैसे 'ALLOWED_HOSTS = ['*'] ', (सुरक्षा कारणों से अनुशंसित नहीं है) लेकिन मैंने अभी तक आपके उदाहरण की तरह कुछ भी नहीं देखा है। मैं अभी भी "हां" की ओर झुका रहा हूं लेकिन जब तक मैं इसे स्पष्ट रूप से बताते हुए एक संदर्भ नहीं देखता तब तक मैं असुविधाजनक रहूंगा। यह एक बेवकूफ सवाल हो सकता है, लेकिन क्या आपने यह देखने की कोशिश की है कि क्या यह django में कोई त्रुटि उठाएगा? – Nez

+0

इसे वेब सर्वर पर ऑफ़लोड करना बेहतर होगा जो इसे कुशलतापूर्वक संभालने के लिए बनाया गया था। या यहां तक ​​कि फ़ायरवॉल नियम भी सेट अप कर सकते हैं, एक ट्रैफिक ढेर में उच्च बेहतर फ़िल्टर किया जा सकता है। – serg

+0

@Nez, हाँ मैं करता हूं। नीचे मेरा जवाब देखें। मुझे इस समस्या का समाधान मिला। –

उत्तर

7

के लिए मैं Django पर एक टिकट तैनात हालांकि मैं दिखाया गया था इस निम्नलिखित

from socket import gethostname, gethostbyname 
ALLOWED_HOSTS = [ gethostname(), gethostbyname(gethostname()), ] 

https://code.djangoproject.com/ticket/27485

+0

विंडोज 10 के लिए पतन निर्माता अद्यतन ने मेरे लिए यह विधि तोड़ दी, क्योंकि 'gethostname()' इसके बजाय हाइपर-वी ईथरनेट स्विच पता लौटा रहा था। आप 'ALLOWED_HOSTS = [gethostname(),] + gethostbyname_ex (gethostname()) [2] 'का उपयोग कर सकते हैं। –

4

नहीं, यह वर्तमान में संभव नहीं है। the docs के अनुसार, निम्न सिंटैक्स समर्थित है:

['www.example.com'] # Fully qualified domain 
['.example.com'] # Subdomain wildcard, matches example.com and www.example.com 
['*'] # Matches anything 

आप validate_host विधि के क्रियान्वयन को देखें, तो आप देख सकते हैं कि * वाइल्डकार्ड के रूप में उपयोग करते हुए समर्थित नहीं है। आईपी ​​की छानने श्रृंखला के लिए इस तरह के समाधान

+0

आह, धन्यवाद। मैं कोड के माध्यम से पढ़ने के लिए पर्याप्त कठिन नहीं देख रहा था। – Nez

2

मैंने पाया:

https://stackoverflow.com/a/36222755/3766751

इस दृष्टिकोण का उपयोग करते हुए हम किसी भी तरह (regex के साथ उदा) द्वारा आईपी फ़िल्टर कर सकते हैं।

from django.http import HttpResponseForbidden 

class FilterHostMiddleware(object): 

    def process_request(self, request): 

     allowed_hosts = ['127.0.0.1', 'localhost'] # specify complete host names here 
     host = request.META.get('HTTP_HOST') 

     if host[len(host)-10:] == 'dyndns.org': # if the host ends with dyndns.org then add to the allowed hosts 
      allowed_hosts.append(host) 
     elif host[:7] == '192.168': # if the host starts with 192.168 then add to the allowed hosts 
      allowed_hosts.append(host) 

     if host not in allowed_hosts: 
      raise HttpResponseForbidden 

     return None 

धन्यवाद @Zorgmorduk

1

यहां एक त्वरित और ऐसा करके प्राप्त किया जा सकता गंदा समाधान

ALLOWED_HOSTS + = [के लिए मैं सीमा में j (256) के लिए सीमा (256) में '172.17।% S।% S'% (i, j)]

संबंधित मुद्दे