
Rastreador de darkweb que utiliza workers de requests y Selenium para obtener páginas, capturar encabezados y cookies, extraer enlaces y guardar capturas de pantalla renderizadas para la recopilación de OSINT.
darc - Proyecto de rastreador de la darkwebPara cualquier información técnica y/o de mantenimiento, por favor consulte amablemente |docs|_.
.. |docs| replace:: Documentación Oficial .. _docs: https://darc.jarryshaw.me
NB: A partir de la versión 1.0.0, las nuevas funcionalidades del proyecto no se
desarrollarán en este repositorio público. Solo se aplicarán correcciones de errores y parches de seguridad
a la actualización y a las nuevas versiones.
darc está diseñado como una navaja suiza para el rastreo de la darkweb.
Integra requests para recopilar información de solicitudes y respuestas HTTP,
como cookies, campos de encabezado, etc. También incluye
selenium para proporcionar una página web completamente renderizada y una captura de pantalla
de dicha vista.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
El proceso general de darc se puede describir de la siguiente manera:
Hay dos tipos de workers:
crawler -- ejecuta darc.crawl.crawler para proporcionar una
vista fresca de un enlace y probar su conectabilidad
loader -- ejecuta darc.crawl.loader para proporcionar una
vista en profundidad de un enlace y proporcionar más información visual
El proceso general se puede describir de la siguiente manera para los workers de tipo crawler:
darc.process.process_crawler: obtiene las URL de la base de datos de enlaces de requests
(cf. darc.db.load_requests), y alimenta dichas URL a
darc.crawl.crawler.
NOTA:
Si darc.const.FLAG_MP es True, la función se
llamará con soporte de multiprocesamiento; si darc.const.FLAG_TH
es True, la función se llamará con soporte de multihilo;
si ninguno, la función se llamará en modo de un solo hilo.
darc.crawl.crawler: analiza la URL usando
darc.link.parse_link, y comprueba si es necesario rastrear la
URL (cf. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST y darc.const.LINK_BLACK_LIST);
si es así, entonces rastrea la URL con requests.
Si la URL proviene de un host completamente nuevo, darc primero intentará
obtener y guardar robots.txt y los sitemaps del host
(cf. darc.proxy.null.save_robots y darc.proxy.null.save_sitemap),
y extraer y luego guardar los enlaces de los sitemaps (cf. darc.proxy.null.read_sitemap)
en la base de datos de enlaces para su futuro rastreo (cf. darc.db.save_requests).
Además, si se proporciona la API de envío, se llamará a darc.submit.submit_new_host
y se enviarán los documentos recién obtenidos.
Si robots.txt está presente, y darc.const.FORCE es
False, darc comprobará si se permite rastrear la URL.
NOTA:
La ruta raíz (p. ej. / en https://www.example.com/) siempre
se rastreará ignorando robots.txt.
En este punto, darc llamará a la función hook personalizada
de darc.sites para rastrear y obtener el objeto de respuesta final.
darc guardará las cookies de sesión y la información de encabezado,
usando darc.save.save_headers.
NOTA:
Si se lanza requests.exceptions.InvalidSchema, el enlace
se guardará mediante darc.proxy.null.save_invalid. Se descarta
el procesamiento posterior.
Si el tipo de contenido del documento de respuesta no se ignora (cf.
darc.const.MIME_WHITE_LIST y darc.const.MIME_BLACK_LIST),
se llamará a darc.submit.submit_requests y se enviará el documento
recién obtenido.
Si el documento de respuesta es HTML (text/html y application/xhtml+xml),
se llamará entonces a darc.parse.extract_links para extraer todos los enlaces
posibles del documento HTML y guardar dichos enlaces en la base de datos
(cf. darc.db.save_requests).
Y si el código de estado de la respuesta está entre 400 y 600,
la URL se guardará de vuelta en la base de datos de enlaces
(cf. darc.db.save_requests). Si NO es así, la URL se
guardará en la base de datos de enlaces de selenium para continuar con los siguientes pasos
(cf. darc.db.save_selenium).
El proceso general se puede describir de la siguiente manera para los workers de tipo loader:
darc.process.process_loader: mientras tanto, darc
obtendrá URLs de la base de datos de enlaces de selenium (cf. darc.db.load_selenium),
y alimentará dichas URLs a darc.crawl.loader.
NOTA:
Si darc.const.FLAG_MP es True, la función se
llamará con soporte de multiprocessing; si darc.const.FLAG_TH
es True, la función se llamará con soporte de multithreading;
si ninguno, la función se llamará en modo de un solo hilo.
darc.crawl.loader: analiza la URL usando
darc.link.parse_link y comienza a cargar la URL usando
selenium con Google Chrome.
En este punto, darc llamará a la función hook personalizada
de darc.sites para cargar y devolver el objeto original
selenium.webdriver.chrome.webdriver.WebDriver.
Si tiene éxito, se guardará el documento HTML de origen renderizado y se tomará y guardará una captura de pantalla de página completa.
Si se proporciona la API de envío, se llamará a darc.submit.submit_selenium
y se enviará el documento recién cargado.
Posteriormente, se llamará a darc.parse.extract_links para
extraer todos los enlaces posibles del documento HTML y guardar dichos
enlaces en la base de datos de requests (cf. darc.db.save_requests).
NOTA:
darc es compatible con todas las versiones de Python superiores e incluye 3.6.
Actualmente, solo es compatible y está probado en Linux (Ubuntu 18.04)
y macOS (Catalina).
Al instalar en versiones de Python inferiores a 3.8, darc
usará |walrus|_ para compilarse a sí mismo por compatibilidad con versiones anteriores.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Asegúrese de tener Google Chrome y la versión correspondiente de Chrome Driver instalados en su sistema.
A partir de la versión 0.3.0, introdujimos Redis_ como backend
de base de datos para la cola de tareas.
.. _Redis: https://redis.io
Desde la versión 0.6.0, introdujimos almacenamiento en base de datos relacional
(p. ej. MySQL, SQLite, PostgreSQL, etc.) para el backend de base de datos
de la cola de tareas, además de la base de datos Redis, ya que puede resultar
demasiado costoso en memoria cuando la cola de tareas se vuelve muy grande.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Asegúrese de tener una de las bases de datos backend instalada, configurada
y en ejecución al usar el proyecto darc.
Sin embargo, el proyecto darc se distribuye con soporte para Docker y Compose.
Consulte la raíz del proyecto para los archivos relevantes y más información.
O bien, puede consultar y/o instalar desde el repositorio de Docker Hub_:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
o desde GitHub Container Registry, con imágenes más actualizadas y completas:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
El proyecto darc proporciona una CLI simple::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw