
अगली पीढ़ी का DorX. Dorks द्वारा, Dorks के लिए बनाया गया। 🤓
DorXNG उन्नत सर्च इंजन ऑपरेटरों के माध्यम से OSINT डेटा संग्रह करने का एक आधुनिक समाधान है, जो कई अपस्ट्रीम सर्च प्रदाताओं का उपयोग करता है। बैकएंड पर यह SearXNG की एक विशेष रूप से निर्मित कंटेनराइज्ड छवि का लाभ उठाता है, जो एक स्व-होस्टेड, हैक करने योग्य, गोपनीयता-केंद्रित मेटा-सर्च इंजन है।
हमारा SearXNG कार्यान्वयन सभी सर्च क्वेरीज़ को Tor नेटवर्क पर रूट करता है और Tor के MaxCircuitDirtiness कॉन्फ़िगरेशन निर्देश के साथ हर दस सेकंड में सर्किट रिफ्रेश करता है। हमने SearXNG की सभी क्लाइंट-साइड टाइमआउट सुविधाओं को भी अक्षम कर दिया है। ये सेटिंग्स सर्च इंजन प्रतिबंधों से बचने की अनुमति देती हैं जो अक्सर कई बार-बार सर्च क्वेरी जारी करने पर सामने आते हैं।
DorXNG क्लाइंट एप्लिकेशन Python3 में लिखा गया है, और SearXNG API के साथ इंटरैक्ट करके समवर्ती रूप से सर्च क्वेरी जारी करता है। यह कई SearXNG इंस्टेंस पर भी अनुरोध भेज सकता है। परिणामी सर्च परिणाम एक SQLite3 डेटाबेस में संग्रहीत किए जाते हैं।

हमने हर समर्थित अपस्ट्रीम सर्च इंजन को सक्षम किया है जो उन्नत सर्च ऑपरेटर क्वेरी की अनुमति देता है:
GoogleDuckDuckGoQwantBingBraveStartpageYahooSearXNG द्वारा समर्थित सर्च इंजनों के बारे में अधिक जानकारी के लिए देखें: Configured Engines
Tor और SearXNG के डेवलपर्स को शाउट आउट जिन्होंने इसे संभव बनाया। दोनों परियोजनाओं को दान करें!
pagodo के डेवलपर को शाउट आउट प्रेरणा और उस शानदार ghdb_scraper.py स्क्रिप्ट के लिए!
अंतिम लेकिन निश्चित रूप से, j0hnny को शाउट आउट। OG डॉर्क। 🧠🏴☠
DorXNG इंस्टॉल करें
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
हमारा कस्टम SearXNG डॉकर कंटेनर डाउनलोड करें और चलाएं (कम से कम एक)। कई SearXNG इंस्टेंस का उपयोग किया जा सकता है। DorXNG के साथ --serverlist विकल्प का उपयोग करें। देखें: server.lst
docker run researchanddestroy/searxng:latest
यदि आप स्वयं कंटेनर बनाना चाहते हैं:
git clone https://github.com/researchanddestroy/searxng # बिल्ड प्रक्रिया पूरी होने के लिए URL पूरी तरह से लोअरकेस होना चाहिए
cd searxng
DOCKER_BUILDKIT=1 make docker.build
docker images
docker run <image-id>
डिफ़ॉल्ट रूप से DorXNG में parse_args.py में एक हार्ड-कोडेड server वेरिएबल है, जो उस IP पते पर सेट है जो Docker आपकी मशीन पर पहले कंटेनर को असाइन करेगा 172.17.0.2। इसे बदला जा सकता है, या --server या --serverlist के साथ ओवरराइट किया जा सकता है।
सर्च क्वेरी जारी करना शुरू करें
./DorXNG.py -q 'search query'
DorXNG डेटाबेस क्वेरी करें
./DorXNG.py -D 'regex search string'
-h, --help यह सहायता संदेश दिखाएं और बाहर निकलें
-s SERVER, --server SERVER
DorXNG सर्वर इंस्टेंस - उदाहरण: 'https://172.17.0.2/search'
-S SERVERLIST, --serverlist SERVERLIST
सर्वरों की सूची पर सर्च क्वेरी जारी करें - प्रारूप: न्यूलाइन द्वारा सीमांकित
-q QUERY, --query QUERY
एक सर्च क्वेरी जारी करें - उदाहरण: 'search query' | '!tch search query' | 'site:example.com intext:example'
-Q QUERYLIST, --querylist QUERYLIST
सर्च क्वेरी सूची के माध्यम से पुनरावृति करें - प्रारूप: न्यूलाइन द्वारा सीमांकित
-n NUMBER, --number NUMBER
पृष्ठ परिणाम पुनरावृत्तियों की संख्या परिभाषित करें
-c CONCURRENT, --concurrent CONCURRENT
समवर्ती पृष्ठ अनुरोधों की संख्या परिभाषित करें
-l LIMITDATABASE, --limitdatabase LIMITDATABASE
डेटाबेस आकार सीमा निर्धारित करें - इससे अधिक होने पर नया डेटाबेस शुरू होता है - उदाहरण: --limitdatabase 10 (10k डेटाबेस एंट्री) - गहरी पुनरावृत्ति करते समय अनुशंसित अधिकतम डेटाबेस आकार 50k है
-L LOOP, --loop LOOP मुख्य फ़ंक्शन लूप पुनरावृत्तियों की संख्या परिभाषित करें - 0 पर अनंत लूप
-d DATABASE, --database DATABASE
SQL डेटाबेस फ़ाइल निर्दिष्ट करें - डिफ़ॉल्ट: 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
डेटाबेस क्वेरी जारी करें - प्रारूप: Regex
-m MERGEDATABASE, --mergedatabase MERGEDATABASE
SQL डेटाबेस फ़ाइल विलय करें - उदाहरण: --mergedatabase database.db
-t TIMEOUT, --timeout TIMEOUT
अनुरोधों के बीच टाइमआउट अंतराल निर्दिष्ट करें - डिफ़ॉल्ट: 4 सेकंड - 0 से अक्षम करें
-r NONEWRESULTS, --nonewresults NONEWRESULTS
बिना नए परिणामों के पुनरावृत्तियों की संख्या निर्दिष्ट करें - डिफ़ॉल्ट: 4 (3 प्रयास) - 0 से अक्षम करें
-v, --verbose वर्बोज़ आउटपुट सक्षम करें
-vv, --veryverbose बहुत वर्बोज़ आउटपुट सक्षम करें - कच्चा JSON आउटपुट दिखाता है
कभी-कभी आप Tor एक्ज़िट नोड पर पहुंच जाएंगे जो पहले से ही अपस्ट्रीम सर्च प्रदाताओं द्वारा अवरुद्ध है, जिससे आपको न्यूनतम सर्च परिणाम प्राप्त होंगे। चिंता न करें... बस क्वेरी फायर करते रहें। 😉
अपनी DorXNG SQL डेटाबेस फ़ाइल रखें और अपना कमांड फिर से चलाएं, या मुख्य फ़ंक्शन को बार-बार चलाने के लिए --loop स्विच का उपयोग करें। 🔁
अक्सर, आप एक सर्च क्वेरी पर जितने अधिक पास करेंगे, उतने अधिक परिणाम मिलेंगे। 🍻
यह भी ध्यान रखें कि हमने उच्च डेटा आउटपुट के लिए गति में बलिदान दिया है। आखिरकार, यह एक OSINT परियोजना है। 🔎🌎
आपके द्वारा की गई प्रत्येक सर्च क्वेरी 7 अपस्ट्रीम सर्च प्रदाताओं को भेजी जा रही है... विशेष रूप से --concurrent क्वेरी के साथ यह बहुत सारे अपस्ट्रीम अनुरोध उत्पन्न करता है... इसलिए धैर्य रखें।
ध्यान रखें कि DorXNG आपकी डेटाबेस फ़ाइल में नए सर्च परिणाम जोड़ता रहेगा। डेटाबेस फ़ाइल नाम निर्दिष्ट करने के लिए --database स्विच का उपयोग करें, डिफ़ॉल्ट फ़ाइल नाम dorxng.db है। यह अधिकांश के लिए मायने नहीं रखता, लेकिन यदि आप अपनी OSINT जांच को अलग रखना चाहते हैं तो यह विकल्प मौजूद है।
चार समवर्ती सर्च अनुरोध सबसे अच्छा बिंदु प्रतीत होता है। आप अधिक जारी कर सकते हैं, लेकिन एक बार में जितने अधिक अनुरोध करेंगे, परिणाम प्राप्त करने में उतना ही अधिक समय लगेगा। साथ ही, उस विशिष्ट Tor सर्किट पर अपस्ट्रीम सर्च प्रदाताओं से HTTP/429 Too Many Requests प्रतिक्रिया प्राप्त करने की संभावना बढ़ जाती है।
यदि आप कई SearXNG डॉकर कंटेनर बहुत तेज़ी से शुरू करते हैं तो Tor कनेक्शन स्थापित करने में विफल हो सकते हैं। कंटेनर को इनिशियलाइज़ करते समय, Tor कनेक्टिविटी चेक फ़ंक्शन से एक मान्य प्रतिक्रिया इस तरह दिखती है:
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
यदि आपको इसके अलावा कुछ और दिखाई देता है, या यदि आप SearXNG मॉनिटर स्क्रिप्ट (कंटेनर में STDOUT) से HTTP/500 प्रतिक्रिया कोड देखना शुरू करते हैं, तो डॉकर कंटेनर को मारें और एक नया स्पिन करें।
DorXNG के भीतर HTTP/504 Gateway Time-out प्रतिक्रिया कोड की कभी-कभी उम्मीद की जाती है। इसका मतलब है कि SearXNG इंस्टेंस को एक मिनट के भीतर मान्य प्रतिक्रिया वापस नहीं मिली। संभवतः वह विशिष्ट Tor सर्किट बहुत धीमा है। बस चलते रहें!
वास्तव में इनमें से बहुत सारे कंटेनर चलाने का कोई कारण नहीं है... अभी तक... 😉 आप कितने कंटेनर चलाते हैं यह वास्तव में इस पर निर्भर करता है कि आप क्या कर रहे हैं। प्रत्येक कंटेनर लगभग 1.25GBs RAM का उपयोग करता है।
एक कंटेनर चलाना पूरी तरह से ठीक काम करता है, सिवाय इसके कि आप संभवतः सर्च परिणामों से चूक जाएंगे। इसलिए --loop का उपयोग करें और --timeout अक्षम न करें।
कई कंटेनर चलाना अच्छा है क्योंकि प्रत्येक का अपना Tor सर्किट होता है जो हर 10 सेकंड में रिफ्रेश होता है।
--serverlist मोड चलाते समय --timeout सुविधा अक्षम करें ताकि अनुरोधों के बीच कोई देरी न हो (डिफ़ॉल्ट देरी अंतराल 4 सेकंड है)।
ध्यान रखें कि जितने अधिक कंटेनर चलाएंगे, उतनी अधिक मेमोरी की आवश्यकता होगी। यह गहरी पुनरावृत्ति पर भी लागू होता है... हमने Python की अधिकतम पुनरावृत्ति सीमा अक्षम कर दी है... 🔁😉
आपके कमांड द्वारा main पर वापस लौटने से पहले जितनी अधिक पुनरावृत्तियाँ होंगी, प्रक्रिया उतनी ही अधिक मेमोरी का उपभोग करेगी। हो सकता है कि आप वापस आकर पाएं कि प्रक्रिया Killed त्रुटि संदेश के साथ क्रैश हो गई है। यदि ऐसा होता है तो आपकी मशीन की मेमोरी खत्म हो गई और उसने प्रक्रिया को मार दिया। चिंता न करें... आपकी डेटाबेस फ़ाइल अभी भी ठीक है। 👍👍
यदि आपकी डेटाबेस फ़ाइल असाधारण रूप से बड़ी हो जाती है, तो यह अनिवार्य रूप से प्रोग्राम को धीमा कर देती है और प्रत्येक पुनरावृत्ति के साथ अधिक मेमोरी का उपभोग करती है...
वे Python स्टैक फ्रेम बहुत मोटे हैं... 🍑😅
हमने देखा है कि लगभग 50 हजार प्रविष्टियों से अधिक डेटाबेस फ़ाइलों के साथ प्रदर्शन में उल्लेखनीय गिरावट आती है।
--limitdatabase विकल्प को इनमें से कुछ मेमोरी खपत समस्याओं को कम करने के लिए लागू किया गया है। iterator.py के अंदर गहरी पुनरावृत्ति को तोड़ने और main से ठीक वहीं से पुनः आरंभ करने के लिए --loop के साथ इसका उपयोग करें।
एक बार जब आपके पास डेटाबेस फ़ाइलों की एक श्रृंखला हो, तो आप उन सभी को (एक बार में एक) --mergedatabase के साथ विलय कर सकते हैं। यदि आप --database के साथ एक अप्रयुक्त फ़ाइल नाम निर्दिष्ट करते हैं तो आप उन सभी को एक नई डेटाबेस फ़ाइल में भी विलय कर सकते हैं।
शामिल query.lst फ़ाइल Google Hacking Database (GHDB) पर वर्तमान में मौजूद हर डॉर्क है। देखें: ghdb_scraper.py
हम पहले ही इसके माध्यम से चल चुके हैं... 😉 हमारी ghdb.db फ़ाइल में दस लाख से अधिक प्रविष्टियाँ हैं और गिनती जारी है! 🤩 यदि आप एक प्रति चाहते हैं तो आप इसे यहाँ डाउनलोड कर सकते हैं ghdb.db 😉
ghdb.db डेटाबेस को क्वेरी करने का उदाहरण:
./DorXNG.py -d ghdb.db -D '^http.*\.sql$'
DorXNG का Golang में पुनर्लेखन पहले से ही कार्य प्रगति पर है। 😉 (GorXNG? | DorXNGNG?) 😆
हमें और डॉर्क्स की आवश्यकता होगी... 😅 DorkGPT देखें 👀
एकल सर्च क्वेरी
./DorXNG.py -q 'search query'
समवर्ती सर्च क्वेरी
./DorXNG.py -q 'search query' -c4
पृष्ठ पुनरावृत्ति मोड
./DorXNG.py -q 'search query' -n4
पुनरावृत्त समवर्ती सर्च क्वेरी
./DorXNG.py -q 'search query' -c4 -n64
सर्वर सूची पुनरावृत्ति मोड
./DorXNG.py -S server.lst -q 'search query' -c4 -n64 -t0
क्वेरी सूची पुनरावृत्ति मोड
./DorXNG.py -Q query.lst -c4 -n64
क्वेरी और सर्वर सूची पुनरावृत्ति
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0
मुख्य फ़ंक्शन लूप पुनरावृत्ति मोड
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L4
डेटाबेस फ़ाइल आकार सीमा 10k प्रविष्टियों पर सेट के साथ अनंत मुख्य फ़ंक्शन लूप पुनरावृत्ति मोड
./DorXNG.py -S server.lst -Q query.lst -c4 -n64 -t0 -L0 -l10
एक डेटाबेस (एक बार में एक) को नई डेटाबेस फ़ाइल में विलय करना
./DorXNG.py -d new-database.db -m dorxng.db
वर्तमान कार्यशील निर्देशिका में सभी डेटाबेस फ़ाइलों को एक नई डेटाबेस फ़ाइल में विलय करना
for i in `ls *.db`; do ./DorXNG.py -d new-database.db -m $i; done
डेटाबेस क्वेरी करें
./DorXNG.py -d new-database.db -D 'regex search string'