2013-03-12 31 views
6

के लिए आईपी पता श्रेणी दो बिगिनट में कनवर्ट करें मैं एक परियोजना पर काम कर रहा हूं जिसमें हमें IP Address lookups करने की आवश्यकता है। इसलिए इसके लिए हमें डेटासेट मिल गए हैं जो नीचे दिखेगा और अब अगले चरण MySql table में इस डेटासेट (एक सीएसवी फ़ाइल हो सकता है) को पॉप्युलेट करना है।तेजी से लुकअप

मैं बजाय तालिका में IP Address भंडारण के रूप में एक ऐसा करने का डाटाबेस में START_IP_NUM और END_IP_NUMBIGINT के रूप में स्टोर करने के लिए योजना बना रहा हूँ: - नीचे डाटासेट उदाहरण columns-

ip_address  country region city   metro-code latitude longitude postal-code country-code region-code city-code continent-code country-code 

24.32.116.116 usa  tx clarksville 623   33.6103 -95.0498 75426   840   44    34918   6   us 
65.29.108.232 usa  mi novi   505   42.4637 -83.4604 48375   840   23    4339    6   us 
66.169.99.69 usa  tx ft worth  623   32.7016 -97.3823 76109   840   44    771    6   us 
72.70.100.111 usa  ma peabody  506   42.5332 -70.9726 1960    840   22    1392    6   us 
174.252.116.137 usa  va oakton   511   38.8892 -77.3222 22124   840   47    3860    6   us 
68.55.144.242 usa  md pasadena  512   39.1276 -76.5125 21122   840   21    4358    6   us 
174.252.83.27 usa  pa lancaster  566   40.0459 -76.3542 17603   840   39    333    6   us 
174.78.192.31 usa  ga warner robins 503   32.5958 -83.6384 31088   840   11    5052    6   us 
98.192.146.235 usa  fl panama city 656   30.1804 -85.5598 32404   840   10    671    6   us 
71.192.181.20 usa  ma springfield 543   42.1187 -72.5483 1109    840   22    967    6   us 
76.183.54.227 usa  tx dallas   623   32.7202 -96.6769 75217   840   44    77    6   us 
69.62.143.140 usa  ca granite bay 862   38.7442 -121.191 95746   840   5    49451   6   us 
69.142.76.32 usa  nj penns grove 504   39.707  -75.4467 8069    840   31    2335    6   us 
70.173.54.93 usa  nv las vegas  839   36.2059 -115.225 89108   840   29    173    6   us 
98.242.8.222 usa  ca fresno   866   36.7968 -119.883 93722   840   5    19    6   us 

समस्या वक्तव्य युक्त एक बिगिनट के खिलाफ लुकअप एक स्ट्रिंग (बिंदीदार आईपी नोटेशन) की तुलना में कहीं अधिक तेज़ है। जैसे मैक्समिंड के लिए हमारे पास डेटाबेस सेटअप है।

तो मेरा सवाल है कि हमारे पास Java Program अलग होगा जो MySQL तालिका में उपरोक्त डेटासेट को पॉप्युलेट करेगा। इसलिए मैं डिवाइस के लिए तर्क किसी प्रकार का जो की तरह में ऊपर डेटासेट में बदल सकते हैं below-

start_ip_num 
end_ip_num 
country 
region 
city   
metro-code 
latitude  
longitude 
postal-code 
country-code  
region-code 
city-code 
continent-code 
country-code 

मैं एक आईपी पता कर रहा हूँ दिया भ्रमित जरूरत है कैसे करना चाहिए मैं डिवाइस start_ip_num और यहाँ end_ip_num और यह MySql table में संग्रहीत करते हैं। जैसा कि एक फ़ाइल होगी, मुझे लगता है कि ऊपर की तरह डेटासेट होंगे और फिर मुझे उस फ़ाइल और डिवाइस को आईपी एड्रेस को दो बिगिनट में बदलने और इसे MySQL तालिका में स्टोर करने के लिए कुछ प्रकार के तर्क को पढ़ने की आवश्यकता है।

