diagonalciso/soc-threatmap
GitHub: diagonalciso/soc-threatmap
SOCmap 是一个纯 Python 实现的实时全球网络攻击可视化地图,聚合多个免费威胁情报源并以动画弧线和音效直观呈现恶意 IP 的地理分布与攻击动态。
Stars: 1 | Forks: 0
# SOCmap — 实时威胁源网络攻击地图
一个独立的、Norse 风格的实时攻击地图。轮询**免费的公共威胁源**,对每个恶意 IP 进行地理定位,并将这些命中攻击以发光弧线的形式动态呈现,飞向 HTML5 canvas 世界地图上的传感器“基地”——配备合成的环境背景音和针对每次攻击的音效。纯 Python **标准库**,无需框架、无需数据库、无需 API 密钥。
## 快速开始
### 选项 A — 预构建二进制文件(无需 Python)
从[最新发布版本](../../releases/latest)下载:
| 平台 | 文件 |
|----------|------|
| Windows | `socmap-windows-x64.exe` |
| Linux | `socmap-linux-x64` |
| Android | `socmap-android.apk`(侧载安装 — *设置 → 允许未知来源*) |
**Windows:** 双击 `socmap-windows-x64.exe`(SmartScreen 可能会对未签名的二进制文件发出警告 → *更多信息 → 仍要运行*)。随后会打开一个控制台窗口;在浏览器中访问 **http://localhost:8100**。
**Linux:**
```
chmod +x socmap-linux-x64
./socmap-linux-x64
# 打开 http://localhost:8100
```
### 选项 B — 从源码运行(Python 3.8+)
```
git clone https://github.com/diagonalciso/soc-threatmap
cd soc-threatmap
cp .env.example .env # optional — tweak home location, etc.
./run.sh # Windows: run.bat
# http://localhost:8100
```
服务器默认绑定 `0.0.0.0:8100`,因此局域网 (LAN) 中的其他设备可以通过 `http://<本机IP>:8100` 访问它。
## 声音
点击 **🔇 按钮(右上角)**以启用音频(浏览器会阻止自动播放,直到您与页面发生交互)。您将听到:
- **环境低音**(通过缓慢扫描的滤波器处理的失谐低频振荡器),以及
- **每次攻击的“zap”音效** — 音高取决于攻击类型,**立体声平移取决于源的经度**(亚洲 → 右侧,美洲 → 左侧),音量取决于源权重。
所有声音均使用 Web Audio API 在浏览器中合成 — 无需音频文件。
再次点击可静音。
## 配置 (`.env`)
将 `.env.example` 复制为 `.env`(放置在二进制文件或 `app.py` 旁边)。它会被自动加载 — 无需导出 shell 变量。
| 键 | 默认值 | 含义 |
|-----|---------|---------|
| `HOST` | `0.0.0.0` | 绑定地址(`127.0.0.1` = 仅限 localhost) |
| `PORT` | `8100` | HTTP 端口 |
| `HOME_LAT` / `HOME_LON` | `52.37` / `4.90` | 传感器“基地”锚点(默认阿姆斯特丹) |
| `EMIT_RATE` | `6` | 从威胁源突发数据中消耗并以每秒发射的弧线数(用于平滑处理) |
| `REPLAY_RATE` | `1.6` | 从池中每秒重播的弧线数,以使地图永远不会闲置(`0` = 关闭) |
| `POOL_MAX` | `6000` | 保留用于重播的已地理定位事件数 |
| `FIRST_BURST` | `40` | 威胁源首次轮询时发射的弧线数 |
| `GEOIP_MMDB` | — | MaxMind **GeoLite2-City.mmdb** 的路径,用于实现城市级精确地理定位(可选) |
| `THREATFOX_KEY` | — | abuse.ch 的 [Auth-Key](https://auth.abuse.ch/),用于启用 ThreatFox 源 |
| `CONTACT_EMAIL` | `admin@example.com` | 在 User-Agent 中发送(DShield 要求提供真实的联系方式) |
| `FEED_TIMEOUT` | `25` | 单次请求超时时间(秒) |
**GeoIP 准确度:**如果没有 mmdb,Feodo IP 将回退到国家质心,其余 IP 将回退到确定性的合成陆地散布(显示为褪色效果)。将免费的 GeoLite2-City `.mmdb` 放在应用程序旁边,并将 `GEOIP_MMDB` 指向它,即可实现精准定位。
## 威胁源(完全免费)
| 来源 | 数据 | 认证 |
|--------|------|------|
| abuse.ch **Feodo Tracker** | 活跃的僵尸网络 C2 IP(+ 国家) | 无 |
| abuse.ch **URLhaus** | 实时的恶意软件托管 URL(IP 主机) | 无 |
| abuse.ch **ThreatFox** | 最近的恶意软件 IOC IP | 免费密钥 |
| SANS **DShield/ISC** | 顶级攻击源 IP(源自蜜罐) | UA 中包含电子邮件 |
| **blocklist.de** (+ ssh) | 被报告的攻击者 / SSH 暴力破解者 | 无 |
| **CINS Army** | 社区恶意行为者 IP | 无 |
| **GreenSnow** | 攻击者 IP | 无 |
| **Emerging Threats** | 被攻陷的主机 | 无 |
| **DataPlane.org** | SSH / telnet / VNC / SIP 扫描器 — **真实的传感器/蜜罐数据** | 无 |
失效或触发速率限制的威胁源永远不会导致地图瘫痪(每次获取请求都进行了包装保护)。
## 控制与端点
- **缩放:** 鼠标滚轮 / `+` `−` 按钮 / 捏合。**平移:** 拖拽。**重置:** `□`。
- `GET /` — 地图 UI
- `GET /healthz` — `{ok, total}`
- `GET /api/socmap/stream` — Server-Sent Events 实时数据流
- `GET /api/socmap/recent?limit=N` — 最近的事件 + 基地
- `GET /api/socmap/stats` — 按来源/类型/国家/地区统计的总数
- `GET /api/socmap/world` — 内置海岸线 GeoJSON
## 作为服务运行(Linux)
```
sudo cp soc-threatmap.service /etc/systemd/system/
sudo systemctl enable --now soc-threatmap
```
编辑单元文件中的 `WorkingDirectory`/`ExecStart`,使其与您放置应用程序的位置相匹配。
## 测试
```
python -m pytest -q # pytest.ini sets pythonpath=.
```
离线测试套件(无需网络),在 CI 中运行(`.github/workflows/ci.yml`, py3.12, push+PR):
- `tests/test_geo.py` — 可路由保护、确定性合成散布、TEST-NET 切换、国家质心,以及真实的 MaxMind mmdb 指针解码(如果存在则使用 `GeoLite2-City.mmdb`,否则跳过)。
- `tests/test_sources.py` — 每个威胁源获取器均由样本 blob 驱动运行,网络已被 monkeypatch(在未接入互联网的情况下验证了解析器)。
## 构建您自己的包
独立的可执行文件使用 `socmap.spec` 中的 **PyInstaller** 生成:
```
pip install pyinstaller
pyinstaller socmap.spec
# dist/socmap (Linux ELF)
# dist/socmap.exe (在 Windows 上运行时)
```
真正的 **Windows .exe** 只能在 Windows 上构建。内置的 GitHub Actions 工作流(`.github/workflows/release.yml`)会在其原生运行器上构建 Linux 和 Windows **两种**二进制文件,并将它们附加到发布版本中:
```
git tag v0.1 && git push origin v0.1 # -> CI builds + publishes Linux + Windows + Android
```
## Android
本仓库是一个 **monorepo**:桌面服务器位于根目录,而**独立的 Android 应用程序**位于 [`android/`](android/) 中 — 包含设备端数据源获取 + WebView 地图 + 同样合成的音频,无需服务器。它是一个自包含的 Gradle 项目(`eu.cisodiagonal.socmap`)。
```
cd android
ANDROID_HOME=$HOME/android-sdk JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \
./gradlew :app:assembleDebug
# -> android/app/build/outputs/apk/debug/app-debug.apk
```
发布工作流还会构建 debug APK,并将 `socmap-android.apk` 附加到与桌面二进制文件相同的发布版本中。请参阅 [`android/README.md`](android/README.md)。
## 文档
请参阅 **[MANUAL.md](MANUAL.md)** 获取完整手册(概述、配置、端点、集成、故障排除)。在运行中的仪表板里,点击右上角的 **`?` 帮助按钮**即可通过 `/manual` 打开它。
标签:Python标准库, Web Audio API, 后台面板检测, 威胁情报可视化, 攻击地图, 漏洞挖掘, 网络安全监控, 逆向工具, 驱动开发