
الجيل التالي من DorX. بني بواسطة Dorks، من أجل Dorks. 🤓
DorXNG هو حل حديث لحصاد بيانات OSINT باستخدام عوامل تشغيل محركات البحث المتقدمة من خلال موفري بحث متعددين. في الخلفية، يستخدم صورة حاوية مخصصة من SearXNG، وهو محرك بحث ميتا ذاتي الاستضافة، قابل للتعديل، يركز على الخصوصية.
تنفيذنا لـ SearXNG يوجه جميع استعلامات البحث عبر شبكة Tor مع تحديث الدوائر كل عشر ثوانٍ باستخدام توجيه التكوين MaxCircuitDirtiness الخاص بـ Tor. كما قمنا بتعطيل جميع ميزات المهلة من جانب العميل في SearXNG. تسمح هذه الإعدادات بتجنب قيود محرك البحث التي تُواجه عادةً عند إصدار العديد من استعلامات البحث المتكررة.
تطبيق عميل DorXNG مكتوب بلغة Python3، ويتفاعل مع واجهة API الخاصة بـ SearXNG لإصدار استعلامات البحث بشكل متزامن. يمكنه حتى إصدار طلبات عبر مثيلات SearXNG متعددة. يتم تخزين نتائج البحث الناتجة في قاعدة بيانات SQLite3.

