
requests와 Selenium 워커를 사용해 페이지를 가져오고, 헤더와 쿠키를 캡처하며, 링크를 추출하고, OSINT 수집을 위한 렌더링된 스크린샷을 저장하는 다크웹 크롤러입니다.
darc - 다크웹 크롤러 프로젝트기술 및/또는 유지보수 정보는 |docs|_ 를 참고해 주시기 바랍니다.
.. |docs| replace:: 공식 문서 .. _docs: https://darc.jarryshaw.me
참고: 버전 1.0.0부터 프로젝트의 새로운 기능은
이 공개 저장소에서 개발되지 않습니다. 버그 수정과 보안 패치만
업데이트 및 새 릴리스에 적용됩니다.
darc는 다크웹 크롤링을 위한 스위스 군용 칼로 설계되었습니다.
requests를 통합하여 쿠키, 헤더 필드 등과 같은 HTTP 요청 및 응답
정보를 수집합니다. 또한 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: requests
링크 데이터베이스(참조: darc.db.load_requests)에서 URL을 가져와
해당 URL을 darc.crawl.crawler에 전달합니다.
참고:
darc.const.FLAG_MP가 True이면, 함수는
멀티프로세싱 지원으로 호출됩니다; darc.const.FLAG_TH가
True이면, 함수는 멀티스레딩
지원으로 호출됩니다; 둘 다 아니면, 함수는 단일 스레딩으로 호출됩니다.
darc.crawl.crawler: darc.link.parse_link를 사용하여 URL을
파싱하고, 해당 URL을 크롤링해야 하는지 확인합니다
(참조: darc.const.PROXY_WHITE_LIST, darc.const.PROXY_BLACK_LIST,
darc.const.LINK_WHITE_LIST 및 darc.const.LINK_BLACK_LIST);
필요하다면 requests로 URL을 크롤링합니다.
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는 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는
selenium 링크 데이터베이스(참조: darc.db.load_selenium)에서 URL을
가져와, 해당 URL을 darc.crawl.loader에 전달합니다.
참고:
darc.const.FLAG_MP가 True이면, 해당 함수는
멀티프로세싱 지원과 함께 호출됩니다; darc.const.FLAG_TH가
True이면, 해당 함수는 멀티스레딩 지원과 함께 호출됩니다;
둘 다 아니면, 해당 함수는 단일 스레딩으로 호출됩니다.
darc.crawl.loader: darc.link.parse_link를 사용하여 URL을
파싱하고, Google Chrome과 함께 selenium을 사용하여 URL 로딩을
시작합니다.
이 시점에서, darc는 darc.sites의 사용자 정의 훅 함수를
호출하여 원본 selenium.webdriver.chrome.webdriver.WebDriver
객체를 로드하고 반환합니다.
성공하면, 렌더링된 소스 HTML 문서가 저장되고, 전체 페이지 스크린샷이 촬영되어 저장됩니다.
제출 API가 제공되면, darc.submit.submit_selenium이 호출되어
방금 로드된 문서를 제출합니다.
이후, darc.parse.extract_links가 호출되어 HTML 문서에서
가능한 모든 링크를 추출하고, 해당 링크를 requests 데이터베이스에
저장합니다(참조: darc.db.save_requests).
참고:
darc는 3.6을 포함한 모든 Python 버전 이상을 지원합니다.
현재는 Linux(Ubuntu 18.04)와 macOS(Catalina)에서만 지원 및
테스트됩니다.
3.8 미만의 Python 버전에서 설치할 때, 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부터, 작업 큐가 매우 커질 때 메모리 비용이
너무 많이 들 수 있기 때문에, Redis_ 데이터베이스 외에도
관계형 데이터베이스 저장소(예: MySQL, SQLite, PostgreSQL_ 등)를
작업 큐 데이터베이스 백엔드로 도입했습니다.
.. _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
모듈 진입점을 통해서도 호출할 수 있습니다::
python -m darc ...
참고:
링크 파일에는 #으로 시작하는 주석 줄이 포함될 수 있습니다.
빈 줄과 주석 줄은 로딩 시 무시됩니다.