emrekybs/signalops

GitHub: emrekybs/signalops

一个将 WiFi、蜂窝、CCTV、ADS-B、卫星及 SDR 等多源信号情报融合到统一战术地图上的安全研究平台。

Stars: 0 | Forks: 0

# Signal OPS 一个用于安全研究和训练的全频谱、全来源信号情报融合平台。Signal OPS 将数十个公开收集源——WiFi/Bluetooth/基站数据库、互联网暴露扫描器、摄像头索引、ADS-B 航班馈送、卫星 TLE 跟踪以及 SDR/APRS 网络——整合到单一的战术地图和 Flask API 中,将 RF、蜂窝、空域、轨道和监控领域关联为一个实时操作全景,并可选叠加 AI 辅助的威胁摘要。 ## 功能 - **统一的 RF/OSINT 扫描** — 一次调用即可并行展开对 WiFi、Bluetooth、基站、IoT、摄像头和飞行器来源的扫描,对结果进行去重和评分。 - **摄像头发现** — 通过 Shodan、FOFA、BinaryEdge、Windy Webcams、OpenStreetMap 监控节点和 Insecam,支持按坐标或按国家查询。 - **蜂窝情报** — 基站查询(WiGLE、OpenCellID),具备离线 MCC/MNC -> 运营商/国家解析以及 IMSI-catcher / Stingray 启发式检测。 - **无线威胁检测** — 检测恶意 / evil-twin 接入点,识别 Bluetooth 跟踪器(AirTag、Tile、SmartTag 等)。 - **空域监控** — 通过 adsb.fi 和 OpenSky 获取实时 ADS-B,解码紧急应答机代码,进行无人机启发式检测,并生成源自飞行器 NAC-P 的 GPS 干扰热力图。 - **轨道跟踪** — 摄取 CelesTrak TLE 并进行 SGP4 传播,执行任务分类,并叠加 SatNOGS 地面站覆盖图。 - **SDR 与 APRS** — 公共 KiwiSDR 接收器地图和 APRS.fi 站台查询。 - **IP 威胁情报** — 多来源聚合(ipinfo、AbuseIPDB、CriminalIP、LeakIX、ZoomEye),包含轻量级端口扫描和综合风险评分。 - **监视列表与警报** — 跟踪特定的 BSSID、SSID、IP、MAC 或 ICAO hex,并在扫描期间获取命中结果。 - **AI 分析(可选)** — 当提供密钥时,Google Gemini 会将扫描结果总结为评估报告和风险等级。 几乎所有来源都是**可选的**。如果未设置密钥,该抓取器将被平滑跳过——免费来源(OpenStreetMap、Insecam、ipinfo.io、ADS-B、CelesTrak、KiwiSDR)无需任何密钥即可工作。 ## 截图 ### SIGINT 地图 — 统一的多源视图 主地图将同一区域内的 WiFi、Bluetooth、蜂窝、摄像头和飞行器图层进行融合,并为 OSM 摄像头、ALPR/Flock 网络和警察辖区提供可切换的叠加层。 ![SIGINT 地图 — 卫星视图](https://static.pigsec.cn/wp-content/uploads/repos/cas/4f/4f9bda2f62a0f557ba4ef743896a29e106e943d874c9b0d20b07a185a4144292.png) ![SIGINT 地图 — 带有摄像头 / AP / 蜂窝标记的街道视图](https://static.pigsec.cn/wp-content/uploads/repos/cas/3b/3b681192deb2a37c435d5ad0c4628b0be84370621f06542a0a172bc98e3e0f9d.png) ### 监控与 CCTV | 监控信号源 | CCTV 发现 | |---|---| | ![Surveillance](https://static.pigsec.cn/wp-content/uploads/repos/cas/e1/e1e4a0e5cc54ed0a2c4da4f4b7f41240430f448c78572568aed96a8c8208d837.png) | ![CCTV](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/ddf5b344b36350f52d69502c52d06a82e044a72b519fddf7d4c840470cbda4f7.png) | 监控列表会对每个设备进行评分(例如 *"可疑度 35/100:未授权的摄像头"*),并合并来自 WiGLE、Insecam 和 OSM 的路由器、电视和暴露的摄像头。CCTV 视图按来源对发现的摄像头进行分组,显示每个摄像头的风险以及实时/元数据状态。 ### 基站情报与 SDR / APRS | 基站热力图 | SDR / APRS 网络 | |---|---| | ![Cell towers](https://static.pigsec.cn/wp-content/uploads/repos/cas/4d/4d95016218de7fb6d87bac939f0c7e071b185ef4e8934e630b18637c3ca48e5d.png) | ![SDR / APRS](https://static.pigsec.cn/wp-content/uploads/repos/cas/5c/5c081781cf88ee130ac1d30f00d05a9a504b9e94311ff803f4eaaa872f61efda.png) | ## 基站情报通过 MCC/MNC 运营商查找绘制基站密度图;SDR 视图映射了公共 KiwiSDR 接收器和 APRS 站台,并支持呼号查找。 ## 要求 - Python 3.9+ - 下方列出的 Python 包 核心依赖: ``` flask requests python-dotenv ``` 推荐(启用完整功能 — 缓存、速率限制、卫星传播): ``` cachetools # bounded geo-cache (falls back to an unbounded dict if missing) flask-limiter # request rate limiting sgp4 # satellite position propagation for /api/satellites google-genai # Gemini AI analysis (only if you use GEMINI_API_KEY) ``` 安装所有内容: ``` pip install flask requests python-dotenv cachetools flask-limiter sgp4 google-genai ``` ## 设置 ### 1. 克隆并进入项目 ``` git https://github.com/emrekybs/signalops.git unzip signalops-v1.zip ``` ### 2.(可选)创建虚拟环境 ``` python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate ``` ### 3. 安装依赖项 ``` pip install -r requirements.txt ``` 如果没有 `requirements.txt`,请使用上方“要求”部分中的 `pip install` 命令行。 ### 4. 配置您的环境 复制示例文件并填入您拥有的密钥: ``` cp .env.example .env ``` 然后打开 `.env` 并粘贴您的 API 密钥。**每个密钥都是可选的** — 将任意行留空(或删除它)即可禁用该来源。有关每个密钥的用途及获取位置,请参见下一节。 ### 5.(可选)添加本地数据集 为了实现即时的离线摄像头和辖区查询,请将这些文件放置在 `data/` 目录下(或将 `DATA_DIR` 指向其他位置): ``` data/CAMERAS_WITH_NETWORK_DATA.geojson # Point features (cameras) data/police_precincts_usa.geojson # Polygon features (US precincts) data/camera_networks.json # network-sharing metadata data/tiles/{z}/{x}/{y}.json # optional tiled camera dataset ``` 如果缺少这些文件,应用程序将自动回退到实时的 OpenStreetMap Overpass 查询。 ### 6. 运行 ``` python app_v2.py ``` 服务器将在 **http://0.0.0.0:8080** 上启动。在浏览器中打开 `http://localhost:8080`。 随时检查哪些提供商已成功加载: ``` GET /api/status # active vs. missing keys GET /api/debug # per-key boolean + live WiGLE auth test ``` ## 环境变量 在项目根目录中创建一个 `.env` 文件。以下是应用程序读取的完整列表。 ### 数据源 API 密钥(均为可选) | 变量 | 提供商 | 获取密钥地址 | |---|---|---| | `WIGLE_API_NAME` | WiGLE (WiFi/BT/蜂窝) — 用户名 | https://wigle.net/account | | `WIGLE_API_TOKEN` | WiGLE — API token | https://wigle.net/account | | `OPENCELLID_API_KEY` | OpenCellID(基站) | https://opencellid.org | | `SHODAN_API_KEY` | Shodan(暴露 / 摄像头) | https://account.shodan.io | | `CENSYS_API_ID` | Censys — API ID | https://search.censys.io/account/api | | `CENSYS_API_SECRET` | Censys — API secret | https://search.censys.io/account/api | | `ZOOMEYE_API_KEY` | ZoomEye | https://www.zoomeye.org/profile | | `FOFA_EMAIL` | FOFA — 账户邮箱 | https://fofa.info | | `FOFA_API_KEY` | FOFA — API key | https://fofa.info | | `HUNTERHOW_API_KEY` | Hunter.how | https://hunter.how | | `NETLAS_API_KEY` | Netlas | https://netlas.io | | `LEAKIX_API_KEY` | LeakIX | https://leakix.net | | `CRIMINALIP_API_KEY` | CriminalIP | https://www.criminalip.io | | `BINARYEDGE_API_KEY` | BinaryEdge | https://www.binaryedge.io | | `WINDY_API_KEY` | Windy Webcams | https://api.windy.com/keys | | `ABUSEIPDB_API_KEY` | AbuseIPDB(IP 信誉) | https://www.abuseipdb.com/account/api | | `ADSB_API_KEY` | adsb.fi(可选;无密钥也可工作) | https://adsb.fi | | `APRS_FI_KEY` | APRS.fi(业余无线电台) | https://aprs.fi/page/api_key | | `GEMINI_API_KEY` | Google Gemini(AI 分析) | https://aistudio.google.com/apikey | ### 应用配置 | 变量 | 默认值 | 描述 | |---|---|---| | `GEMINI_MODEL` | `gemini-2.0-flash` | 用于分析的 Gemini 模型 | | `DATA_DIR` | `./data` | 本地 GeoJSON/JSON 数据集目录 | | `FLASK_SECRET_KEY` | 每次运行随机生成 | Flask session 密钥;在生产环境中请设置固定值 | ### 无需密钥的来源(始终开启) 这些不需要配置:**OpenStreetMap Overpass**、**Insecam**、**EarthCam**、**ipinfo.io**、**ADS-B (adsb.fi / OpenSky)**、**CelesTrak TLE**、**SatNOGS** 和 **KiwiSDR**。 ## `.env.example` 将其保存为仓库中的 `.env.example`,以便他人了解格式: ``` # ── Signal OPS 环境 ── # 每个 key 都是可选的。留空以禁用该 source。 # WiFi / Bluetooth / Cell WIGLE_API_NAME= WIGLE_API_TOKEN= OPENCELLID_API_KEY= # Internet-exposure scanners SHODAN_API_KEY= CENSYS_API_ID= CENSYS_API_SECRET= ZOOMEYE_API_KEY= FOFA_EMAIL= FOFA_API_KEY= HUNTERHOW_API_KEY= NETLAS_API_KEY= LEAKIX_API_KEY= CRIMINALIP_API_KEY= BINARYEDGE_API_KEY= # Cameras & IP reputation WINDY_API_KEY= ABUSEIPDB_API_KEY= # Aircraft & ham radio ADSB_API_KEY= APRS_FI_KEY= # AI 分析 GEMINI_API_KEY= GEMINI_MODEL=gemini-2.0-flash # App config DATA_DIR=./data FLASK_SECRET_KEY= ``` ## API 概览 暴露的部分端点(完整集合请参见源码): | 端点 | 用途 | |---|---| | `GET /nearby?lat=&lon=&mode=` | 围绕某一点进行统一的 RF/OSINT 扫描 | | `GET /api/cctv?lat=&lon=` 或 `?country=` | 按位置或国家发现摄像头 | | `GET /api/search?type=&query=` | 按 SSID、IP、位置或国家进行搜索 | | `POST /api/analyze` | 设备列表的 AI 摘要 | | `GET /api/ip-intel?ip=` | 多源 IP 威胁情报 | | `GET /api/adsb?lat=&lon=&radius=` | 实时飞行器 + 紧急情况检测 | | `GET /api/satellites?categories=` | 卫星位置(TLE + SGP4) | | `GET /api/gps-jamming?lat=&lon=` | 源自 ADS-B 的 GPS 干扰热力图 | | `GET /api/sdr/kiwisdr` | 公共 KiwiSDR 接收器列表 | | `GET /api/aprs/stations?lat=&lon=` | 附近的 APRS 站台 | | `GET/POST /api/watchlist` | 管理被追踪的标识符 | | `POST /api/watchlist/check` | 对照监视列表检查设备列表 | | `GET /api/status` · `GET /api/debug` | 提供商健康状况 / 密钥诊断 | ## 注意事项与限制 - 某些提供商(例如 ZoomEye、CriminalIP)可能会受到特定 ISP 上 TLS 干扰的影响,默认情况下在某些扫描列表中已被禁用 — 请查看源码中的内联注释,以便在 VPN/代理后重新启用它们。 - 各提供商的速率限制差异很大;免费额度可能很小(例如,WiGLE 蜂窝查询约为 100 次/天)。应用程序会尽可能跳过或退避,但您有责任遵守每个提供商的限制。 - 本地数据集是可选的,但与实时的 Overpass 查询相比,它们能显著加快摄像头/辖区的查询速度。 ## 许可证 在此处添加您选择的许可证(例如 MIT)。如果您未指定,代码默认为“保留所有权利”。
标签:ESC4, Flask, HTTP/HTTPS抓包, OSINT, Python, 信号情报, 威胁情报, 实时处理, 密码管理, 开发者工具, 态势感知, 无后门, 空间数据可视化, 逆向工具