और इसे MySQL डेटाबेस में संग्रहीत करने के बाद। मैं MySql-

में इस तरह देखने कुछ कर सकते हैं
SELECT country 
FROM geoip 
WHERE 
INET_ATON('174.36.207.186') BETWEEN start_ip_num AND end_ip_num 
LIMIT 1 

अद्यतन: -

मान लीजिए मैं प्रारूप मैं उपर्युक्त के साथ एक पाठ फ़ाइल में 100,000 IP Addresses तरह Thousands IP Address की जोड़ी के आसपास की है।

अब मेरा मुख्य उद्देश्य IP Address lookup करना है। इस IP Address के अनुरूप मुझे अन्य सभी आवश्यक फ़ील्ड प्राप्त करें।

इसलिए यह काम करने के लिए, मैं शुरुआत में टेक्स्ट फ़ाइल डेटा को डंप करने की योजना बना रहा था क्योंकि यह MySql table में है। तो MySQL तालिका में IP Address कॉलम और अन्य कॉलम होंगे जैसा कि मैंने उपरोक्त उदाहरण में किया है। लेकिन स्ट्रिंग पर एक लुकअप करना महंगा है।

तो मैंने सोचा कि मैं start_ip_num और end_ip_num रेंज में उन लोगों के आईपी एड्रेस को बदलने और उसके बाद MySql table में डेटा डंप चाहिए तो अब यह इस-

start_ip_num 
end_ip_num 
country 
region 
city   
metro-code 
latitude  
longitude 
postal-code 
country-code  
region-code 
city-code 
continent-code 
country-code 

कुछ इस प्रकार दिखाई और होगा अब अगर मैं लुकअप करने की जरूरत है

SELECT country 
FROM geoip 
WHERE 
INET_ATON('174.36.207.186') BETWEEN start_ip_num AND end_ip_num 
LIMIT 1 

तो है- सवाल को देखते हुए एक Text file जो वाई -, मैं इस SQL query मेरी WebService eventually में एम्बेडेड हो सकता है IP Addresses और IP Address से संबंधित अन्य फ़ील्ड की सूची मुझे इस तरह से मालिश कैसे करनी चाहिए ताकि मैं ऊपर वर्णित प्रारूप में MySQL में उसी डेटासेट को start_ip_num और end_ip_num, country और अन्य फ़ील्ड में संग्रहीत कर सकूं।

असल में मैं डेटाबेस के पैटर्न का पालन करने की कोशिश कर रहा हूं जैसे कि मैक्समिंड वर्तमान में है। उनके पास start_ip_num और end_ip_num और अन्य फ़ील्ड भी हैं। और जब आपको लुकअप करने की ज़रूरत होती है तो आप INET_ATON का उपयोग करके आईपी एड्रेस को BIGINT में परिवर्तित करके ऊपर वर्णित एसक्यूएल पर लुकअप आधार पर कर सकते हैं।

+4

इसे एक पूर्णांक के रूप में क्यों स्टोर न करें? आईपीवी 4 पते 8 बाइट्स से अधिक नहीं होने की गारंटी है। – Makoto

+6

@ मकोटो मैं कहूंगा कि आईपीवी 4 पते 4 बाइट होने की गारंटी है। – PSIAlt

+0

मैंने आईपीवी 4 और 4 बाइट्स के साथ सुझाव दिया है, लेकिन ... शायद नए एप्लिकेशन में आईपीवी 6 समर्थन होना अच्छा होगा? – Kamil

उत्तर

1

IPv4 पतों इस तर्क

Result = (A<<24) | (B<<16) | (C<<8) | D 
साथ 4 संख्या, जिनमें से प्रत्येक 0 से लेकर कर सकते हैं ... 255

आप एक 32 बिट पूर्णांक के लिए एक भाषण एबीसीडी परिवर्तित (या BigInt अगर आप पसंद करते हैं) को शामिल कर सकते हैं

जहां ए, बी, सी, डी पूर्णांक हैं। यह वह तरीका है जिसका हम उपयोग करते हैं, और मुझे लगता है कि यह मूल रूप से मैक्समिंड के खिलाफ भी परीक्षण किया गया था। (क्षमा करें अगर वास्तव में जावा उदाहरण नहीं है)

+0

धन्यवाद लेकिन start_ip_num और end_ip_num कैसे प्राप्त करें। मैं ऊपर दिए गए उदाहरण से आईपीएड्रेस के लिए केवल एक ही बिगिन प्राप्त कर सकता हूं? लेकिन start_ip_num और end_ip_num की श्रेणियां कैसे हैं? वह मुझे भ्रमित कर रहा है। – ferhan

0

आप एक आईपीएड्रेस और दुनिया में इसके भौतिक स्थान के बीच कुछ प्रकार के कठिन संबंध बनाने लगते हैं। उदाहरण के लिए, यदि दो करीबी से संबंधित आईपीएड्रेस न्यूयॉर्क से हैं, तो इन दो आईपीएड्रेससे के बीच मूल्य के साथ किसी भी आईपीएड्रेससे को न्यूयॉर्क से भी होना चाहिए; सही?

गलत!

दुनिया भर में आईपी पते का वितरण पूरी तरह से मनमाना है और आईपी पते आमतौर पर देश, जिला, बड़ी कंपनी, आदि के लिए ब्लॉक में वितरित किए जाते हैं; इसके बाद क्या होता है मनमाना कम या ज्यादा होता है। उदाहरण के लिए, माइक्रोसॉफ्ट और Google जैसी बड़ी कंपनियों के पास आईपी पते के अपने ब्लॉक हैं; हालांकि, वे इसके साथ क्या करते हैं पूरी तरह से मनमानी है और माइक्रोसॉफ्ट एक आईपी पते के साथ क्या करना चुनता है, अगले या पिछले पते से बिल्कुल अलग हो सकता है। यह भी संभव है कि एक आईपी पता अगले दिन एक देश और दूसरे देश की तरफ इशारा करेगा क्योंकि नेटवर्क टोपोलॉजी में बदलाव आया है।

किसी आईपी पते और उसके भौतिक स्थान के बीच संबंध बनाना एक बहुत ही व्यापक डेटाबेस की आवश्यकता है और यहां तक ​​कि इस मामले में, त्रुटियों और दैनिक परिवर्तनों के लिए बहुत प्रवण है। यहां तक ​​कि Google द्वारा उपयोग किया जाने वाला डेटाबेस शायद त्रुटियों से भरा हुआ है; अपने व्यापक डेटा को तुच्छ जानता है।

0

आपके पास आईपी पते में कच्चा डेटा है और आप इसे रेंज प्रारूप में प्रतिनिधित्व करना चाहते हैं। यहां फ़्लोचार्ट है कि इसे कैसे काम करना चाहिए।

1) आईपी नंबर 2 करने के लिए सभी आईपी पते कन्वर्ट) 3 आरोही आईपी नंबर पर क्रमबद्ध) रिकॉर्ड के माध्यम से स्कैन और एक ही शहर के साथ रिकॉर्ड सेक

उदाहरण के लिए, आईपी 1 और आईपी 2 शहर में एक्स है आप इसे 1,2, एक्स के रूप में प्रतिनिधित्व कर सकते हैं।

धारणा यहां है कि आपके पास लगभग सभी आईपी पते हैं। यदि 2 संख्याओं के बीच कोई गुम अंतर है, तो आपको यह मानना ​​होगा कि यह उसी शहर एक्स से है। उदाहरण के लिए, आईपी 1 और आईपी 3 शहर एक्स में है, आप एक्स में आईपी 2 भी मान रहे हैं। 1,3, एक्स।

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