MySQL

2017-05-08 5 views
8

में आईपी रेंज से सीआईडीआर का चयन करें मेरे पास आईपी रेंज की एक तालिका है और मुझे किसी विशिष्ट देश के लिए अस्वीकार करने के लिए नेटवर्क की एक सूची उत्पन्न करने की आवश्यकता है।MySQL

तो मैं इसका उपयोग करके अपने डीबी से आईपी श्रेणियों की एक सूची उत्पन्न कर सकता हूं।

SELECT 
     ip_from, 
     Inet_ntoa(ip_from), 
     ip_to, 
     Inet_ntoa(ip_to) 
FROM 
     ip_address_data 
WHERE 
     country_code = 'XX' 
LIMIT 1 

जो इस परिणाम

ip_from  inet_ntoa(ip_from) ip_to  inet_ntoa(ip_to) 
16777472 1.0.1.0    16778239 1.0.3.255 

उत्पन्न करता है लेकिन मैं सीआईडीआर प्रारूप में है कि उत्पादन की जरूरत है और कभी कभी सीमा से अधिक पंक्तियां इस तरह लौटा दी जाएगी।

1.0.1.0/24 
1.0.2.0/23 

क्या कोई चुनिंदा कथन का उपयोग करके इन्हें गतिशील रूप से उत्पन्न करने का कोई तरीका है? यह वाक्यविन्यास भयानक होगा लेकिन मुझे लगता है कि यह एक संग्रहित प्रक्रिया होनी चाहिए यदि यह इनपुट इनपुट प्रति एक से अधिक आउटपुट पंक्ति वापस करने जा रहा है।

SELECT 
    CONCAT('/sbin/route add -net ', CONVERT_TO_CIDR(ip_from,ip_to), ' reject;') AS command 
FROM 
    ip_info.ip_address_data 
WHERE 
    country_code='XX' 
+1

डाउनवोट क्यों? आपका कारण काम नहीं करता है। मैं राय की तलाश नहीं कर रहा हूं यह एक साधारण गणित समस्या है जिसे मुझे सहायता चाहिए। – jbrahy

+0

यह वार्तालाप http://stackoverflow.com/questions/595748/is-there-way-to-match-ip-with-ipcidr-straight-from-select-query?rq=1 –

उत्तर

3

रूपांतरण करने के लिए यहां एक पाइथन लिपि है। बस इसे एक संग्रहीत प्रक्रिया में बदलने की जरूरत है।

Conversion from IP Range to CIDR Mask

+0

धन्यवाद, यह सहायक लग सकता है । – jbrahy

+0

हमें बताएं कि एसपी की तुलना पाइथन से कितनी लाइनों की तुलना में की जाती है। –