
Crawler per il dark web che utilizza worker basati su requests e Selenium per recuperare le pagine, catturare header e cookie, estrarre link e salvare screenshot renderizzati per la raccolta OSINT.
darc - Progetto Crawler per il DarkwebPer qualsiasi informazione tecnica e/o di manutenzione, si prega di fare riferimento a |docs|_.
.. |docs| replace:: Documentazione Ufficiale .. _docs: https://darc.jarryshaw.me
NB: A partire dalla versione 1.0.0, le nuove funzionalità del progetto non saranno
sviluppate in questo repository pubblico. Solo correzioni di bug e patch di sicurezza saranno
applicate agli aggiornamenti e alle nuove release.
darc è progettato come un coltellino svizzero per il crawling del darkweb.
Integra requests per raccogliere informazioni sulle richieste e risposte
HTTP, come cookie, campi di intestazione, ecc. Include inoltre
selenium per fornire una pagina web completamente renderizzata e uno screenshot
di tale visualizzazione.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
Il processo generale di darc può essere descritto come segue:
Esistono due tipi di worker:
crawler -- esegue darc.crawl.crawler per fornire una
vista aggiornata di un link e testarne la connettività
loader -- esegue darc.crawl.loader per fornire una
vista approfondita di un link e fornire maggiori informazioni visive
Il processo generale può essere descritto come segue per i worker di tipo crawler:
darc.process.process_crawler: ottiene gli URL dal database dei link
di requests (cfr. darc.db.load_requests), e alimenta tali URL a
darc.crawl.crawler.
NOTA:
Se darc.const.FLAG_MP è True, la funzione sarà
chiamata con supporto multiprocessing; se darc.const.FLAG_TH
è True, la funzione sarà chiamata con supporto
multithreading; se nessuno dei due, la funzione sarà chiamata in single-threading.
darc.crawl.crawler: analizza l'URL usando
darc.link.parse_link, e verifica se è necessario eseguire il crawl
dell'URL (cfr. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST e darc.const.LINK_BLACK_LIST);
se vero, allora esegue il crawl dell'URL con requests.
Se l'URL proviene da un host completamente nuovo, darc proverà prima
a recuperare e salvare robots.txt e le sitemap dell'host
(cfr. darc.proxy.null.save_robots e darc.proxy.null.save_sitemap),
ed estrarre poi salvare i link dalle sitemap (cfr. darc.proxy.null.read_sitemap)
nel database dei link per il crawling futuro (cfr. darc.db.save_requests).
Inoltre, se l'API di invio è fornita, darc.submit.submit_new_host
sarà chiamata e invierà i documenti appena recuperati.
Se robots.txt è presente, e darc.const.FORCE è
False, darc verificherà se è consentito eseguire il crawl dell'URL.
NOTA:
Il percorso radice (ad es. / in https://www.example.com/) sarà sempre
sottoposto a crawl ignorando robots.txt.
A questo punto, darc chiamerà la funzione hook personalizzata
da darc.sites per eseguire il crawl e ottenere l'oggetto risposta finale.
darc salverà i cookie di sessione e le informazioni di intestazione,
usando darc.save.save_headers.
NOTA:
Se viene sollevata requests.exceptions.InvalidSchema, il link
sarà salvato da darc.proxy.null.save_invalid. L'ulteriore
elaborazione viene interrotta.
Se il tipo di contenuto del documento di risposta non è ignorato (cfr.
darc.const.MIME_WHITE_LIST e darc.const.MIME_BLACK_LIST),
darc.submit.submit_requests sarà chiamata e invierà il documento
appena recuperato.
Se il documento di risposta è HTML (text/html e application/xhtml+xml),
darc.parse.extract_links sarà chiamata per estrarre tutti i possibili
link dal documento HTML e salvare tali link nel database
(cfr. darc.db.save_requests).
E se il codice di stato della risposta è compreso tra 400 e 600,
l'URL sarà salvato nuovamente nel database dei link
(cfr. darc.db.save_requests). Se NO, l'URL sarà
salvato nel database dei link di selenium per procedere con i passaggi successivi
(cfr. darc.db.save_selenium).
Il processo generale può essere descritto come segue per i worker di tipo loader:
darc.process.process_loader: nel frattempo, darc
otterrà gli URL dal database dei link di selenium (cfr. darc.db.load_selenium),
e passerà tali URL a darc.crawl.loader.
NOTA:
Se darc.const.FLAG_MP è True, la funzione verrà
chiamata con supporto multiprocessing; se darc.const.FLAG_TH
è True, la funzione verrà chiamata con supporto
multithreading; se nessuno dei due, la funzione verrà chiamata in single-threading.
darc.crawl.loader: analizza l'URL usando
darc.link.parse_link e avvia il caricamento dell'URL usando
selenium con Google Chrome.
A questo punto, darc chiamerà la funzione hook personalizzata
da darc.sites per caricare e restituire l'oggetto originale
selenium.webdriver.chrome.webdriver.WebDriver.
Se ha successo, il documento HTML sorgente renderizzato verrà salvato, e verrà acquisito e salvato uno screenshot a pagina intera.
Se viene fornita l'API di submission, verrà chiamata darc.submit.submit_selenium
che invierà il documento appena caricato.
Successivamente, verrà chiamata darc.parse.extract_links per
estrarre tutti i possibili link dal documento HTML e salvare tali
link nel database requests (cfr. darc.db.save_requests).
NOTA:
darc supporta tutte le versioni di Python superiori a e includenti la 3.6.
Attualmente, supporta ed è testato solo su Linux (Ubuntu 18.04)
e macOS (Catalina).
Quando installato su versioni di Python inferiori alla 3.8, darc
utilizzerà |walrus|_ per compilarsi al fine di garantire la compatibilità backport.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Assicurati di avere Google Chrome e la versione corrispondente di Chrome Driver installati sul tuo sistema.
A partire dalla versione 0.3.0, abbiamo introdotto Redis_ come backend
del database della coda dei task.
.. _Redis: https://redis.io
Dalla versione 0.6.0, abbiamo introdotto l'archiviazione su database relazionale
(ad es. MySQL, SQLite, PostgreSQL, ecc.) per il backend del database della coda
dei task, oltre al database Redis, poiché può essere troppo dispendioso in termini di memoria
quando la coda dei task diventa molto grande.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Assicurati di avere uno dei database backend installato, configurato
e in esecuzione quando utilizzi il progetto darc.
Tuttavia, il progetto darc è distribuito con supporto a Docker e Compose.
Consulta la root del progetto per i file pertinenti e maggiori informazioni.
Oppure, puoi fare riferimento e/o installare dal repository Docker Hub_:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
oppure dal GitHub Container Registry, con immagini più aggiornate e complete:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
Il progetto darc fornisce una semplice CLI::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw