软件授权客户端示例程序
演示如何与许可证管理系统集成,包括硬件指纹采集、授权激活和心跳检测功能。
快速开始
编译
cd backend/cmd/client-demo
go build -o client-demo main.go
运行
# 使用命令行参数
./client-demo -server http://localhost:18888
# 或使用配置文件 client_config.json
./client-demo
授权码配置
将授权码保存到 license_code/AUTH_CODE 文件中,程序会自动读取。如果文件不存在或授权码为空,程序在需要激活时会退出并提示错误。
命令行参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-server |
服务器地址 | http://localhost:18888 |
-version |
软件版本 | 1.0.0 |
-interval |
心跳间隔(秒) | 300 |
-activate-only |
仅激活,不启动心跳 | false |
环境变量
| 变量名 | 说明 |
|---|---|
LICENSE_ENCRYPTION_KEY |
许可证文件加密密钥(默认使用服务器默认密钥,长度需 16/24/32 字节) |
工作流程
-
启动时
- 采集硬件指纹(MAC 地址、CPU、主机ID)
- 检查
license_code/LICENSE文件是否存在 - 如果文件存在,解析并验证有效期(start_date 和 end_date)
-
需要激活时(文件不存在或过期)
- 从
license_code/AUTH_CODE文件读取授权码 - 调用激活接口获取许可证
- 保存许可证到
license_code/LICENSE - 再次验证许可证
- 从
-
验证通过后
- 启动心跳服务(每 300 秒或按服务器指定间隔)
- 自动接收并更新许可证文件
硬件指纹
程序自动采集以下信息生成硬件指纹:
- MAC 地址(第一个非虚拟网络接口)
- CPU 型号名称
- 主机 ID(系统唯一标识符)
格式(随意,只要能唯一标识设备即可,哈希值也行):MAC:xx:xx:xx:xx:xx:xx,CPU:xxx,HOSTID:xxx
许可证文件
许可证文件保存在 license_code/LICENSE,使用 AES-GCM 加密,包含:
- 许可证密钥和硬件指纹
- 有效期(开始/结束日期)
- 功能配置和使用限制
重要:许可证绑定硬件指纹,更换硬件需重新激活。
示例输出
首次运行(自动激活)
=== 软件授权客户端示例程序 ===
硬件指纹: MAC:00:11:22:33:44:55,CPU:Intel(R) Core(TM) i7-8700,HOSTID:abc123
许可证文件检查失败: 许可证文件不存在
尝试重新激活...
✓ 激活成功!许可证文件已保存到 license_code/LICENSE
✓ 激活后验证通过
[心跳] 启动心跳服务...
✓ 心跳成功 [14:30:00] - 状态: active
后续运行(使用本地许可证)
=== 软件授权客户端示例程序 ===
硬件指纹: MAC:00:11:22:33:44:55,CPU:Intel(R) Core(TM) i7-8700,HOSTID:abc123
✓ 许可证验证通过
[心跳] 启动心跳服务...
✓ 心跳成功 [14:30:00] - 状态: active
注意事项
- 验证优先级:优先检查本地许可证文件,文件不存在或过期时才重新激活
- 错误处理:许可证验证失败会退出程序;心跳失败仅记录日志
- 授权码:激活时需要授权码,请将授权码保存到
license_code/AUTH_CODE文件
故障排查
激活失败
- 检查服务器地址和授权码是否正确
- 确认
license_code/AUTH_CODE文件存在且包含有效的授权码 - 查看服务器日志了解详细错误
心跳失败
- 检查网络连接
- 确认许可证密钥和硬件指纹是否正确
硬件指纹变更
- 更换硬件需重新激活
- 联系管理员释放旧的激活记录