motoham88/everyware-linux
GitHub: motoham88/everyware-linux
Green Heron 远程天线开关面板的 Linux curses 客户端,基于逆向解析的 TCP 协议实现天线矩阵的远程可视化操作。
Stars: 0 | Forks: 0
# GHClient
一款用于 Green Heron 远程天线开关面板的 Linux 客户端 —— 这是一个基于 curses 的 TUI,用于操作
4 开关 × 9 天线矩阵,通过设备的未公开 TCP 协议在端口
10000 上进行通信。
```
./gh-panel 192.0.2.10 # your switch's address
export GH_SWITCH_HOST=... # ...or set this and just run ./gh-panel
```
```
Green Heron switch panel — 192.0.2.10:10000 connected 0m08s
Antenna AS-84F-1 AS-84F-2 AS-84F-3 AS-84F-4
Beam-10 · · · ·
Beam-15 · · · ·
Beam-20 · · · ·
EFHW-40 · · · ·
...
OFF ● ON ● ON ● ON ● ON
```
`↑↓` 端口 · `←→` 开关 · `⏎` 选择 · `o` 关闭 · `r` 原始协议 · `q` 退出
`--dry-run` 在不发送任何数据的情况下测试面板。`--no-keepalive` 会省略
官方客户端发送的 5 秒 NUL 数据。
## 状态
工作正常。协议已在双向完成解码并针对硬件进行了验证:
此客户端的 `SET_SWITCH` 数据字节与官方 GH
Everyware Client 完全一致,且设备对两者的响应也完全相同。
- 所有四个开关的实时状态,每约 0.5–3.4 秒刷新一次
- 天线选择,由设备在约 123 毫秒内确认
- 锁定显示 —— 被其他开关占用的天线标记为 `◦ N`
- 带有退避机制的重连;最后已知状态保持可见,并标记为已过期
有两个 `SWITCHADD`/`SWITCHUPDATE` 字段的含义未知,因此以原始数据显示,
而不是随意猜测。有关完整协议和其余未知内容,请参阅 NOTES.md。
## 结构布局
| | |
|---|---|
| `greenheron/protocol.py` | 帧划分与记录解析 —— 纯净代码,无 I/O |
| `greenheron/client.py` | socket、状态跟踪、重连、keepalive |
| `greenheron/tui.py` | curses 面板 |
| `ghprobe.py` | 以 hexdump 输出设备发送的任何数据 —— 调试 oracle |
| `tools/` | pcap 提取与协议实验 |
| `NOTES.md` | 协议、每项结论的验证方式以及开放性问题 |
## 测试
```
python3 -m venv .venv && .venv/bin/pip install pytest
.venv/bin/python -m pytest tests/
```
Protocol fixture 是直接从设备捕获的原始字节,而非手动编写。
连接测试针对本地替身服务器运行,其中包括逐字节交付的记录以及会话中途断开连接的情况。
无需硬件。
文档中的地址使用 `192.0.2.10` —— 这是 RFC 5737 文档规定的地址范围,而非真实
主机。
## 许可证
MIT。与 Green Heron Engineering 没有任何附属关系或受其认可;该协议是
通过观察其客户端与其设备之间的流量来确定的,目的是为了实现互操作性。
标签:Python, TUI, 业余无线电, 云资产清单, 安全规则引擎, 客户端, 无后门, 逆向工具, 逆向工程