Rayhunter on PinePhone:在 Quectel EG25-G 调制解调器上部署蜂窝站点模拟器检测器

Rayhunter on PinePhone:在 Quectel EG25-G 调制解调器上部署蜂窝站点模拟器检测器 Rayhunter on PinePhone在 Quectel EG25-G 调制解调器上部署蜂窝站点模拟器检测器【免费下载链接】rayhunterRust tool to detect cell site simulators on an orbic mobile hotspot项目地址: https://gitcode.com/GitHub_Trending/ra/rayhunter本文讲解 Rayhunter 在 PinePhone / PinePhone Pro 上的部署方式基于 Quectel EG25-G LTE 模块内置 Qualcomm mdm9607 基带的硬件背景、完整支持的 LTE 频段表、安装与 adb 转发访问流程以及启用/关闭 adb 的 AT 命令原理、modem 重启陷阱与 ModemManager 占用 AT 口的排障方法。读完本文你可以在 PinePhone 上独立完成 Rayhunter 安装、通过adb forward访问 Web UI、进入 modem shell并理解安装器源码中的 QADBKEY 解锁与ATQCFGusbcfg切换机制。硬件背景为什么 PinePhone 能运行 RayhunterPinePhone 和 PinePhone Pro 都使用 Quectel EG25-G LTE 模块其中搭载Qualcomm mdm9607 调制解调器。EG25-G 的两个特性决定了它适合运行 Rayhunter全球 LTE 频段支持模块覆盖下文表格中的大部分全球频段便于在不同地区的网络中部署内置 GNSS 定位模块Rayhunter 目前并不直接使用 GNSS这一能力仅作为硬件背景。该调制解调器完全具备运行 Rayhunter 的能力但自身没有显示屏也没有网络接口因此 Rayhunter 的 Web UI 无法像 Orbic、TP-Link 那样直接通过 Wi-Fi 或管理 IP 访问。它通过 AT 命令接口对外暴露安装器可以经由该接口发送命令甚至启用 adbpinephone-start-adb/pinephone-stop-adb工具就是基于这一路径实现的。在 Rayhunter 的设备枚举中PinePhone 是一等公民见 lib/src/lib.rs 中的Device::Pinephone变体在 doc/supported-devices.md 中PinePhone / PinePhone Pro 被列为Functional devices已确认可用档位推荐区域为 Global。支持的 LTE 频段EG25-G 的完整支持频段表继承自官方文档 doc/pinephone.mdBandFrequency12100 MHz (IMT)21900 MHz (PCS)31800 MHz (DCS)41700 MHz (AWS-1)5850 MHz (CLR)72600 MHz (IMT-E)8900 MHz (E-GSM)12700 MHz (LSMH)13700 MHz (USMH)18850 MHz (LSMH)19850 MHz (L800)20800 MHz (DD)251900 MHz (E-PCS)26850 MHz (E-CLR)28700 MHz (APT)382600 MHz (IMT-E)39850 MHz (E-CLR)402300 MHz (S-Band)412500 MHz (BRS)注意Quectel EG25-G不支持 LTE band 48CBRS 3500 MHz该频段在美国用于无许可的 4G/5G 连接。如果你的目标网络主要运行在 CBRS 频段PinePhone 无法作为 Rayhunter 载体。安装PinePhone 的安装方式与其他 Rayhunter 安装器有一个关键区别必须在 PinePhone 自身的 shell 中下载并解压安装器然后在设备本地运行而不是在宿主机上远程推送。./installer pinephone从源码看该命令对应 installer/src/lib.rs 中的Command::Pinephone子命令调用 installer/src/pinephone.rs 的install()函数。安装流程的实际步骤如下解锁 modem通过 USB AT 接口发送命令启用 adbstart_adb()等待 3 秒后建立 ADB USB 连接通过 adb 写入文件mount -o remount,rw /将根文件系统重挂载为可写mkdir -p /data/rayhunter创建数据目录推送rayhunter-daemon二进制到/data/rayhunter/rayhunter-daemon生成config.toml——从通用模板config.toml.in中把占位注释#device orbic替换为device pinephone使守护进程识别设备类型推送开机自启脚本/etc/init.d/rayhunter_daemon与/etc/init.d/misc-daemon并分别chmod 755重启 modemshutdown -r -t 1 now等待约 30 秒启动再次解锁并验证重新start_adb()然后执行test_rayhunter冒烟测试确认 Web 接口可访问。实现细节上安装器对每个 adb shell 命令都追加; echo exit code $?并校验输出run_command_expect见 installer/src/pinephone.rs由于 modem 的 legacy adbd 会重新解析 argv命令体需要额外加引号否则mkdir -p /data/rayhunter这类带参数的命令会被拆散源码注释中引用了 EFForg/rayhunter#1056见 installer/src/pinephone.rs。文件推送采用先传/tmp、md5sum 校验、再mv到目标位置的两段式策略避免半写入状态installer/src/pinephone.rs。访问 Rayhunter由于 modem 没有自己的显示屏和网络接口在 PinePhone 上只能通过TCP over adb 转发访问 Rayhunteradb forward tcp:8080 tcp:8080转发会随 adb 连接断开而丢失这条 forward 绑定到 modem 的 adb 连接上每当该连接重新建立例如 modem 复位后转发就会失效。此时adb devices仍会列出 modem、Rayhunter 也仍在录制但 Web UI 不再响应。恢复方法adb forward --list # 输出为空说明转发已丢失 adb forward tcp:8080 tcp:8080Shell 访问使用安装器工具启用 adb 后即可进入 modem shell./installer util pinephone-start-adb adb shell省电禁用 adbadb 处于启用状态时即使 Rayhunter 已停止modem 也无法进入休眠省电状态。不需要调试时用以下命令关闭 adb 以恢复省电./installer util pinephone-stop-adb原理剖析start_adb 与 stop_adb 的 AT 命令流程安装器通过直接操作 modem 的 USB 接口收发 AT 命令。从 installer/src/pinephone.rs 可以看到关键实现USB 标识modem 的 Vendor ID 为0x2C7CProduct ID 为0x125AT 串口位于USB 接口编号 2installer/src/pinephone.rs。serial_interface()通过detach_and_claim_interface(2)夺取该接口——这正是下文 Resource busy 错误的来源。解锁密钥start_adb()先发ATQADBKEY?读取 8 字节 salt计算md5crypt(SH_adb_quectel, salt)并截取第 12–28 字符再发ATQADBKEYhashed解锁——这是源码注释中标注的 qadbkey-unlock.c 的重新实现installer/src/pinephone.rs。切换 USB 组成解锁后发送ATQCFGusbcfg,...命令格式为 vendor ID、product ID 加 7 个功能位diag、nmea、at、modem、net、adb、audio。Qusbcfg::default()中adb 0锁定状态start_adb将其置为 1installer/src/pinephone.rs。单元测试test_qadbcfg_fmt验证了默认命令串为ATQCFGusbcfg,0x2C7C,0x125,1,1,1,1,1,0,0AT 命令收发通过 USB 控制请求Class/Interfacerequest0x22value 3启用串口再经 bulk out端点0x3写入命令、bulk in端点0x84读取响应超时 1 秒installer/src/pinephone.rs。注意切换 adb 会重启 modempinephone-start-adb与pinephone-stop-adb都通过ATQCFGusbcfg修改 modem 的 USB 组成而modem 在该值被写入时总会复位——即使请求的组成与当前完全相同。modem 复位后需要约一分钟才能完成启动期间手机没有蜂窝服务。编写自动化脚本时必须考虑这一点只在 adb 确实未启用时才调用pinephone-start-adb给 modem 留足约一分钟的启动时间再重试后续操作切勿在短于 modem 启动时间的重试循环中反复调用pinephone-start-adb——那会让 modem 陷入永久性重启循环。此状态下 ModemManager 的 QMI 探测永远无法完成日志出现port cdc-wdm0 timed out N consecutive times modem couldnt be initialized: Failed to load current capabilities手机将完全失去移动数据直到 modem 被静置足够长时间完成启动。启用 adb 时出现Resource busy在由ModemManager或eg25-manager等其他 modem 守护进程管理 EG25-G 的发行版上这些守护进程会先于安装器占用 AT 接口导致启用 adb 失败Failed to start adb on the PinePhones modem Caused by: 0: detach_and_claim_interface({USB_INTERFACE_NUMBER}) failed 1: Resource busy (os error 16)这与源码中serial_interface()的detach_and_claim_interface(USB_INTERFACE_NUMBER)调用完全对应installer/src/pinephone.rs——接口被守护进程 claim无法脱离。解决方法在调用期间临时停止守护进程之后再恢复。由于 usbcfg 写入本身就会触发 modem 复位ModemManager 恢复后会自动重新探测 modemsudo systemctl stop ModemManager sudo ./installer util pinephone-start-adb sudo systemctl start ModemManager小结PinePhone / PinePhone Pro 的 EG25-G 模块Qualcomm mdm9607可完整运行 Rayhunter但载体是modem 本身Rayhunter 安装在 modem 文件系统内经 USB/adb 访问安装命令./installer pinephone必须在PinePhone 本地 shell中执行访问 Web UI 依赖adb forward tcp:8080 tcp:8080modem 复位后需重新执行adb 开启会阻止 modem 省电start-adb/stop-adb均会触发 modem 复位约一分钟无信号脚本化时要避免快速重试遇到Resource busy时先systemctl stop ModemManager再启用 adb。相关文档可参考 doc/pinephone.md 原始设备页、doc/supported-devices.md 设备总表与 doc/installing-from-source.md 的从源码构建说明其中提到 USB 系安装器orbic-usb、pinephone等需要 libusb/ADB 支持。【免费下载链接】rayhunterRust tool to detect cell site simulators on an orbic mobile hotspot项目地址: https://gitcode.com/GitHub_Trending/ra/rayhunter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考