
बड़ी URL सूचियों को फ़िल्टर और डीडुप्लिकेट करें — स्टैटिक एक्सटेंशन, अवांछित कीवर्ड, IDs, भाषा संस्करण और पैरामीटर हटाकर, वेब रिकॉनिसेंस के लिए स्वच्छ एंडपॉइंट सेट तैयार करें।
यह URL सूचियों को डी-क्लटर (de-clutter) करने के लिए उपयोग किया जाने वाला एक टूल है। शुरुआती बिंदु के रूप में, मैंने Somdev Sangwan द्वारा बनाए गए शानदार टूल uro को आधार बनाया। लेकिन मैं कुछ चीज़ें बदलना चाहता था, कुछ सुधार करना चाहता था (जैसे GUIDs से निपटना) और इसे और अधिक अनुकूलन योग्य बनाना चाहता था।
urless Python 3 को सपोर्ट करता है।
urless को डिफ़ॉल्ट (ग्लोबल) python वातावरण में इंस्टॉल करें।
pip install urless
या
pip install git+https://github.com/xnl-h4ck3r/urless.git -v
आप इसे इसके साथ अपग्रेड कर सकते हैं:
pip install --upgrade urless
pipx का उपयोग करके पृथक (isolated) python वातावरण में त्वरित सेटअप:
pipx install git+https://github.com/xnl-h4ck3r/urless.git
आप मूल रूप से URL की एक सूची इनपुट करते हैं (किसी फ़ाइल से, या STDIN से पाइप करके), और एक डी-क्लटर की गई फ़ाइल या URLs प्राप्त करते हैं। लेकिन वे किस तरह से डी-क्लटर की जाती हैं? मैं इसे नीचे समझाऊँगा, लेकिन पहले यहाँ कुछ शब्द दिए गए हैं जिनका उपयोग किया जाएगा:
-fe के साथ पास किया जा सकता है, config.yml में FILTER_EXTENSIONS के साथ निर्दिष्ट किया जा सकता है, या यदि इनमें से कोई भी मौजूद नहीं है, तो .css,.ico,.jpg,.jpeg,.png,.bmp,.svg,.img,.gif,.mp4,.flv,.ogv,.webm,.webp,.mov,.mp3,.m4a,.m4p,.scss,.tif,.tiff,.ttf,.otf,.woff,.woff2,.bmp,.ico,.eot,.htc,.rtf,.swf,.image की एक डिफ़ॉल्ट सूची।-fk के साथ पास किया जा सकता है, config.yml में FILTER_KEYWORDS के साथ निर्दिष्ट किया जा सकता है, या यदि इनमें से कोई भी मौजूद नहीं है, तो blog,article,news,bootstrap,jquery,captcha,node_modules की एक डिफ़ॉल्ट सूची।config.yml में LANGUAGE के साथ निर्दिष्ट किया जा सकता है, या यदि यह मौजूद नहीं है, तो सबसे सामान्य कोड en,en-us,en-gb,fr,de,pl,nl,fi,sv,it,es,pt,ru,pt-br,es-mx,zh-tw,js.ko की एक डिफ़ॉल्ट सूची।यहाँ बताया गया है कि क्या होता है:
-dp/--disregard-params तर्क पास किया गया था:
REMOVE_PARAMS में निर्दिष्ट अवांछित पैरामीटर हैं (या तर्क -rp/--remove-params के साथ ओवरराइड किए गए हैं), तो प्रोसेसिंग से पहले उन्हें सभी URLs से हटा दिया जाएगा।-rcid/--regex-custom-id पास किया जाता है और URL पाथ में कस्टम ID है, तो कस्टम ID regex का केवल एक मैच शामिल किया जाएगा यदि कई URLs हैं जहाँ यही एकमात्र अंतर है।-lang तर्क पास किया जाता है और URL में भाषा कोड है (जैसे en-gb), तो केवल एक भाषा कोड शामिल किया जाएगा यदि कई URLs हैं जहाँ भाषा कोड अलग है।cat target_urls.txt | urless
या
urless -i target_urls.txt
cat target_urls.txt | urless > output.txt
या
urless -i target_urls.txt -o output.txt
config.yml फ़ाइल में कुंजियाँ हैं जिन्हें आपकी आवश्यकताओं के अनुसार अपडेट किया जा सकता है:
FILTER_KEYWORDS - अल्पविराम से अलग की गई कीवर्ड की सूची (जैसे blog,article,news आदि) जिनके विरुद्ध URLs को कुछ परिस्थितियों में जाँचा जाता है।FILTER_EXTENSIONS - अल्पविराम से अलग की गई फ़ाइल एक्सटेंशन की सूची (जैसे .css,.jpg,.jpeg आदि) जिनके विरुद्ध सभी URLs को जाँचा जाता है। यदि किसी URL में इनमें से कोई भी स्ट्रिंग शामिल है तो इसे आउटपुट से बाहर कर दिया जाएगा।LANGUAGE - अल्पविराम से अलग की गई भाषा कोड की सूची (जैसे en-gb,fr,nl आदि) जिनके विरुद्ध सभी URLs को तब जाँचा जाता है जब -lang तर्क पास किया जाता है। यदि विभिन्न भाषा कोड वाले कई URLs हैं, तो URL का केवल एक संस्करण आउटपुट होगा।REMOVE_PARAMS - अल्पविराम से अलग की गई केस-सेंसिटिव पैरामीटर नामों की सूची (जैसे cachebuster,cacheBuster) जिन्हें प्रोसेसिंग से पहले सभी URLs से हटा दिया जाएगा।वर्तमान में पाथ भाग के Globally Unique ID (GUID) और Integer ID होने के लिए स्वचालित regex जाँच होती है, लेकिन -rcid / --regex-custom-id तर्क आपको कस्टम ID की पहचान करने के लिए एक रेगुलर एक्सप्रेशन प्रदान करने की सुविधा देता है। उदाहरण के लिए, यदि किसी टारगेट का एक विशिष्ट ID फ़ॉर्मेट है (जो GUID या Integer नहीं है) तो आप उसके लिए regex एक्सप्रेशन निर्दिष्ट कर सकते हैं, और फिर यदि URL का शेष भाग समान है तो उनमें से केवल एक ही आउटपुट में लौटाया जाएगा। उदाहरण के लिए:
U-65241X जैसे फ़ॉर्मेट में उपयोगकर्ता ID हैhttps://target.com/blah/U-61723A/settings
https://target.com/blah/U-63352B/settings
https://target.com/blah/U-61351A/profile
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
urless को कॉल कर सकते हैं और -rcid 'U-[0-9]{5}[A-Z]' पास कर सकते हैं, तो आउटपुट होगा:
https://target.com/blah/U-61723A/settings
https://target.com/blah/U-64135C/profile
महत्वपूर्ण REGEX नोट्स:
-rcid तर्क में पास करते समय अपने regex एक्सप्रेशन को हमेशा सिंगल कोट्स में बंद करें।[^(\?|\/|#|$)]* जोड़ें जिसका अर्थ होगा पाथ भाग के अंत तक के अन्य सभी अक्षर।^ और अंत में $ जोड़ सकते हैं ताकि यह सुनिश्चित हो सके कि यह स्लैश के बीच पाथ के पूरे भाग को दर्शाता है। हालाँकि, यदि इन्हें छोड़ दिया जाता है तो ये आपके लिए जोड़ दिए जाएँगे।cat input.txt | grep -E 'U-[0-9]{5}[A-Z]' कर सकते हैं, और देख सकते हैं कि आपका एक्सप्रेशन सही दिखता है या नहीं (इसे केवल वही हाइलाइट करना चाहिए जिसमें आपकी रुचि है, और पाथ के उस पूरे भाग को हाइलाइट करना चाहिए जो कस्टम ID है)।https://target.com/blah/xnl/settings जैसे URLs हैं जहाँ xnl एक उपयोगकर्ता नाम है, तो आप उपयोगकर्ता नाम के लिए regex नहीं बना पाएँगे क्योंकि यह अन्य संभावित पाथ मानों से अलग करने के लिए पर्याप्त अद्वितीय फ़ॉर्मेट नहीं है।यदि आपको कोई भी समस्या आती है, या सुधार के विचार हैं, तो कृपया बेझिझक Github पर issue दर्ज करें। यदि कोई समस्या है, तो यह उपयोगी होगा यदि आप चलाया गया सटीक कमांड और समस्या का विस्तृत विवरण प्रदान कर सकें। यदि संभव हो, तो समस्या को दोहराने के लिए -v के साथ चलाएँ और मुझे दिए गए किसी भी त्रुटि संदेश के बारे में बताएँ।
कोई नहीं - कोई भी संवर्द्धन सुझाने के लिए Github issue दर्ज करने में संकोच न करें।
शुभकामनाएँ और शुभ खोज! यदि आप वास्तव में इस टूल (या किसी अन्य) को पसंद करते हैं, या उन्होंने आपको एक शानदार bounty खोजने में मदद की है, तो मुझे एक कॉफ़ी खरीदने पर विचार करें! ☕ (मुझे कैफीन की ज़रूरत पड़ सकती है!)
🤘 /XNL-h4ck3r
| तर्क | लंबा तर्क | विवरण |
|---|
| -i | --input | डी-क्लटर करने के लिए URL की एक फ़ाइल। |
| -o | --output | आउटपुट फ़ाइल जिसमें डी-क्लटर की गई URL सूची होगी (डिफ़ॉल्ट: output.txt)। यदि किसी अन्य प्रोग्राम में पाइप किया जाए, तो आउटपुट STDOUT पर लिखा जाएगा। |
| -fk | --filter-keywords | लिंक्स को बाहर करने के लिए कीवर्ड की अल्पविराम से अलग की गई सूची (यदि कोई पैरामीटर न हों)। यह config.yml में निर्दिष्ट FILTER_KEYWORDS सूची को ओवरराइड करेगा। |
| -fe | --filter-extensions | बाहर करने के लिए फ़ाइल एक्सटेंशन की अल्पविराम से अलग की गई सूची। यह config.yml में निर्दिष्ट FILTER_EXTENSIONS सूची को ओवरराइड करेगा। |
| -rp | --remove-params | सभी URL से हटाने के लिए केस-सेंसिटिव पैरामीटर की अल्पविराम से अलग की गई सूची। यह config.yml में निर्दिष्ट REMOVE_PARAMS सूची को ओवरराइड करेगा। यह उदाहरण के लिए cache buster पैरामीटर हटाने में उपयोगी हो सकता है।** |
| -ks | --keep-slash | इनपुट में URL के अंत में मौजूद ट्रेलिंग स्लैश को नहीं हटाया जाएगा। इसलिए आउटपुट में समान URL हो सकते हैं, एक ट्रेलिंग स्लैश के साथ और एक बिना। |
| -khw | --keep-human-written | डिफ़ॉल्ट रूप से, ऐसे किसी भी URL को हटा दिया जाता है जिसके पाथ भाग में 3 से अधिक डैश (-) हों, क्योंकि यह माना जाता है कि यह मानव-लिखित सामग्री (जैसे ब्लॉग पोस्ट) है, और दिलचस्प नहीं है। यह तर्क पास करने पर उन्हें आउटपुट में रखा जाएगा। |
| -kym | --keep-yyyymm | डिफ़ॉल्ट रूप से, ऐसे किसी भी URL को हटा दिया जाता है जिसके पाथ में /YYYY/MM (जहाँ YYYY वर्ष और MM माह है) होता है, क्योंकि यह माना जाता है कि यह ब्लॉग/समाचार सामग्री है, और दिलचस्प नहीं है। यह तर्क पास करने पर उन्हें आउटपुट में रखा जाएगा। |
| -rcid | --regex-custom-id | सावधानी से उपयोग करें! आपके टारगेट द्वारा उपयोग किए जाने वाले कस्टम ID के लिए Regex। मान को कोट्स में पास करना सुनिश्चित करें। इसके बारे में अधिक जानकारी के लिए नीचे दिया गया अनुभाग देखें। |
| -iq | --ignore-querystring | क्वेरी स्ट्रिंग (URL फ़्रैगमेंट्स # सहित) हटाएं ताकि आउटपुट में केवल अद्वितीय पाथ हों। |
| -fnp | --fragment-not-param | URL फ़्रैगमेंट्स # को पैरामीटर की तरह न मानें, उदाहरण के लिए यदि किसी लिंक में फ़िल्टर कीवर्ड और फ़्रैगमेंट (या पैरामीटर) है तो लिंक आमतौर पर रखा जाता है, लेकिन यदि यह तर्क पास किया जाता है और लिंक में फ़िल्टर शब्द और फ़्रैगमेंट है, तो लिंक हटा दिया जाएगा। साथ ही, यदि यह तर्क पास किया जाता है और -iq / --ignore-querystring उपयोग किया जाता है, तो लिंक में कोई क्वेरी स्ट्रिंग न होने पर फ़्रैगमेंट को लिंक से नहीं हटाया जाएगा। |
| -lang | --language | यदि पास किया जाता है और पाथ के भाग के रूप में विभिन्न भाषा कोड वाले कई URL हैं, तो URL का केवल एक संस्करण आउटपुट होगा। कोड config.yml के LANGUAGE अनुभाग में निर्दिष्ट हैं। |
| -c | --config | YML कॉन्फ़िग फ़ाइल का पाथ। यदि पास नहीं किया जाता है, तो यह डिफ़ॉल्ट कॉन्फ़िग निर्देशिका, जैसे ~/.config/urless/, में config.yml फ़ाइल खोजता है। |
| -dp | --disregard-params | यदि URLs में पैरामीटर हैं तो कुछ फ़िल्टरिंग नहीं की जाती है, क्योंकि डिफ़ॉल्ट रूप से हम सभी संभावित पैरामीटर देखना चाहते हैं। यदि यह तर्क पास किया जाता है, तो किसी भी पैरामीटर की उपस्थिति की परवाह किए बिना फ़िल्टरिंग की जाएगी। |
| -nb | --no-banner | टूल का बैनर आउटपुट छिपाता है (यदि आप urless में इनपुट पाइप करते हैं तो यह डिफ़ॉल्ट रूप से छिपा होता है)। |
| --version | वर्तमान संस्करण संख्या दिखाएं। | |
| -v | --verbose | वर्बोज़ आउटपुट |
-) होते हैं, लेकिन यह GUID नहीं है। इसका तात्पर्य मानव-लिखित सामग्री से है, जैसे how-to-hack-the-planet। यदि तर्क -khw पास किया जाता है, तो इसे नहीं हटाया जाएगा।/YYYY/MM/ होता है, जैसे वर्ष, माह। यह आमतौर पर स्थिर सामग्री होती है जैसे ब्लॉग। यदि तर्क -kym पास किया जाता है, तो इसे नहीं हटाया जाएगा।#) हैं और -dp/--disregard-params तर्क पास नहीं किया गया था: