m-daniyal-naseer/cpp-threat-intelligence-tool
GitHub: m-daniyal-naseer/cpp-threat-intelligence-tool
一款基于 C++ 的控制台威胁情报工具,通过整合 AbuseIPDB、IPStack 和 VirusTotal 三个 API 对 IP 地址进行综合风险评级与持久化管理。
Stars: 0 | Forks: 0
# C++ 威胁情报工具
一个使用 C++ 构建的基于控制台的威胁情报工具,可通过三个真实的安全 API 检查 IP 地址,并返回综合的威胁判定结果。
## 功能介绍
给定一个 IP 地址,该工具会执行以下操作:
- 验证 IP 格式
- 通过 **AbuseIPDB** 检查滥用报告
- 通过 **IPStack** 获取位置/ISP 信息
- 通过 **VirusTotal** 在 90 多种安全引擎中进行扫描
- 将这三项结果合并为一个单一的 **HIGH / MEDIUM / LOW** 判定结果
- 将结果存储在内存(vector)中,并将其持久化到本地文件
## 示例输出
```
=====================================
THREAT INTELLIGENCE SYSTEM
=====================================
1. Add Threat
2. Display All
3. Search by IP
4. Delete Threat
5. Filter by Level
7. Exit
=====================================
Enter choice: 1
--- Add New Threat ---
Enter IP: 185.220.101.45
----------------------------
Abuse Score: 100/100
Country: DE
Total Reports: 57
----------------------------
Country: Germany
City: Bonn
Zip: 53111
ISP: Stiftung Erneuerbare Freiheit
----------------------------
VirusTotal Results:
Malicious: 16
Suspicious: 3
Harmless: 42
----------------------------
Final Verdict: HIGH
------------------END OF REPORT----------------------
```
## 功能特性
- 菜单驱动的 CRUD 系统 —— 添加、显示、搜索、删除和过滤威胁
- IP 格式验证(在调用任何 API 之前拒绝格式错误的输入)
- 交叉比对 3 个独立的威胁情报源
- 优雅的错误处理(在所有 JSON 解析周围使用 try/catch —— 即使 API 响应为空或格式错误也不会崩溃)
- 检测并跳过私有 IP 范围(无需为本地地址查询公共 API)
- 将结果保存到本地文件,以实现多次运行间的持久化
## 技术栈
- **C++** —— 核心逻辑、OOP(`Threat` 类)、STL vector
- **libcurl** —— 向外部 API 发送 HTTP 请求
- **nlohmann/json** —— JSON 解析
- **API:** [AbuseIPDB](https://www.abuseipdb.com/)、[IPStack](https://ipstack.com/)、[VirusTotal](https://www.virustotal.com/)
## 环境配置 (Windows / MSYS2)
本项目使用 Windows 上的 MSYS2 MinGW x64 构建和测试。
1. 安装 [MSYS2](https://www.msys2.org/)
2. 打开 **MSYS2 MinGW x64** 终端并安装依赖项:
pacman -S mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-curl
pacman -S mingw-w64-x86_64-nlohmann-json
3. 在 `day1.cpp` 中添加你自己的 API 密钥(可从 AbuseIPDB、IPStack 和 VirusTotal 获取免费密钥):
string apikey = "YOUR_API_KEY_HERE";
4. 编译并运行(在 MSYS2 MinGW x64 终端中,进入项目文件夹后执行):
g++ -o main day1.cpp -lcurl
./main
## 开发经验总结
这是我第一次在 C++ 中使用真实世界的 API。在这个过程中,我不得不:
- 从零开始搭建合适的 C++/curl 构建环境(理清 MinGW、MSYS2 和 MSYS 之间的区别 —— 它们并不是一回事)
- 调试由缺失库路径引起的链接器错误(`ld returned 5 exit status`)
- 处理不一致或为空的 API 响应,同时确保程序不会崩溃(在 JSON 解析周围使用 try/catch)
- 了解 3 个不同 API 的 HTTP 标头和身份验证模式(URL 参数与自定义标头的对比)
- 将多个独立的数据源合并为一个连贯的决策
## 未来改进
- 不区分大小写的搜索/过滤
- 更严格的私有 IP 范围检测
- URL 和电子邮件信誉检查(Google Safe Browsing、AbstractAPI)
- 可能会开发基于 Web 的前端
## 免责声明
这是一个学习项目。本项目不包含 API 密钥 —— 请从相应的提供商处获取你自己的免费密钥,并在运行前在本地添加它们。
标签:API集成, C++, GitHub, IP查询, 可观测性, 威胁情报, 开发者工具, 数据擦除