
Rastreador da dark web que usa workers de requests e Selenium para buscar páginas, capturar cabeçalhos e cookies, extrair links e salvar capturas de tela renderizadas para coleta de OSINT.
darc - Projeto de Crawler para a DarkwebPara qualquer informação técnica e/ou de manutenção, por favor consulte o |docs|_.
.. |docs| replace:: Documentação Oficial .. _docs: https://darc.jarryshaw.me
NB: A partir da versão 1.0.0, novas funcionalidades do projeto não serão
desenvolvidas neste repositório público. Apenas correções de bugs e patches de segurança serão
aplicados na atualização e nos novos lançamentos.
darc foi projetado como um canivete suíço para o rastreamento da darkweb.
Ele integra o requests para coletar informações de requisições e respostas
HTTP, como cookies, campos de cabeçalho, etc. Ele também agrega o
selenium para fornecer uma página web totalmente renderizada e uma captura de tela
dessa visualização.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
O processo geral do darc pode ser descrito da seguinte forma:
Existem dois tipos de workers:
crawler -- executa o darc.crawl.crawler para fornecer uma
visão atualizada de um link e testar sua conectividade
loader -- executa o darc.crawl.loader para fornecer uma
visão aprofundada de um link e fornecer mais informações visuais
O processo geral pode ser descrito da seguinte forma para workers do tipo crawler:
darc.process.process_crawler: obtém URLs do banco de dados de links
do requests (cf. darc.db.load_requests), e alimenta tais URLs ao
darc.crawl.crawler.
NOTA:
Se darc.const.FLAG_MP for True, a função será
chamada com suporte a multiprocessing; se darc.const.FLAG_TH
for True, a função será chamada com suporte a multithreading;
se nenhum, a função será chamada em single-threading.
darc.crawl.crawler: analisa a URL usando
darc.link.parse_link, e verifica se é necessário rastrear a
URL (cf. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST e darc.const.LINK_BLACK_LIST);
se verdadeiro, então rastreia a URL com requests.
Se a URL for de um host totalmente novo, darc primeiro tentará
buscar e salvar o robots.txt e os sitemaps do host
(cf. darc.proxy.null.save_robots e darc.proxy.null.save_sitemap),
e extrair e então salvar os links dos sitemaps (cf. darc.proxy.null.read_sitemap)
no banco de dados de links para rastreamento futuro (cf. darc.db.save_requests).
Além disso, se a API de submissão for fornecida, darc.submit.submit_new_host
será chamado e submeterá os documentos recém-obtidos.
Se robots.txt estiver presente, e darc.const.FORCE for
False, darc verificará se é permitido rastrear a URL.
NOTA:
O caminho raiz (por exemplo, / em https://www.example.com/) sempre
será rastreado ignorando o robots.txt.
Neste ponto, darc chamará a função de hook personalizada
de darc.sites para rastrear e obter o objeto de resposta final.
darc salvará os cookies de sessão e as informações de cabeçalho,
usando darc.save.save_headers.
NOTA:
Se requests.exceptions.InvalidSchema for levantada, o link
será salvo por darc.proxy.null.save_invalid. O processamento
adicional é descartado.
Se o tipo de conteúdo do documento de resposta não for ignorado (cf.
darc.const.MIME_WHITE_LIST e darc.const.MIME_BLACK_LIST),
darc.submit.submit_requests será chamado e submeterá o documento
recém-obtido.
Se o documento de resposta for HTML (text/html e application/xhtml+xml),
darc.parse.extract_links será chamado então para extrair todos os links
possíveis do documento HTML e salvar tais links no banco de dados
(cf. darc.db.save_requests).
E se o código de status da resposta estiver entre 400 e 600,
a URL será salva de volta no banco de dados de links
(cf. darc.db.save_requests). Se NÃO, a URL será
salva no banco de dados de links do selenium para prosseguir com os próximos passos
(cf. darc.db.save_selenium).
O processo geral pode ser descrito da seguinte forma para workers do tipo loader:
darc.process.process_loader: enquanto isso, darc irá
obter URLs a partir da base de dados de links do selenium (cf. darc.db.load_selenium),
e fornecer tais URLs ao darc.crawl.loader.
NOTA:
Se darc.const.FLAG_MP for True, a função será
chamada com suporte a multiprocessing; se darc.const.FLAG_TH
for True, a função será chamada com suporte a multithreading;
caso contrário, a função será chamada em single-threading.
darc.crawl.loader: analisa o URL usando
darc.link.parse_link e inicia o carregamento do URL usando
selenium com o Google Chrome.
Neste ponto, darc irá chamar a função hook personalizada
de darc.sites para carregar e retornar o objeto
selenium.webdriver.chrome.webdriver.WebDriver original.
Se bem-sucedido, o documento HTML de origem renderizado será guardado, e uma captura de ecrã de página inteira será tirada e guardada.
Se a API de submissão for fornecida, darc.submit.submit_selenium
será chamada e submeterá o documento acabado de carregar.
Posteriormente, darc.parse.extract_links será chamada para
extrair todos os links possíveis do documento HTML e guardar tais
links na base de dados requests (cf. darc.db.save_requests).
NOTA:
darc suporta todas as versões de Python acima e incluindo a 3.6.
Atualmente, apenas suporta e é testado em Linux (Ubuntu 18.04)
e macOS (Catalina).
Ao instalar em versões de Python abaixo da 3.8, darc irá
usar |walrus|_ para se compilar para compatibilidade de backport.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Certifique-se de que tem o Google Chrome e a versão correspondente do Chrome Driver instalados no seu sistema.
A partir da versão 0.3.0, introduzimos o Redis_ para o backend
da base de dados da fila de tarefas.
.. _Redis: https://redis.io
Desde a versão 0.6.0, introduzimos armazenamento em base de dados relacional
(por exemplo, MySQL, SQLite, PostgreSQL, etc.) para o backend
da base de dados da fila de tarefas, além da base de dados Redis, uma vez que
pode ser demasiado dispendioso em termos de memória quando a fila de tarefas se torna muito grande.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Certifique-se de que tem uma das bases de dados de backend instalada, configurada
e em execução ao usar o projeto darc.
No entanto, o projeto darc é distribuído com suporte a Docker e Compose.
Consulte a raiz do projeto para os ficheiros relevantes e mais informações.
Ou pode consultar e/ou instalar a partir do repositório Docker Hub_:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
ou do GitHub Container Registry, com imagens mais atualizadas e abrangentes:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
O projeto darc fornece uma CLI simples::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw