2011-09-26 14 views
5

मेरे पास एक आईपी है: 12.12.12.12
मैं विभिन्न आईपी श्रेणियों (12.12.12.0/24 (उदाहरण) में) प्रारूप के माध्यम से लूपिंग कर रहा हूं, और यह देखने की कोशिश कर रहा हूं कि आईपी चालू है या नहीं क्षेत्र।
मैंने विभिन्न विधियों जैसे कि inet_addr और तुलना करने की कोशिश की है लेकिन मुझे यह प्रतीत नहीं होता है।
क्या ऐसा करने का कोई आसान तरीका है? मैं विंडोज का उपयोग कर रहा हूँ।आईपी सीआईडीआर रेंज में

+0

संबंधित: http://stackoverflow.com/questions/1507579/how- कर सकते हैं-ए-निर्धारित-कि-उपयोगकर्ता के आईपी पते का-है-इन-सुलभ दूरी या नहीं –

+0

पीएचपी है यही कारण है कि, जैसा कि आप टैग मैं उपयोग कर रहा हूँ से देख सकते हैं सी ++ – seth

उत्तर

6

बस परीक्षण करते हैं कि:

(ip & netmask) == (range & netmask) 

आप नेटमास्क निर्धारित कर सकते हैं से सीआईडीआर पैरामीटर range/netbits इस प्रकार है:

uint32_t netmask = ~(~uint32_t(0) >> netbits); 
+1

एक 'ntohl' रूपांतरण की आवश्यकता हो सकती है। – KillianDS

+0

@ किलियनडीएस: मुझे लगता है कि पार्सिंग प्रक्रिया स्थानीय बाइट ऑर्डर में एक पता उत्पन्न करती है, लेकिन आप सही हैं, यह दोबारा जांच करने के लिए कुछ है, खासकर जब से 'inet_addr' नेटवर्क बाइट ऑर्डर देता है। –

+0

क्या आप यहां कुछ गलत देखते हैं? हर एक के लिए प्रिंट करने लगता है: 'int cidr = atoi (cdrbuf); \t \t अहस्ताक्षरित लंबे ulstart = ntohl (inet_addr (क्लिप)); \t \t अहस्ताक्षरित लंबे ulcheck = ntohl (inet_addr ("12.12.12.12")); \t \t अहस्ताक्षरित लंबे नेटमास्क = ~ अहस्ताक्षरित लंबे (~ 0ULL >> CIDR); \t \t अगर ((ulcheck और नेटमास्क) == (CIDR और नेटमास्क)) \t \t \t printf ("% s \ n", PCH); ' – seth

2

द्विआधारी प्रतिनिधित्व ले लो और बाहर शून्य क्या अपने नेटवर्क मुखौटा मिलान नहीं है।

स्पष्टीकरण: मान लीजिए कि आप आईपी a.b.c.d है और e.f.g.h/i करने के लिए इसे फिर से मेल करना चाहते हैं, तो आप एक अहस्ताक्षरित पूर्णांक, uint32_t ip = a<<24 + b<<16 + c<<8 + d में आईपी फेंक और uint32_t range = e<<24 + f<<16 + g<<8 + h साथ भी ऐसा ही कर सकते हैं। अब आप अपने नेटवर्क मास्क का उपयोग कर सकते हैं: uint32_t mask = (~0u) << (32-i)। अब, आप आसानी से जांच सकते हैं कि iprange की तुलना करके "ip & mask == range & mask" है।

+0

यात्रा जाहिर एक के खिलाफ परीक्षण से आता है श्रेणियों की पूरी गड़बड़ी। –

+0

@ बेन वोगेट: मुझे इसे याद करना होगा। आप सही हे। ऐसा करने से पहले – bitmask

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