لقد قمنا بتمكين كل محرك بحث مدعوم يسمح باستعلامات عوامل التشغيل المتقدمة:
GoogleDuckDuckGoQwantBingBraveStartpageYahooلمزيد من المعلومات حول محركات البحث التي يدعمها SearXNG، انظر: Configured Engines
تحيات لمطوري Tor و SearXNG لجعل هذا ممكنًا. تبرعوا لكلا المشروعين!
تحيات لمطور pagodo للإلهام وسكربت ghdb_scraper.py الرائع!
وأخيرًا وليس آخرًا، تحيات لـ j0hnny. الأصلي في الدروكنج. 🧠🏴☠
تثبيت DorXNG
git clone https://github.com/researchanddestroy/dorxng
cd dorxng
pip install -r requirements.txt
./DorXNG.py -h
تنزيل وتشغيل حاوية Docker المخصصة لـ SearXNG (على الأقل واحدة). يمكن استخدام مثيلات SearXNG متعددة. استخدم خيار --serverlist مع DorXNG. انظر: 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 على متغير server مكتوب بشفرة في parse_args.py وهو مضبوط على عنوان 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 (10 آلاف إدخال قاعدة بيانات) - الحد الأقصى المقترح لحجم قاعدة البيانات هو 50 ألف عند القيام بتكرار عميق
-L LOOP, --loop LOOP تحديد عدد تكرارات حلقة الوظيفة الرئيسية - حلقة لا نهائية مع 0
-d DATABASE, --database DATABASE
تحديد ملف قاعدة بيانات SQL - الإعداد الافتراضي: 'dorxng.db'
-D DATABASEQUERY, --databasequery DATABASEQUERY
إصدار استعلام قاعدة بيانات - التنسيق: تعبير عادي
-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 تم حظرها بالفعل من قبل موفري البحث، مما يتسبب في تلقي كمية قليلة من نتائج البحث. لا تقلق... فقط استمر في إرسال الاستعلامات. 😉
احتفظ بملف قاعدة بيانات SQL الخاص بـ DorXNG وأعد تشغيل الأمر، أو استخدم مفتاح --loop لتكرار الوظيفة الرئيسية مرارًا وتكرارًا. 🔁
في معظم الأحيان، كلما زاد عدد المرات التي تمر بها على استعلام البحث، كلما وجدت نتائج أكثر. 🍻
ضع في اعتبارك أيضًا أننا ضحينا بالسرعة من أجل درجة أعلى من إخراج البيانات. بعد كل شيء، هذا مشروع OSINT. 🔎🌎
كل استعلام بحث تقوم به يتم إرساله إلى 7 موفري بحث... خاصة مع استعلامات --concurrent، يولد هذا الكثير من الطلبات إلى الأعلى... لذا تحلّ بالصبر.
ضع في اعتبارك أن DorXNG سيستمر في إلحاق نتائج بحث جديدة بملف قاعدة البيانات الخاص بك. استخدم مفتاح --database لتحديد اسم ملف قاعدة البيانات، الاسم الافتراضي هو dorxng.db. ربما لا يهم هذا بالنسبة لمعظم الناس، ولكن إذا كنت ترغب في إبقاء تحقيقاتك في OSINT منفصلة، فهو متاح لك.
أربعة طلبات بحث متزامنة تبدو مثالية. يمكنك إصدار المزيد، ولكن كلما زاد عدد الاستعلامات التي تصدرها في وقت واحد، زاد الوقت المستغرق لتلقي النتائج. كما يزيد من احتمالية تلقي استجابات HTTP/429 Too Many Requests من موفري البحث على دائرة Tor المحددة.
إذا قمت ببدء تشغيل حاويات Docker المتعددة لـ SearXNG بسرعة كبيرة جدًا، فقد تفشل اتصالات Tor في التأسيس. أثناء تهيئة الحاوية، يبدو الرد الصالح من وظيفة التحقق من اتصال Tor هكذا:
Checking Tor Connectivity..
{"IsTor":true,"IP":"<tor-exit-node>"}
إذا رأيت أي شيء آخر غير ذلك، أو إذا بدأت في رؤية رموز استجابة HTTP/500 قادمة من سكربت مراقبة SearXNG (STDOUT في الحاوية)، اقتل حاوية Docker وشغّل واحدة جديدة.
رموز استجابة HTTP/504 Gateway Time-out داخل DorXNG متوقعة أحيانًا. هذا يعني أن مثيل SearXNG لم يتلق ردًا صالحًا في غضون دقيقة واحدة. من المحتمل أن دائرة Tor المحددة بطيئة جدًا. فقط استمر!
ليس هناك حقًا سبب لتشغيل عدد كبير من هذه الحاويات... حتى الآن... 😉 كم عدد الحاويات التي تشغلها يعتمد حقًا على ما تفعله. تستهلك كل حاوية حوالي 1.25 جيجابايت من ذاكرة الوصول العشوائي.
تشغيل حاوية واحدة يعمل بشكل جيد تمامًا، باستثناء أنك ستفقد نتائج البحث على الأرجح. لذا استخدم --loop ولا تعطل --timeout.
تشغيل حاويات متعددة جميل لأن لكل منها دائرة Tor الخاصة بها التي تتجدد كل 10 ثوانٍ.
عند تشغيل وضع --serverlist، قم بتعطيل ميزة --timeout بحيث لا يكون هناك تأخير بين الطلبات (فترة التأخير الافتراضية هي 4 ثوانٍ).
ضع في اعتبارك أنه كلما زاد عدد الحاويات التي تشغلها، زادت الذاكرة التي ستحتاجها. ينطبق هذا أيضًا على التكرار العميق... لقد قمنا بتعطيل حد التكرار الأقصى في Python... 🔁😉
كلما زاد عدد التكرارات التي يمر بها أمرك دون العودة إلى main، زادت الذاكرة التي ستستهلكها العملية. قد تعود لتجد أن العملية تعطلت برسالة خطأ Killed. إذا حدث هذا، فقد نفدت ذاكرة جهازك وقتلت العملية. لكن لا تقلق... ملف قاعدة البيانات الخاص بك لا يزال جيدًا. 👍👍
إذا أصبح ملف قاعدة البيانات الخاص بك كبيرًا بشكل استثنائي، فإنه حتمًا يبطئ البرنامج ويستهلك المزيد من الذاكرة مع كل تكرار...
إطارات Python Stack تلك سميكة... 🍑😅
لقد لاحظنا انخفاضًا ملحوظًا في الأداء مع ملفات قاعدة البيانات التي تتجاوز حوالي 50 ألف إدخال.
تم تنفيذ خيار --limitdatabase للتخفيف من بعض مشاكل استهلاك الذاكرة هذه. استخدمه مع --loop لكسر التكرار العميق داخل iterator.py وإعادة التشغيل من main من حيث توقفت.
بمجرد الحصول على سلسلة من ملفات قاعدة البيانات، يمكنك دمجها جميعًا (واحدًا تلو الآخر) باستخدام --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
وضع تكرار حلقة الوظيفة الرئيسية اللانهائية مع تحديد حجم ملف قاعدة البيانات بـ 10 آلاف إدخال
./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'