GopherTrunk:纯Go实现的集群无线电扫描器,一次支持P25/DMR/TETRA/NXDN等全部主流协议

导语:当你在一次物理渗透测试中需要监听目标区域的无线通话时,手头只有一台笔记本电脑和一个RTL-SDR USB棒。面对P25、DMR、TETRA等十几种不同协议,你需要的不是一个又一个工具,而是一个能通吃所有协议的扫描器。GopherTrunk就是这个工具——纯Go编写,单文件约10MB,零C依赖,终端、TUI、Web控制台三选一。


一、集群无线电协议全景

数字集群无线电系统广泛用于公共安全(警察/消防/急救)、交通运输、能源、政府通信等关键基础设施领域。每种协议都有其专属的制式、调制方式和空中接口,传统上需要用不同的软件分别解码。

主流协议一览

协议简称应用领域语音编码
APCO Project 25P25 Phase 1/2北美公共安全IMBE/AMBE+2
Digital Mobile RadioDMR Tier II/III商业、公共安全、业余AMBE+2
Terrestrial Trunked RadioTETRA TMO欧洲公共安全ACELP
Next Generation Digital NarrowbandNXDN商业、政府AMBE+2
Motorola Type II SmartZoneMoto Type II北美商业/公共安全IMBE
EDACS / GE-MarcEDACS传统商业集群
Logic Trunked RadioLTR商业集群
MPT 1327MPT 1327全球商业/政府
dPMR Mode 3dPMR商业窄带数字
D-STARD-STAR业余无线电AMBE
Yaesu System FusionYSF业余无线电C4FM

GopherTrunk目前支持其中10种集群协议的控制信道解码,外加D-STAR和YSF两种业余数字模式,是目前单工具覆盖协议最广的开源扫描器之一。

为什么纯Go?

GopherTrunk的作者Matt Cheramie从零开始用纯Go编写了整个信号处理链,没有任何C代码(Zero CGO)。这意味着:

  • 构建零依赖:不需要librtlsdr、不需要libusb、不需要DVSI硬件SDK
  • 部署极简:单个静态二进制文件,约10MB,直接拷贝到新机器就能跑
  • 跨平台原生:Linux、macOS、Windows、ARM64(树莓派)开箱即用
  • 维护简单:不需要处理CGO内存管理、ABI兼容性、编译工具链等问题

二、协议解码深度解析

2.1 P25 Phase 1 + Phase 2

P25是北美公共安全通信的强制标准。GopherTrunk实现了完整的TIA-102规范链:

  • RS(24,16,9)外循环校验(TIA-102.BAAA-A §5.9)
  • PN44 LFSR扰码(TIA-102.BBAC-1 §7.2.5),支持12个时隙偏移的盲探测
  • 基于每系统(WACN/SystemID/NAC)三元组的种子推导
  • 超帧感知的每突发偏移跟踪

每个P25控制信道的处理管道运行在内部/scanner/ccdecoder,通过per-protocol FEC链默认启用。

2.2 DMR Tier II + Tier III

DMR是全球使用最广泛的数字商业无线电标准。GopherTrunk支持:

  • DMR Tier III(集群模式)
  • DMR Tier II(常规中继)
  • 完整的BPTC(196,96) + RS(12,9) CSBK CRC
  • Tier II脉冲密度校准(class-3 dibit过表示21.4% vs Tier III的5.1%),通过将ClockGain从0.025降低到0.015来保持Mueller-Müller时钟环锁定

2.3 TETRA TMO

TETRA(陆地集群无线电)是欧洲公共安全通信标准。GopherTrunk实现了完整的ETSI EN 300 392-2 §8.3.1链路:

  • 解扰(descramble)→ 解交织(deinterleave)→ 去穿刺(depuncture)→ Viterbi译码 → CRC-16校验
  • 空中恢复容限(Viterbi纠错深度 vs 同信道/邻信道干扰)需要真实采集样本验证

2.4 NXDN

NXDN是日本和亚洲部分地区广泛使用的窄带数字标准。GopherTrunk实现了:

  • ViterbiSpec模式:完整的§4.5.1.1链路
  • 每系统nxdn_deviation_hz旋钮(默认1800 Hz),解决发射机偏离规范时的双峰dibit分布问题

三、纯Go语音路径

这是GopherTrunk最令人印象深刻的工程亮点——语音编解码器完全用Go语言实现,不需要外部DVSI硬件加速芯片,也不需要mbelib软件编解码库。

IMBE和AMBE+2

编解码器用途协议
IMBEImproved Multi-Band ExcitationP25 Phase 1
AMBE+2Advanced Multi-Band Excitation +2P25 Phase 2 / DMR / NXDN

纯Go IMBE/AMBE+2在真实采集上产生可理解的音频。每个呼叫产生WAV文件+原始帧sidecar,同时通过Direct ALSA/WASAPI/CoreAudio实时播放PCM音频——全程无CGO,不需要libasound2-dev、不需要pkg-config。

DSP信号处理

语音路径背后是一整套纯Go实现的DSP(数字信号处理)管线:

  • 信道化器:Polyphase channelizer + CIC + Halfband滤波器
  • FIR设计器:Kaiser / RRC / Gaussian窗函数设计
  • 解调器:FM / C4FM / GFSK / FFSK / DQPSK / π/4-DQPSK / π/8-H-DQPSK
  • 时钟恢复:Mueller-Müller + Gardner算法
  • 均衡器:LMS + CMA盲均衡
  • 分集合并:Selection + maximal-ratio diversity combining

四、SDR硬件层

RTL-SDR驱动

