2009-04-21 12 views
5

this post से निम्नलिखित में मुझे आईपीवी 6 पता श्रेणी खोजने में दिलचस्पी है।आईपीवी 6 पता

आईपीवी 4 के तहत मैं एक आईएसपी द्वारा प्रदान किए गए स्टार्ट एंड एंड आईपी पते को निर्धारित करने में सक्षम हूं और उन पूर्णांक मानों का उपयोग करके सीमा सीमाओं के रूप में डेटाबेस को तुरंत खोजता हूं यह देखने के लिए कि डीबी में कोई प्रविष्टियां उस सीमा में गिर गई हैं या नहीं।

यह आईपीवी 6 द्वारा कैसे प्रभावित किया जाएगा? आईएसपी विल अभी भी श्रेणियों में IPv6 पतों है जैसे वे अब क्या? और कैसे आप कुशलतापूर्वक इन सीमाओं खोज यदि आप एक एसक्यूएल सर्वर DB में दो bigint के रूप में IPv6 पतों भंडारण किया गया होगा?

+0

निम्नलिखित धागा अपने IPv6 प्रश्न के समाधान के रूप में [@vinS] द्वारा सुझाव दिया गया था (https://stackoverflow.com/users/977855/vins): यहाँ PostgreSQL, संस्करण 8.3 के साथ एक उदाहरण है: //stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses – datv

उत्तर

8

श्रेणियों में आईपी पते (न तो आईपीवी 4, न ही आईपीवी 6) का उपयोग करना सही नहीं है। समूह के लिए सही तरीका एक विशेष IP पतों की "सीमा" प्रीफ़िक्स (CIDR संकेतन) या मास्क उपयोग कर रहा है (अप्रचलित, वैध IPv4 के लिए, और पागलपन ensues यदि आप एक गैर-निरंतर मुखौटा इस्तेमाल करने की कोशिश)।

कभी-कभी आप आईपीवी 4 श्रेणियों का उपयोग करके किसी को (कभी-कभी एप्लिकेशन, होम राउटर इत्यादि) देखेंगे, लेकिन ऐसा करने का यह गलत तरीका है।

Classless Inter-Domain Routing (CIDR) का उपयोग करके आप एक टपल < पता, उपसर्ग >, जहां पता एक 128-बिट अहस्ताक्षरित पूर्णांक है और उपसर्ग होगा एक छोटे से (0..128) अहस्ताक्षरित पूर्णांक है। उपसर्ग बताता है कि कैसे पता के कई सबसे महत्वपूर्ण बिट, नेटवर्क पते का प्रतिनिधित्व अन्य 128 उपसर्ग छोड़ने से कम-महत्वपूर्ण बिट है कि नेटवर्क में एक विशेष मेजबान प्रतिनिधित्व करने के लिए।

तो, उदाहरण के लिए, 2620 का एक आईपीवी 6 "रेंज": 0: 860: 2 ::/64 (wikimedia.org) सभी होस्टों का प्रतिनिधित्व 2620: 0: 860: 2 :: 2620: 0: 860: 2: FFFF: FFFF: FFFF: FFFF।

आपको किसी डेटाबेस में ऐसे मान को स्टोर करने के लिए दो "bigint" का उपयोग नहीं करना चाहिए, लेकिन एक एकल कॉलम में किसी भी देशी प्रतिनिधित्व का उपयोग नहीं करना चाहिए, जब तक कि आप अपने डेवलपर जीवन को एक दुःस्वप्न नहीं बनाना चाहते। इस बड़े अपने डीबीएमएस की जगह के अलावा, मैं एक निश्चित-आकार बाइनरी डेटा स्तंभ, 16 बाइट्स लंबे उपयोग करने का सुझाव आपके डीबीएमएस पूर्णांकों का समर्थन नहीं करता।

4

आईपीवी 6 पते के लिए उचित समर्थन के साथ एक डीबीएमएस का उपयोग करना विचार खराब नहीं होगा। https:

mydb=> CREATE TABLE Networks (name TEXT, prefix INET); 
CREATE TABLE 
mydb=> INSERT INTO Networks VALUES ('Documentation', '2001:DB8::/32'); 
INSERT 0 1 
mydb=> INSERT INTO Networks VALUES ('ULA', 'FC00::/7'); 
INSERT 0 1 
mydb=> INSERT INTO Networks VALUES ('Orchid', '2001:10::/28'); 
INSERT 0 1 

mydb=> SELECT * FROM Networks; 
name  | prefix  
---------------+--------------- 
Documentation | 2001:db8::/32 
ULA   | fc00::/7 
Orchid  | 2001:10::/28 
(3 rows) 

mydb=> SELECT * FROM Networks WHERE '2001:DB8::dcaf:BAD' << prefix; 
name  | prefix  
---------------+--------------- 
Documentation | 2001:db8::/32 
(1 row) 
+1

PostgreSQL के लिए अच्छी उपलब्धि। केवल स्विचिंग डीबीएमएस के हाथ ताली की तरह ही आसान थे, तो :) –

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