
Краулер для даркнета, использующий воркеры на основе requests и Selenium для загрузки страниц, захвата заголовков и cookie, извлечения ссылок и сохранения отрендеренных скриншотов для сбора данных OSINT.
darc - Проект краулера даркнетаЗа любой технической и/или информацией по обслуживанию, пожалуйста, обращайтесь к |docs|_.
.. |docs| replace:: Официальная документация .. _docs: https://darc.jarryshaw.me
NB: Начиная с версии 1.0.0, новые функции проекта не будут
разрабатываться в этом публичном репозитории. В обновления и новые релизы будут
вноситься только исправления ошибок и патчи безопасности.
darc разработан как швейцарский армейский нож для краулинга даркнета.
Он интегрирует requests для сбора информации о HTTP-запросах и ответах,
такой как cookies, поля заголовков и т.д. Он также включает
selenium для предоставления полностью отрендеренной веб-страницы и скриншота
такого вида.
.. image:: https://darc.jarryshaw.me/en/latest/_images/darc.jpeg
Общий процесс работы darc можно описать следующим образом:
Существует два типа воркеров:
crawler -- запускает darc.crawl.crawler для предоставления
свежего представления ссылки и проверки её доступности
loader -- запускает darc.crawl.loader для предоставления
углублённого представления ссылки и предоставления дополнительной визуальной информации
Общий процесс для воркеров типа crawler можно описать следующим образом:
darc.process.process_crawler: получает URL-адреса из базы данных
ссылок requests (см. darc.db.load_requests) и передаёт такие URL-адреса в
darc.crawl.crawler.
ПРИМЕЧАНИЕ:
Если darc.const.FLAG_MP равен True, функция будет
вызвана с поддержкой многопроцессности; если darc.const.FLAG_TH
равен True, функция будет вызвана с поддержкой многопоточности;
если ни то, ни другое, функция будет вызвана в однопоточном режиме.
darc.crawl.crawler: разбирает URL с помощью
darc.link.parse_link и проверяет, нужно ли краулить
URL (см. darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST и darc.const.LINK_BLACK_LIST);
если да, то краулит URL с помощью requests.
Если URL принадлежит совершенно новому хосту, darc сначала попытается
получить и сохранить robots.txt и карты сайта хоста
(см. darc.proxy.null.save_robots и darc.proxy.null.save_sitemap),
а затем извлечь и сохранить ссылки из карт сайта (см. darc.proxy.null.read_sitemap)
в базу данных ссылок для последующего краулинга (см. darc.db.save_requests).
Кроме того, если предоставлен API отправки, будет вызван darc.submit.submit_new_host
и отправлены только что полученные документы.
Если robots.txt присутствует и darc.const.FORCE равен
False, darc проверит, разрешено ли краулить URL.
ПРИМЕЧАНИЕ:
Корневой путь (например, / в https://www.example.com/) всегда
будет краулиться в обход robots.txt.
На этом этапе darc вызовет настроенную функцию-хук
из darc.sites для краулинга и получения итогового объекта ответа.
darc сохранит cookies сессии и информацию заголовков,
используя darc.save.save_headers.
ПРИМЕЧАНИЕ:
Если возникает requests.exceptions.InvalidSchema, ссылка
будет сохранена с помощью darc.proxy.null.save_invalid. Дальнейшая
обработка прекращается.
Если тип содержимого документа ответа не игнорируется (см.
darc.const.MIME_WHITE_LIST и darc.const.MIME_BLACK_LIST),
будет вызван darc.submit.submit_requests и отправлен документ,
только что полученный.
Если документ ответа является HTML (text/html и application/xhtml+xml),
будет вызван darc.parse.extract_links для извлечения всех возможных
ссылок из HTML-документа и сохранения таких ссылок в базу данных
(см. darc.db.save_requests).
А если код состояния ответа находится между 400 и 600,
URL будет сохранён обратно в базу данных ссылок
(см. darc.db.save_requests). Если НЕТ, URL будет
сохранён в базу данных ссылок selenium для выполнения следующих шагов
(см. darc.db.save_selenium).
Общий процесс для воркеров типа loader можно описать следующим образом:
darc.process.process_loader: тем временем darc будет
получать URL из базы данных ссылок selenium (см. darc.db.load_selenium),
и передавать такие URL в darc.crawl.loader.
ПРИМЕЧАНИЕ:
Если darc.const.FLAG_MP равен True, функция будет
вызываться с поддержкой multiprocessing; если darc.const.FLAG_TH
равен True, функция будет вызываться с поддержкой
multithreading; если ни то, ни другое, функция будет вызываться в режиме однопоточности.
darc.crawl.loader: разбирает URL с помощью
darc.link.parse_link и начинает загрузку URL с помощью
selenium с Google Chrome.
На этом этапе darc вызовет настроенную hook-функцию
из darc.sites, чтобы загрузить и вернуть исходный
объект selenium.webdriver.chrome.webdriver.WebDriver.
В случае успеха отрендеренный исходный HTML-документ будет сохранён, а полноэкранный скриншот будет сделан и сохранён.
Если предоставлен API отправки, будет вызван darc.submit.submit_selenium,
который отправит только что загруженный документ.
Позже будет вызван darc.parse.extract_links, чтобы
извлечь все возможные ссылки из HTML-документа и сохранить такие
ссылки в базу данных requests (см. darc.db.save_requests).
ПРИМЕЧАНИЕ:
darc поддерживает все версии Python выше и включая 3.6.
В настоящее время он поддерживается и тестируется только на Linux (Ubuntu 18.04)
и macOS (Catalina).
При установке на версиях Python ниже 3.8 darc будет
использовать |walrus|_ для собственной компиляции в целях обратной совместимости.
.. |walrus| replace:: walrus
.. _walrus: https://github.com/pybpc/walrus
.. code-block:: shell
pip install python-darc
Пожалуйста, убедитесь, что в вашей системе установлены Google Chrome и соответствующая версия Chrome Driver.
Начиная с версии 0.3.0, мы внедрили Redis_ в качестве бэкенда базы данных очереди задач.
.. _Redis: https://redis.io
Начиная с версии 0.6.0, мы внедрили реляционное хранилище баз данных
(например, MySQL, SQLite, PostgreSQL_ и т. д.) в качестве бэкенда базы данных очереди задач,
помимо базы данных Redis_, поскольку это может быть слишком затратно по памяти,
когда очередь задач становится очень большой.
.. _MySQL: https://mysql.com/ .. _SQLite: https://www.sqlite.org/ .. _PostgreSQL: https://www.postgresql.org/
Пожалуйста, убедитесь, что одна из бэкенд-баз данных установлена, настроена
и запущена при использовании проекта darc.
Однако проект darc поставляется с поддержкой Docker и Compose.
Пожалуйста, обратитесь к корню проекта для получения соответствующих файлов и дополнительной информации.
Или вы можете обратиться к репозиторию Docker Hub_ и/или установить из него:
.. code-block:: shell
docker pull jsnbzh/darc[:TAGNAME]
.. _Docker Hub: https://hub.docker.com/r/jsnbzh/darc
или из GitHub Container Registry, с более актуальными и полными образами:
.. code-block:: shell
docker pull ghcr.io/jarryshaw/darc[:TAGNAME]
docker pull ghcr.io/jarryshaw/darc-debug[:TAGNAME]
Проект darc предоставляет простой CLI::
usage: darc [-h] [-v] -t {crawler,loader} [-f FILE] ...
the darkweb crawling swiss army knife
positional arguments: link links to craw
optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -t {crawler,loader}, --type {crawler,loader} type of worker process -f FILE, --file FILE read links from file
Его также можно вызвать через точку входа модуля::