
Darkweb-Crawler, der Requests- und Selenium-Worker nutzt, um Seiten abzurufen, Header und Cookies zu erfassen, Links zu extrahieren und gerenderte Screenshots für die OSINT-Sammlung zu speichern.
darc - Darkweb-Crawler-ProjektFür technische und/oder Wartungsinformationen beachten Sie bitte die |docs|_.
.. |docs| replace:: Offizielle Dokumentation .. _docs: https://darc.jarryshaw.me
Hinweis: Ab Version 1.0.0 werden neue Funktionen des Projekts nicht mehr
in diesem öffentlichen Repository entwickelt. Auf Updates und neue Releases werden
nur Fehlerbehebungen und Sicherheitspatches angewendet.
darc ist als Schweizer Taschenmesser für das Darkweb-Crawling konzipiert.
Es integriert requests, um HTTP-Anfrage- und -Antwortinformationen
wie Cookies, Header-Felder usw. zu sammeln. Außerdem bündelt es
selenium, um eine vollständig gerenderte Webseite und einen Screenshot
dieser Ansicht bereitzustellen.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
Der allgemeine Ablauf von darc lässt sich wie folgt beschreiben:
Es gibt zwei Arten von Workern:
crawler -- führt den darc.crawl.crawler aus, um eine
frische Ansicht eines Links bereitzustellen und seine Verbindungsfähigkeit zu testen
loader -- führt den darc.crawl.loader aus, um eine
eingehende Ansicht eines Links bereitzustellen und mehr visuelle Informationen zu liefern
Der allgemeine Ablauf lässt sich für Worker vom Typ crawler wie folgt beschreiben:
darc.process.process_crawler: ruft URLs aus der requests-
Link-Datenbank ab (vgl. darc.db.load_requests) und speist solche URLs in
darc.crawl.crawler ein.
HINWEIS:
Wenn darc.const.FLAG_MP True ist, wird die Funktion
mit Multiprocessing-Unterstützung aufgerufen; wenn darc.const.FLAG_TH
True ist, wird die Funktion mit Multithreading-
Unterstützung aufgerufen; wenn keines von beiden zutrifft, wird die Funktion im Single-Threading aufgerufen.
darc.crawl.crawler: parst die URL mit
darc.link.parse_link und prüft, ob die
URL gecrawlt werden muss (vgl. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST und darc.const.LINK_BLACK_LIST);
wenn ja, wird die URL mit requests gecrawlt.
Wenn die URL von einem brandneuen Host stammt, versucht darc zunächst,
robots.txt und Sitemaps des Hosts abzurufen und zu speichern
(vgl. darc.proxy.null.save_robots und darc.proxy.null.save_sitemap),
und extrahiert dann die Links aus den Sitemaps und speichert sie (vgl. darc.proxy.null.read_sitemap)
in der Link-Datenbank für zukünftiges Crawling (vgl. darc.db.save_requests).
Außerdem wird, wenn die Submission-API bereitgestellt wird, darc.submit.submit_new_host
aufgerufen und die soeben abgerufenen Dokumente übermittelt.
Wenn robots.txt vorhanden ist und darc.const.FORCE
False ist, prüft darc, ob das Crawlen der URL erlaubt ist.
HINWEIS:
Der Wurzelpfad (z. B. / in https://www.example.com/) wird immer
gecrawlt, wobei robots.txt ignoriert wird.
An diesem Punkt ruft darc die benutzerdefinierte Hook-Funktion
aus darc.sites auf, um zu crawlen und das endgültige Antwortobjekt zu erhalten.
darc speichert die Session-Cookies und Header-Informationen
mit darc.save.save_headers.
HINWEIS:
Wenn requests.exceptions.InvalidSchema ausgelöst wird, wird der Link
durch darc.proxy.null.save_invalid gespeichert. Die weitere
Verarbeitung wird abgebrochen.
Wenn der Inhaltstyp des Antwortdokuments nicht ignoriert wird (vgl.
darc.const.MIME_WHITE_LIST und darc.const.MIME_BLACK_LIST),
wird darc.submit.submit_requests aufgerufen und das soeben abgerufene
Dokument übermittelt.
Wenn das Antwortdokument HTML ist (text/html und application/xhtml+xml),
wird anschließend darc.parse.extract_links aufgerufen, um alle möglichen
Links aus dem HTML-Dokument zu extrahieren und solche Links in der Datenbank
zu speichern (vgl. darc.db.save_requests).
Und wenn der Antwort-Statuscode zwischen 400 und 600 liegt,
wird die URL zurück in die Link-Datenbank gespeichert
(vgl. darc.db.save_requests). Wenn NICHT, wird die URL
in die selenium-Link-Datenbank gespeichert, um die nächsten Schritte fortzusetzen
(vgl. darc.db.save_selenium).
Der allgemeine Ablauf für Worker vom Typ loader lässt sich wie folgt beschreiben:
darc.process.process_loader: in der Zwischenzeit wird darc
URLs aus der selenium-Linkdatenbank beziehen (vgl. darc.db.load_selenium)
und diese URLs an darc.crawl.loader übergeben.
HINWEIS:
Wenn darc.const.FLAG_MP True ist, wird die Funktion
mit Multiprocessing-Unterstützung aufgerufen; wenn darc.const.FLAG_TH
True ist, wird die Funktion mit Multithreading-
Unterstützung aufgerufen; wenn keines von beiden gesetzt ist, wird die Funktion im Single-Threading-Modus aufgerufen.
darc.crawl.loader: parst die URL mit
darc.link.parse_link und beginnt mit dem Laden der URL mittels
selenium mit Google Chrome.
An diesem Punkt ruft darc die angepasste Hook-Funktion
aus darc.sites auf, um das ursprüngliche
selenium.webdriver.chrome.webdriver.WebDriver-Objekt zu laden und zurückzugeben.
Bei Erfolg wird das gerenderte Quell-HTML-Dokument gespeichert und ein Ganzseiten-Screenshot aufgenommen und gespeichert.
Wenn die Submission-API bereitgestellt wird, wird darc.submit.submit_selenium
aufgerufen und das soeben geladene Dokument übermittelt.
Anschließend wird darc.parse.extract_links aufgerufen, um
alle möglichen Links aus dem HTML-Dokument zu extrahieren und diese
Links in der requests-Datenbank zu speichern (vgl. darc.db.save_requests).
HINWEIS:
darc unterstützt alle Python-Versionen oberhalb von und einschließlich 3.6.
Derzeit wird es nur unter Linux (Ubuntu 18.04)
und macOS (Catalina) unterstützt und getestet.
Bei der Installation mit Python-Versionen unterhalb von 3.8 verwendet darc
|walrus|_, um sich selbst für die Backport-Kompatibilität zu kompilieren.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Bitte stellen Sie sicher, dass Google Chrome und die entsprechende Version des Chrome Drivers auf Ihrem System installiert sind.
Ab Version 0.3.0 haben wir Redis_ als Backend für die Task-Queue-Datenbank eingeführt.
.. _Redis: https://redis.io
Seit Version 0.6.0 haben wir neben der Redis-Datenbank auch relationale Datenbankspeicherung
(z. B. MySQL, SQLite, PostgreSQL usw.) als Backend für die Task-Queue-Datenbank
eingeführt, da diese zu speicherintensiv sein kann,
wenn die Task-Queue sehr groß wird.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Bitte stellen Sie sicher, dass eine der Backend-Datenbanken installiert, konfiguriert
und in Betrieb ist, wenn Sie das darc-Projekt verwenden.
Das darc-Projekt wird jedoch mit Docker- und Compose-Unterstützung ausgeliefert.
Relevante Dateien und weitere Informationen finden Sie im Projektstammverzeichnis.
Alternativ können Sie auf das Docker Hub_-Repository verweisen und/oder von dort installieren:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
oder die GitHub Container Registry mit aktuelleren und umfassenderen Images:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
Das darc-Projekt bietet eine einfache CLI::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...