GopherTrunk的SDR层是纯Go的RTL-SDR驱动,跨三个操作系统:

  • Linux:USBDEVFS
  • Windows:WinUSB(配合Zadig工具)
  • macOS:IOKit

支持所有主流调谐器芯片(R820T / R820T2 / R828D / E4000 / FC0012 / FC0013 / FC2580),每个都是osmocom librtlsdr的调谐器C代码的wire-level Go端口,保留了librtlsdr-parity初始化爆发分块、EPIPE热复位、平衡LNA+Mixer增益算法,以及相同的rtlsdr_open探测顺序。

多设备池

GopherTrunk支持多RTL-SDR设备的池化管理——你可以用4根USB棒同时监听4个不同的频率。每个设备独立配置增益、PPM校正和偏置天线供电(bias-tee),且I²C桥接在每个公共方法调用一次(而不是每次寄存器写入),减少了约10倍的USB控制传输开销。


五、用户界面:三选一

GopherTrunk的独特之处在于它同时提供了三种操作界面:

终端TUI(Bubbletea)

基于Bubbletea TUI框架的12面板控制台,包括:

  • 活跃通话列表
  • 扫描器状态(控制信道 hunters、常规FM扫描器)
  • 系统/站点/通话组管理
  • 设置面板(内联编辑,支持热重载)
  • 导入面板(支持PDF/CSV上传)

f进入手动VFO调谐,直接输入MHz频率即可。

浏览器Web控制台

纯浏览器React/Tailwind SPA,功能与TUI完全对应:Dashboard、Active Calls、History、Systems、Talkgroups、Devices、Events、Tones、Metrics、Scanner、Settings。支持远程客户端通过浏览器操作扫描器,适合部署在树莓派上远程访问。

无头守护进程

-headless模式以守护进程方式运行,适合长期监测任务。API表面包括:

  • gRPC AudioService:实时PCM音频流,支持设备序列号+通话组过滤
  • REST API/api/v1/scanner/api/v1/settings/api/v1/import
  • Prometheus /metrics:内置监控指标
  • SQLite日志:内置纯Go SQLite通话日志

六、配置导入

这是GopherTrunk最实用的功能之一——它可以直接解析RadioReference.com的PDF导出文件和CSV包,自动生成config.yaml配置:

# 解析RadioReference PDF + CSV,交互式预览后写入配置
./gophertrunk import-pdf -pdf system.pdf -csv talkgroups.csv

# CI/脚本模式,跳过TUI直接写入
./gophertrunk import-pdf -pdf system.pdf -no-tui -force

# 交互式配置生成向导
./gophertrunk -wizard

配置合并是原子操作(内存验证 → 临时文件 → 重命名),即使解析失败也不会损坏现有配置。


七、物理安全研究视角

从红队物理渗透的角度看,GopherTrunk的价值在于:

侦察阶段

  • 目标区域信号测绘:通过扫描P25/DMR/TETRA信号,绘制目标区域(企业园区、工业控制区、政府机构)的集群无线电覆盖范围
  • 系统指纹识别:通过控制信道解码获取SystemID、NAC、WACN等标识,快速判断系统归属和运营商
  • 通话组枚举:从配置文件中解析全部通话组(Talkgroup),了解组织的部门结构和应急通信模式

监听与分析

  • 语音内容实时监听:IMBE/AMBE+2实时音频输出,直接听取指挥调度通话
  • DTMF/ Knox警笛音检测:内置Goertzel算法检测亚音调,区分不同信道
  • gRPC音频流转发:将实时音频通过gRPC流式传输到远程分析节点

测试与验证

  • 信号强度监控:内置Prometheus IQ功率指标(gophertrunk_sdr_iq_power_dbfs),空闲约-45 dBFS,正常信号约-25 dBFS
  • 多设备分集接收:多根天线+多台SDR进行空间分集,提高城市环境中的解码成功率

八、安装与快速开始

# 下载预编译版本
VERSION=v0.1.7
curl -L -o gophertrunk.tar.gz 
  https://github.com/MattCheramie/GopherTrunk/releases/download/${VERSION}/gophertrunk-${VERSION}-linux-amd64.tar.gz
tar xzf gophertrunk.tar.gz && cd gophertrunk-${VERSION}-linux-amd64

# 复制示例配置
cp config.example.yaml config.yaml

# 验证安装
./gophertrunk version

# 启动(自动选择TUI/Web/Headless)
./gophertrunk -config config.yaml

硬件要求:1-4根RTL-SDR USB棒(建议RTL-SDR Blog V3),USB 3.0端口,Linux/macOS/Windows/树莓派均可。

项目地址

  • 官网:gophertrunk.org
  • GitHub:github.com/MattCheramie/GopherTrunk
  • 下载页:gophertrunk.org/downloads

九、局限性与发展方向

当前不足

  • NXDN交织器/穿刺验证:部分内层FEC仍在验证中
  • TETRA空中恢复容限:需要真实采集样本校准Viterbi纠错深度
  • AMBE+2许可证:GopherTrunk在启动时打印AMBE+2专利状态通知,用户在使用前需了解相关许可
  • DVSI硬件后端:DVSI USB-3000 / AMBE-3003 USB硬件加速支持仍在开发中

为什么值得关注

GopherTrunk是目前少数几个把整个数字集群扫描流程——从IQ采样到控制信道解码到语音合成——全部用一门语言实现的开源项目。对于无线电安全研究者来说,它降低了进入门槛:不需要编译复杂的C依赖、不需要处理不同平台的编译差异、不需要理解DVSI SDK。

原文来源RTL-SDR.com

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容