
Crawler Darkweb qui utilise des workers requests et Selenium pour récupérer des pages, capturer les en-têtes et les cookies, extraire les liens et enregistrer des captures d'écran rendues pour la collecte OSINT.
darc - Projet de crawler pour le darkwebPour toute information technique et/ou de maintenance, veuillez vous référer à |docs|_.
.. |docs| replace:: Documentation officielle .. _docs: https://darc.jarryshaw.me
NB : À partir de la version 1.0.0, les nouvelles fonctionnalités du projet ne seront pas
développées dans ce dépôt public. Seuls les correctifs de bogues et les correctifs de sécurité seront
appliqués aux mises à jour et aux nouvelles versions.
darc est conçu comme un couteau suisse pour le crawling du darkweb.
Il intègre requests pour collecter les informations de requêtes et de réponses
HTTP, telles que les cookies, les champs d'en-tête, etc. Il regroupe également
selenium pour fournir une page web entièrement rendue et une capture d'écran
de cette vue.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
Le processus général de darc peut être décrit comme suit :
Il existe deux types de workers :
crawler -- exécute darc.crawl.crawler pour fournir une
vue fraîche d'un lien et tester sa connectabilité
loader -- exécute darc.crawl.loader pour fournir une
vue approfondie d'un lien et fournir davantage d'informations visuelles
Le processus général peut être décrit comme suit pour les workers de type crawler :
darc.process.process_crawler : obtient les URL depuis la base de données
de liens requests (cf. darc.db.load_requests), et transmet ces URL à
darc.crawl.crawler.
REMARQUE :
Si darc.const.FLAG_MP vaut True, la fonction sera
appelée avec le support du multiprocessing ; si darc.const.FLAG_TH
vaut True, la fonction sera appelée avec le support du multithreading ;
sinon, la fonction sera appelée en mono-threading.
darc.crawl.crawler : analyse l'URL à l'aide de
darc.link.parse_link, et vérifie s'il faut crawler
l'URL (cf. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST et darc.const.LINK_BLACK_LIST) ;
si oui, alors crawle l'URL avec requests.
Si l'URL provient d'un hôte entièrement nouveau, darc essaiera d'abord
de récupérer et d'enregistrer robots.txt et les sitemaps de l'hôte
(cf. darc.proxy.null.save_robots et darc.proxy.null.save_sitemap),
puis d'extraire et d'enregistrer les liens des sitemaps (cf. darc.proxy.null.read_sitemap)
dans la base de données de liens pour un crawling ultérieur (cf. darc.db.save_requests).
De plus, si l'API de soumission est fournie, darc.submit.submit_new_host
sera appelée et soumettra les documents qui viennent d'être récupérés.
Si robots.txt est présent, et que darc.const.FORCE vaut
False, darc vérifiera s'il est autorisé de crawler l'URL.
REMARQUE :
Le chemin racine (par exemple / dans https://www.example.com/) sera toujours
crawlé en ignorant robots.txt.
À ce stade, darc appellera la fonction de hook personnalisée
depuis darc.sites pour crawler et obtenir l'objet de réponse final.
darc enregistrera les cookies de session et les informations d'en-tête,
à l'aide de darc.save.save_headers.
REMARQUE :
Si requests.exceptions.InvalidSchema est levée, le lien
sera enregistré par darc.proxy.null.save_invalid. Tout traitement
ultérieur est abandonné.
Si le type de contenu du document de réponse n'est pas ignoré (cf.
darc.const.MIME_WHITE_LIST et darc.const.MIME_BLACK_LIST),
darc.submit.submit_requests sera appelée et soumettra le document
qui vient d'être récupéré.
Si le document de réponse est du HTML (text/html et application/xhtml+xml),
darc.parse.extract_links sera alors appelée pour extraire tous les liens
possibles du document HTML et enregistrer ces liens dans la base de données
(cf. darc.db.save_requests).
Et si le code de statut de la réponse est compris entre 400 et 600,
l'URL sera réenregistrée dans la base de données de liens
(cf. darc.db.save_requests). Si NON, l'URL sera
enregistrée dans la base de données de liens selenium pour passer aux étapes suivantes
(cf. darc.db.save_selenium).
Le processus général peut être décrit comme suit pour les workers de type loader :
darc.process.process_loader : pendant ce temps, darc va
obtenir des URL depuis la base de données de liens selenium (cf. darc.db.load_selenium),
et transmettre ces URL à darc.crawl.loader.
REMARQUE :
Si darc.const.FLAG_MP vaut True, la fonction sera
appelée avec le support du multiprocessing ; si darc.const.FLAG_TH
vaut True, la fonction sera appelée avec le support du multithreading ;
sinon, la fonction sera appelée en mono-thread.
darc.crawl.loader : analyse l'URL à l'aide de
darc.link.parse_link et commence le chargement de l'URL avec
selenium et Google Chrome.
À ce stade, darc appellera la fonction hook personnalisée
de darc.sites pour charger et renvoyer l'objet
selenium.webdriver.chrome.webdriver.WebDriver d'origine.
En cas de succès, le document HTML source rendu sera sauvegardé, et une capture d'écran pleine page sera prise et sauvegardée.
Si l'API de soumission est fournie, darc.submit.submit_selenium
sera appelée et soumettra le document qui vient d'être chargé.
Ensuite, darc.parse.extract_links sera appelée pour
extraire tous les liens possibles du document HTML et sauvegarder ces
liens dans la base de données requests (cf. darc.db.save_requests).
REMARQUE :
darc prend en charge toutes les versions de Python supérieures à et incluant 3.6.
Actuellement, il ne prend en charge et n'est testé que sur Linux (Ubuntu 18.04)
et macOS (Catalina).
Lors de l'installation avec des versions de Python inférieures à 3.8, darc
utilisera |walrus|_ pour se compiler afin d'assurer la compatibilité rétroportée.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Veuillez vous assurer que Google Chrome et la version correspondante de Chrome Driver sont installés sur votre système.
À partir de la version 0.3.0, nous avons introduit Redis_ comme backend
de base de données pour la file de tâches.
.. _Redis: https://redis.io
Depuis la version 0.6.0, nous avons introduit le stockage en base de données
relationnelle (par ex. MySQL, SQLite, PostgreSQL, etc.) comme backend
de base de données pour la file de tâches, en plus de la base de données Redis,
car cela peut être trop coûteux en mémoire lorsque la file de tâches devient très
volumineuse.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Veuillez vous assurer que l'une des bases de données backend est installée, configurée
et en cours d'exécution lors de l'utilisation du projet darc.
Cependant, le projet darc est livré avec le support de Docker et Compose.
Veuillez consulter la racine du projet pour les fichiers pertinents et plus d'informations.
Ou, vous pouvez vous référer à et/ou installer depuis le dépôt Docker Hub_ :
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
ou depuis le GitHub Container Registry, avec des images plus à jour et complètes :
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
Le projet darc fournit une interface CLI simple ::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...