Ringmast4r/Tower-Hunter

GitHub: Ringmast4r/Tower-Hunter

一款专为 Linux 便携设备设计的蜂窝基站记录器与异常检测器,通过将基站数据与 GPS 关联来识别可疑的移动网络活动。

Stars: 89 | Forks: 21

# TowerHunter v3.0 - SimTrack ![GitHub stars](https://img.shields.io/github/stars/Ringmast4r/Tower-Hunter?style=flat-square&color=0066ff) ![GitHub forks](https://img.shields.io/github/forks/Ringmast4r/Tower-Hunter?style=flat-square&color=0088ff) ![GitHub watchers](https://img.shields.io/github/watchers/Ringmast4r/Tower-Hunter?style=flat-square&color=00aaff) ![GitHub repo size](https://img.shields.io/github/repo-size/Ringmast4r/Tower-Hunter?style=flat-square&color=00ccff) ![GitHub last commit](https://img.shields.io/github/last-commit/Ringmast4r/Tower-Hunter?style=flat-square&color=00eeff) ![GitHub issues](https://img.shields.io/github/issues/Ringmast4r/Tower-Hunter?style=flat-square&color=0066ff) ![License](https://img.shields.io/badge/license-Proprietary-0066ff?style=flat-square) ![Profile Views](https://komarev.com/ghpvc/?username=Ringmast4r&color=0066ff&style=flat-square&label=Profile+Views) 一款基站记录器和异常检测器,专为基于 Linux 的便携式设备上的移动安全研究而设计。 ## 这是什么 TowerHunter 是一款现场工具,可实时持续监控并记录蜂窝网络连接。它会捕获你的设备所连接基站的详细信息,将其与 GPS 位置数据进行关联,并能够检测潜在的可疑蜂窝活动。 **主要用例:** - 安全研究及 IMSI catcher/Stingray 检测 - 基站映射和覆盖范围分析 - 移动网络研究和教育 - 了解旅行时的蜂窝切换行为 ## 这不是什么 - **不是黑客工具** - TowerHunter 仅被动监控你自己设备的蜂窝连接 - **不是跨平台工具** - 它只能在支持 ModemManager 和 gpsd 的 Linux 上运行 - **不是消费级应用** - 需要特定的硬件(蜂窝调制解调器、GPS)及 Linux 相关知识 - **不适用于 Windows/macOS** - 查看器可以显示历史数据,但核心功能需要 Linux ## 功能 ### 基站记录 - 从你的蜂窝调制解调器捕获 MCC、MNC、LAC、TAC 和 Cell ID - 记录运营商名称、接入技术(LTE、3G 等)和信号指标 - 记录 RSRP 和 RSRQ 值以进行信号质量分析 - 将数据存储在 SQLite 数据库和每日 CSV 文件中 ### GPS 集成 - 将基站连接与你的物理位置相关联 - 使用 OpenCellID 查询计算与已连接基站的距离 - 通过 gpsd 追踪速度、航向和海拔 ### 异常检测 针对潜在的可疑活动生成警报: | 警报类型 | 触发条件 | 严重级别 | |------------|---------|----------| | `RAPID_TOWER_CHANGE` | 60 秒内发生 3 次以上基站切换 | 高 (HIGH) | | `UNUSUAL_MCC` | 检测到非美国移动国家代码 | 中 (MEDIUM) | | `STRONG_SIGNAL` | RSRP 强于 -80 dBm(异常靠近的基站) | 低 (LOW) | ### Web Dashboard - 可通过浏览器访问的实时监控界面 - 用于分析过去会话的历史数据查看器 - 导出功能(JSON、CSV) ## 硬件要求 - **Linux 设备** - 已在运行 Kali Linux 的 ClockworkPi DevTerm 上测试 - **蜂窝调制解调器** - 必须受 ModemManager (mmcli) 支持 - **GPS 接收器** - 必须能与 gpsd 配合使用 ## 软件依赖 ``` # 所需 packages sudo apt install modemmanager gpsd gpsd-clients python3 # 仅适用于远程模式 sudo apt install sshpass ``` ## 文件 | 文件 | 描述 | |------|-------------| | `towerhunter.py` | 主应用程序 - 直接在带有调制解调器/GPS 的设备上运行 | | `towerhunter-remote.py` | 远程模式 - 在单独的机器上运行,通过 SSH 拉取数据 | | `viewer.py` | 独立查看器 - 无需主动采集即可浏览历史数据 | | `start-towerhunter.sh` | 主应用程序的启动脚本 | | `start-viewer.sh` | 查看器的启动脚本 | | `start-remote.sh` | 远程模式的启动脚本 | ## 用法 ### 直接模式(在带有调制解调器的设备上) ``` # 确保 ModemManager 和 gpsd 正在运行 sudo systemctl start ModemManager sudo systemctl start gpsd # 运行 TowerHunter python3 towerhunter.py ``` 通过 `http://localhost:8888` 访问 Dashboard ### 远程模式(从另一台机器) 编辑 `towerhunter-remote.py` 以设置你的 ClockworkPi 的 IP 地址: ``` REMOTE_HOST = "10.0.0.15" # Your device's IP REMOTE_USER = "kali" REMOTE_PASS = "kali" ``` ``` python3 towerhunter-remote.py ``` ### 仅查看器(浏览历史数据) ``` python3 viewer.py ``` 通过 `http://localhost:8889` 访问 ## Web 界面 ### 实时 Dashboard(端口 8888) - 实时基站和 GPS 数据 - 信号强度图表 - 警报通知 - 基站历史 ### 数据查看器(端口 8889) - 概览统计 - 近期读数日志 - 已发现基站列表 - 警报历史 - 数据导出(JSON/CSV) ## 数据库 Schema ### `cell_logs` - 单次读数 - 时间戳、基站标识符(MCC/MNC/LAC/TAC/Cell ID) - 运营商、接入技术、信号指标 - GPS 坐标、海拔、速度、航向 - 基站位置(来自 OpenCellID)、与基站的距离 - 异常标志 ### `towers` - 已发现的唯一基站 - Cell ID、运营商信息 - 首次/最后发现的时间戳 - 发现次数 - 连接时的平均 GPS 位置 ### `alerts` - 异常事件 - 时间戳、警报类型、描述 - 关联的 Cell ID 和位置 ### `tower_locations` - OpenCellID 缓存 - 缓存的基站坐标,以减少 API 调用 ## 配置 编辑 Python 文件中的 `CONFIG` 字典: ``` CONFIG = { 'poll_interval': 6, # Seconds between readings 'log_dir': Path('...'), # CSV log directory 'export_dir': Path('...'), # Export directory 'db_path': Path('...'), # SQLite database path 'web_port': 8888, # Dashboard port 'anomaly_threshold': 3, # Tower changes before alert } ``` ## API Endpoint | Endpoint | 描述 | |----------|-------------| | `GET /` | Web Dashboard | | `GET /api/data` | 当前读数(实时模式) | | `GET /api/stats` | 数据库统计信息 | | `GET /api/recent` | 最近的日志条目 | | `GET /api/towers` | 已发现的基站 | | `GET /api/alerts` | 警报历史 | | `GET /api/logs` | 完整日志查询 | | `GET /api/export/json` | 导出为 JSON | | `GET /api/export/csv` | 导出为 CSV | ## 理解数据 ### 基站标识符 - **MCC**(Mobile Country Code,移动国家代码)- 国家标识符(310-316 = 美国) - **MNC**(Mobile Network Code,移动网络代码)- 运营商标识符 - **LAC**(Location Area Code,位置区域码)- 基站的地理分组 - **TAC**(Tracking Area Code,跟踪区域码)- LAC 在 LTE 中的等价物 - **Cell ID** - 特定基站/扇区的唯一标识符 ### 信号指标 - **信号质量** - 百分比 (0-100%) - **RSRP**(Reference Signal Received Power,参考信号接收功率)- 典型值:-80 至 -120 dBm - **RSRQ**(Reference Signal Received Quality,参考信号接收质量)- 典型值:-10 至 -20 dB ### 异常指标 快速切换基站或异常强烈的信号 *可能* 意味着存在 IMSI catcher,但也可能是由以下原因引起的: - 驾驶穿过基站覆盖密集的区域 - 靠近 small cell 或 DAS(分布式天线系统) - 网络拥塞导致负载均衡 - 建筑物干扰导致频繁切换 **在下结论之前,务必结合具体情境调查警报。** ## 限制 - 需要 root/sudo 权限才能访问 modemmanager - OpenCellID API 有速率限制(使用免费的公共密钥) - 进行位置关联需要 GPS 定位 - 基站位置准确性各异(OpenCellID 是众包数据) - 仅基于简单的启发式算法检测异常 ## 许可证 **版权所有 (c) 2025 Ringmast4r。保留所有权利。** 本软件为专有且机密的软件。严禁通过任何媒介未经授权地复制、分发、修改、公开展示或公开表演本软件。 - 你**可以**仅出于教育目的查看此代码 - 你**不得**复制、fork、修改或再分发此代码 - 你**不得**将此代码用于任何商业或个人项目 - 你**不得**声称此作品为你自己的 如有许可查询,请联系仓库所有者。 ## 鸣谢 - [OpenCellID](https://opencellid.org/) 提供基站位置数据 - [ModemManager](https://www.freedesktop.org/wiki/Software/ModemManager/) 提供调制解调器抽象 - [gpsd](https://gpsd.gitlab.io/gpsd/) 负责 GPS 处理 *本项目是独立安全研究的成果。所有代码均为 Ringmast4r 的原创作品。*
标签:IMSI捕获器检测, Linux移动设备, 信号监测, 内存分配, 基站定位, 异常检测, 目录枚举, 移动安全, 逆向工具