
زاحف ويب مظلم يستخدم طلبات وعمال Selenium لجلب الصفحات، والتقاط الرؤوس وملفات تعريف الارتباط، واستخراج الروابط، وحفظ لقطات الشاشة المُصيَّرة لجمع معلومات OSINT.
darc - مشروع زاحف الويب المظلملأي معلومات تقنية و/أو معلومات صيانة، يُرجى التكرم بالرجوع إلى |docs|_.
.. |docs| replace:: الوثائق الرسمية .. _docs: https://darc.jarryshaw.me
ملاحظة: بدءًا من الإصدار 1.0.0، لن يتم تطوير ميزات جديدة للمشروع
في هذا المستودع العام. سيتم تطبيق إصلاحات الأخطاء وتصحيحات الأمان فقط
على التحديثات والإصدارات الجديدة.
صُمم darc ليكون أداة متعددة الاستخدامات لزحف الويب المظلم.
فهو يدمج requests لجمع معلومات طلبات HTTP واستجاباتها،
مثل ملفات تعريف الارتباط وحقول الترويسة وغيرها. كما يحزم
selenium لتوفير صفحة ويب مُصيَّرة بالكامل ولقطة شاشة
لهذا العرض.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
يمكن وصف العملية العامة لـ darc على النحو التالي:
هناك نوعان من العمال:
crawler -- يشغّل darc.crawl.crawler لتوفير
عرض حديث لرابط واختبار قابليته للاتصال
loader -- يشغّل darc.crawl.loader لتوفير
عرض متعمق لرابط وتقديم مزيد من المعلومات المرئية
يمكن وصف العملية العامة على النحو التالي لـ العمال من نوع crawler:
darc.process.process_crawler: الحصول على عناوين URL من قاعدة بيانات
روابط requests (راجع darc.db.load_requests)، وتغذية هذه العناوين إلى
darc.crawl.crawler.
ملاحظة:
إذا كانت darc.const.FLAG_MP هي True، فسيتم استدعاء الدالة
مع دعم تعدد المعالجة؛ وإذا كانت darc.const.FLAG_TH
هي True، فسيتم استدعاء الدالة مع دعم تعدد الخيوط؛
وإذا لم يكن أي منهما، فسيتم استدعاء الدالة بخيط واحد.
darc.crawl.crawler: تحليل عنوان URL باستخدام
darc.link.parse_link، والتحقق مما إذا كان يلزم الزحف إلى
عنوان URL (راجع darc.const.PROXY_WHITE_LIST، darc.const.PROXY_BLACK_LIST،
darc.const.LINK_WHITE_LIST و darc.const.LINK_BLACK_LIST)؛
إذا كان الأمر كذلك، فسيتم الزحف إلى عنوان URL باستخدام requests.
إذا كان عنوان URL من مضيف جديد تمامًا، فسيحاول darc أولًا
جلب وحفظ robots.txt وخرائط الموقع الخاصة بالمضيف
(راجع darc.proxy.null.save_robots و darc.proxy.null.save_sitemap)،
ثم استخراج الروابط من خرائط الموقع وحفظها (راجع darc.proxy.null.read_sitemap)
في قاعدة بيانات الروابط للزحف المستقبلي (راجع darc.db.save_requests).
أيضًا، إذا تم توفير واجهة برمجة تطبيقات الإرسال، فسيتم استدعاء
darc.submit.submit_new_host وإرسال المستندات التي تم جلبها للتو.
إذا كان robots.txt موجودًا، وكان darc.const.FORCE هو
False، فسيتحقق darc مما إذا كان مسموحًا بالزحف إلى عنوان URL.
ملاحظة:
سيتم دائمًا الزحف إلى المسار الجذري (مثل / في https://www.example.com/)
متجاهلًا robots.txt.
في هذه المرحلة، سيستدعي darc دالة الخطاف المخصصة
من darc.sites للزحف والحصول على كائن الاستجابة النهائي.
سيحفظ darc ملفات تعريف ارتباط الجلسة ومعلومات الترويسة،
باستخدام darc.save.save_headers.
ملاحظة:
إذا تم رفع requests.exceptions.InvalidSchema، فسيتم حفظ الرابط
بواسطة darc.proxy.null.save_invalid. وتُسقَط أي
معالجة إضافية.
إذا لم يتم تجاهل نوع محتوى مستند الاستجابة (راجع
darc.const.MIME_WHITE_LIST و darc.const.MIME_BLACK_LIST)،
فسيتم استدعاء darc.submit.submit_requests وإرسال المستند
الذي تم جلبها للتو.
إذا كان مستند الاستجابة HTML (text/html و application/xhtml+xml)،
فسيتم استدعاء darc.parse.extract_links بعد ذلك لاستخراج جميع الروابط
الممكنة من مستند HTML وحفظ هذه الروابط في قاعدة البيانات
(راجع darc.db.save_requests).
وإذا كان رمز حالة الاستجابة بين 400 و 600،
فسيتم حفظ عنوان URL مرة أخرى في قاعدة بيانات الروابط
(راجع darc.db.save_requests). إذا لم يكن كذلك، فسيتم
حفظ عنوان URL في قاعدة بيانات روابط selenium لمتابعة الخطوات التالية
(راجع darc.db.save_selenium).
يمكن وصف العملية العامة كما يلي بالنسبة لـ العاملين من نوع loader:
darc.process.process_loader: في الوقت نفسه، ستقوم darc
بالحصول على عناوين URL من قاعدة بيانات روابط selenium (راجع darc.db.load_selenium)،
وتغذية هذه العناوين إلى darc.crawl.loader.
ملاحظة:
إذا كانت darc.const.FLAG_MP تساوي True، فسيتم استدعاء الدالة
مع دعم multiprocessing؛ وإذا كانت darc.const.FLAG_TH
تساوي True، فسيتم استدعاء الدالة مع دعم
multithreading؛ وإذا لم يكن أي منهما، فسيتم استدعاء الدالة في وضع single-threading.
darc.crawl.loader: تحليل عنوان URL باستخدام
darc.link.parse_link وبدء تحميل عنوان URL باستخدام
selenium مع Google Chrome.
عند هذه النقطة، ستستدعي darc دالة hook المخصصة
من darc.sites لتحميل وإرجاع كائن
selenium.webdriver.chrome.webdriver.WebDriver الأصلي.
في حال النجاح، سيتم حفظ مستند HTML المصدر المُصيَّر، وسيتم التقاط لقطة شاشة لكامل الصفحة وحفظها.
إذا تم توفير واجهة برمجة التطبيقات للإرسال، فسيتم استدعاء darc.submit.submit_selenium
وإرسال المستند الذي تم تحميله للتو.
لاحقًا، سيتم استدعاء darc.parse.extract_links بعد ذلك
لاستخراج جميع الروابط الممكنة من مستند HTML وحفظ هذه
الروابط في قاعدة بيانات requests (راجع darc.db.save_requests).
ملاحظة:
تدعم darc جميع إصدارات Python فوق الإصدار 3.6 وشاملةً له.
حاليًا، تدعم وتُختبر فقط على Linux (Ubuntu 18.04)
وmacOS (Catalina).
عند التثبيت على إصدارات Python الأقدم من 3.8، ستستخدم darc
|walrus|_ لتجميع نفسها من أجل توافق backport.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
يرجى التأكد من تثبيت Google Chrome وإصدار Chrome Driver المطابق على نظامك.
بدءًا من الإصدار 0.3.0، أدخلنا Redis_ كخلفية لقاعدة بيانات
قائمة المهام.
.. _Redis: https://redis.io
منذ الإصدار 0.6.0، أدخلنا تخزين قاعدة بيانات علائقية
(مثل MySQL، SQLite، PostgreSQL، إلخ) كخلفية لقاعدة بيانات
قائمة المهام، إلى جانب قاعدة بيانات Redis، لأنه قد يكون مكلفًا جدًا من حيث الذاكرة
عندما تصبح قائمة المهام كبيرة جدًا.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
يرجى التأكد من تثبيت إحدى قواعد البيانات الخلفية وتهيئتها
وتشغيلها عند استخدام مشروع darc.
ومع ذلك، يُشحن مشروع darc مع دعم Docker وCompose.
يرجى الاطلاع على جذر المشروع للحصول على الملفات ذات الصلة ومزيد من المعلومات.
أو، يمكنك الرجوع إلى مستودع Docker Hub_ و/أو التثبيت منه:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
أو من GitHub Container Registry، مع صور أكثر تحديثًا وشمولًا:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
يوفر مشروع darc واجهة سطر أوامر بسيطة::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw
optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -t {crawler,loader}, --type {crawler,loader} type of worker process -f FILE, --file FILE read links from file
يمكن أيضًا استدعاؤها عبر نقطة دخول الوحدة::
python -m darc ...
ملاحظة:
يمكن أن تحتوي ملفات الروابط على أسطر تعليقات، والتي يجب أن تبدأ بـ #.
سيتم تجاهل الأسطر الفارغة وأسطر التعليقات عند التحميل.