2011-05-09 7 views
6

सी # में शामिल हैं, मान लें कि आप एक आईपी पता रेंज एक स्ट्रिंग मान के रूप में प्रतिनिधित्व किया है:सी # - निर्धारित करें यदि एक आईपी पता रेंज एक विशेष पते

"192.168.1.1-192.168.2.30"

और आप भी इस तरह की स्ट्रिंग मूल्य के रूप में प्रतिनिधित्व एक ही आईपी पते है:

"192.168.1.150"

सबसे खूबसूरत रास्ता निर्धारित करने के लिए करता है, तो पता श्रेणी ही आईपी पते शामिल होगा क्या?

उत्तर

12

आईपी को 32 बिट पूर्णांक में कास्ट करें (आईपी 4 बाइट्स है, इसलिए इसे एक पूर्णांक के रूप में भी प्रदर्शित किया जा सकता है)। सीमा की जांच करने से बस यह जांच कर रहा है कि दिया गया आईपी (int) दो अन्य आईपी (2 अन्य चींटियों) के बीच है या नहीं।

if(low_range <= checked_ip <= high_range){ TRUE! } 
+0

उत्कृष्ट विचार। और आलसी के लिए, (* grin *) यहां एक SO उत्तर है जिसे इसके साथ मदद करनी चाहिए: http://stackoverflow.com/questions/461742/how-to-convert-an-ipv4-address-into-a-integer -इन-सी –

0

मैं सिर्फ अगर निर्दिष्ट आईपी पते एक पूर्व निर्धारित सीमा के अंतर्गत होता है की जाँच करने के लिए एक छोटा सा पुस्तकालय IpSet लिखा था।

var set = IpSet.ParseOrDefault("192.168.0.*,10.10.1.0/24,192.168.1.1-192.168.2.30"); 
var result = set.Contains("192.168.1.150"); // true 

आईपीवी 4 और आईपीवी 6 दोनों का समर्थन करें। समर्थन सीआईडीआर नोटेशन। अंतर्निहित कार्य आईपी पते को पूर्णांक में परिवर्तित कर देता है और उनकी तुलना करता है।

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