CIDR पर्वतमाला के लिए Grepping


10

समय-समय पर मैं अपने अपाचे लॉग फ़ाइलों से CIDR पर्वतमाला को निकालना चाहता हूं। यह उन सीमाओं के लिए आसान है जो प्राकृतिक सीमाओं (/ 8, / 16 और 24) पर आते हैं, लेकिन अन्य श्रेणियों जैसे / 17 और / 25 के लिए इतना आसान नहीं है।

उदाहरण:

# 192.168.0.0/16: (easy)
grep " 192\.168\." access_log

# 192.168.128.0/17: (more thought required)
grep -E " 192\.168\.(12[89]|1[3-9][0-9]|2[0-5][0-9])\." access_log

# 192.168.0.0/17: (more thought required)
grep -E " 192\.168\.([0-9]|[0-9][0-9]|1[01][0-9]|12[0-7])\." access_log

# 192.168.128.0/18: (straining my brain)
grep -E " 192\.168\.(1[2-8][0-9]|19[01])\." access_log

ये regexes IP पते को अनदेखा करते हैं जिनमें प्रमुख शून्य शामिल होते हैं, जैसे कि 192.168.001.001, जो अपाचे लॉग फ़ाइलों में कोई समस्या नहीं है, लेकिन अन्य लॉग फ़ाइलों में हो सकता है। विशेष रूप से प्रिंटर प्रमुख शून्य को पसंद करते हैं। आरजेक्स में वैकल्पिक शून्य को जोड़ना काफी आसान है लेकिन यह पूरी बात को थोड़ा और कठिन बना देता है। एक आसान तरीका है।

क्या किसी फ़ाइल से लाइनों का चयन करने का एक आसान तरीका है जो किसी भी CIDR रेंज से मेल खाता है?

फैंसी रेगेक्स एक्सटेंशन को विभिन्न उपकरणों के रूप में माना जाएगा (जैसे कि awkया perlयदि आवश्यक हो लेकिन मैं चाहता हूं कि यह एक-लाइनर हो) यदि वे काम को आसान बनाते हैं। आदर्श रूप में, मुझे जो पसंद है वह कुछ ऐसा है

grep "[:CIDR 192.168.128.0/18:]" access_log

एक उपकरण जो CIDR रेंज को उचित रेगेक्स में परिवर्तित करता है वह भी ठीक होगा।

$ cidr2regex 192.168.0.0/18
192\.168\.(1[2-8][0-9]|19[01])\.[0-9]{1,3}

या

$ grep -E "$(cidr2regex 192.168.0.0/18)" access_log

यदि आपका उत्तर IPv6 को कवर करता है तो बोनस अंक।


1
इसके चारों ओर खोज करते हुए मुझे आईपी ​​रेंज को रीजैक्स में बदलने के लिए एक वेब-आधारित टूल मिला ।
लड्डदादा

जवाबों:


17

इसके लिए एक उपकरण है, आश्चर्यजनक रूप से grepcidr:।

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

(संस्करण 2.0 IPv6 नेटवर्क के साथ भी काम करता है)


2
अगर आपको IPv6 की कार्यक्षमता की आवश्यकता है तो कुछ भयानक रूप से हैक किया जा सकता है जिसका उपयोग नेट में किया जाता है :: Perl में CIDR ...
voretaq7

मैंने IPv4 cidr-grepping के लिए एक छोटा सा Node.js- आधारित CLI टूल भी बनाया है
मिशेल

5

हाल ही में जारी rgxgकमांड लाइन टूल नियमित अभिव्यक्ति उत्पन्न करता है जो CIDR ब्लॉक के सभी पतों से मेल खाता है:

$ rgxg cidr 192.168.128.0/18
192\.168\.(19[01]|1[3-8][0-9]|12[89])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])

या

$ rgxg cidr 2001:db8:a:b:c:d::/112
2001:0?[Dd][Bb]8:0?0?0?[Aa]:0?0?0?[Bb]:0?0?0?[Cc]:0?0?0?[Dd]((::[0-9A-Fa-f]{1,4}|::|:0?0?0?0(::|:[0-9A-Fa-f]{1,4}))|:0\.0(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){2})

अधिक जानकारी के लिए, http://rgxg.sf.net देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.