pbmundas/threat-intelligence-system
GitHub: pbmundas/threat-intelligence-system
一套集暗网爬虫、Elasticsearch全文检索和数据可视化仪表板于一体的威胁情报采集与分析平台。
Stars: 0 | Forks: 0
#  Omri Zilberstein - Dark Web 爬虫
在本项目中,我创建了一个 Dark Web Scraper 和仪表板,使用了 React.js、Express、Python 3.8、MongoDB 数据库和 Elasticsearch 数据库。 \
抓取的数据会被索引到 Elasticsearch 中,以便进行快速文本查询,而用户数据则保存在 MongoDB 中。 \
该应用已进行 Docker 化,可以通过 docker-compose up 运行。 \
该应用拥有一个仪表板,用于展示收集到的数据、分析结果以及抓取工具的配置选项。 \
使用了 Material-UI 组件来设计页面,并使用 recharts 绘制图表。

## 数据库
- 该应用使用部署在 Atlas Cloud 上的 MongoDB 数据库。
- 该应用使用 Elasticsearch 数据库。
- Elasticsearch 用于文本查询和分析。
- MongoDB 用于存储用户数据。
## 后端
- Express 应用位于 `server/app.js` 路径下,并导出 `index` 对象(`module.exports = app;`)。
- 服务器运行在容器端口 `8080` 上,Docker 将 React 应用暴露在 `http://localhost:8081/`(主机端口 8081 可避免常见的本地端口冲突)。它包含 2 个主要路由:Users 和 Data:
- data:
- [GET] api/data/ 获取所有抓取的数据。
- [GET] api/data/\_search/ 在 Elasticsearch 中搜索特定项目。
- [GET] api/data/\_search/ 获取包含特定标签的项目数量。
- [GET] api/data/\_status/ 获取抓取工具的当前状态。
- [GET] api/data/\_bins/[:page] 用于数据的无限滚动 endpoint。
- [GET] api/data/\_sentiment/ 分析发送数据的情感倾向。
- [POST] api/data/\_status/ 设置抓取工具状态。
- [POST] api/data/ 批量发布新数据。
- user:
- [GET] api/user/\_alerts/ 获取当前用户已查看的 bins。
- [GET] api/user/\_all/ 获取所有用户。
- [GET] api/user/\_config/ 获取当前用户的配置。
- [PUT] api/user/\_alerts/ 更新已查看的 bins。
- [PUT] api/user/\_config/ 更新抓取工具的配置。
- [POST] api/user/\_new\_/ 创建新用户。
## 客户端
- 应用标题为 `Dark Web Scraper`。
- 服务器为该应用提供服务,并展示从 Dark Web 收集到的所有 bins、抓取工具状态、新数据收集提醒、数据分析、配置选项等。
- 应用具有配置表单,您可以在其中编辑 Python 抓取工具的表单。

- 应用会显示抓取工具的状态。
- 开启状态:
- 
- 关闭状态:
- 
- 错误状态:
- 
- 冷却菜单:
- 
- 应用包含一个展示所有数据的表格,您可以将数据标记为已读、恢复所有数据、显示全部内容,以及从所有抓取到的数据中进行全局搜索。
- 
- 应用具有响应式设计:
- 
## 抓取工具
- 该抓取工具使用 Python 编写。
- 支持公共表层网络 HTTP(S) 页面和 v3 onion 服务。
- 默认的代理模式为 auto:只有 onion 主机才会通过 Tor。它也可以被设置为 always 或 never。
- 通用文章/帖子标记会被自动检测;可选的 CSS 选择器和搜索 URL 模板可支持特定网站的布局。
- 请求使用明确的超时设置、瞬时故障重试以及 Tor 端的 DNS。
- 该爬虫不会绕过登录、CAPTCHA、付费墙或访问控制。
现有的 URL、关键词和冷却配置依然有效。新的可选字段包括:urls(多个目标)、proxy_mode、timeout、retries、search_url_template(例如 search?q={query}),以及包含 item、header、content、author 和 date 的 CSS 选择器的 selectors。如果没有提供搜索模板,每个目标将被抓取一次,并在本地应用关键词。
使用以下命令运行单元测试:python -m unittest discover -s scraper/tests -v
### 计划内的多站点收集
Docker worker 会读取 `scraper/sites.json` 并默认每 24 小时运行一次。每个启用的条目都是一个明确的白名单爬取任务。将 `keywords` 设置为 `["all"]` 可保留所有提取的内容,或者提供特定词条以保留匹配的记录。`max_pages`(上限为 500)、`max_depth` 和 `delay_seconds` 用于限制同一主机的爬取范围;站外链接永远不会被跟踪。
每次运行的结果都会写入 `dumps/YYYY-MM-DD/site-name/HHMMSSZ/` 目录下,包含一个清单文件、标准化的 JSONL 记录、页面元数据(包括发现的每个链接及其锚文本)以及原始 HTML 快照。外部链接会被记录但不会被跟踪;只有同一主机的 HTML 页面才会被爬取。
在 `docker-compose.yml` 中修改 `RUN_INTERVAL_HOURS` 以调整计划任务。
编辑 `scraper/sites.json` 添加授权的表层网络或 v3 onion 目标,然后使用 `docker compose up -d --build webscraper` 重启 worker。
## Docker
- 该应用已 Docker 化,您可以通过以下命令在 Docker 平台上运行它:
```
docker-compose up
```
- 该应用包含 Elasticsearch 服务、Server 服务(Node.JS)、Scraper(Python 服务)以及一个 Proxy 服务。
- Docker 将构建一个网络并连接所有服务,它提供热重载功能,因此可以实时编辑代码。
标签:BeEF, Docker, Elasticsearch, MITM代理, Python, React, Syscalls, 代码示例, 后端开发, 安全防御评估, 数据分析, 无后门, 爬虫, 请求拦截