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查询, 可观测性, 威胁情报, 开发者工具, 数据擦除