开发环境没有真实的 CPE 设备,只能找一个虚拟的 CPE 模拟器,来模拟与 ACS 的通信。
同时需要能支持 CPE Server 服务来处理 ACS 的请求。
找到一个开源的实现。唯一不确定的是,是否是标准的 TR069 协议。
项目地址
https://github.com/genieacs/genieacs-sim
安装
git clone https://github.com/zaidka/genieacs-sim.git
cd genieacs-sim
npm install
Unsupported engine
> npm install
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: 'genieacs-sim@0.9.0',
npm WARN EBADENGINE required: { node: '>=6.9.2 <7.0' },
npm WARN EBADENGINE current: { node: 'v16.14.2', npm: '8.5.0' }
npm WARN EBADENGINE }
因为本机上的 Node 版本为 16.14 远大于这个工具指定的 Node 版本,所以简单粗暴的将小于 7.0 给注释掉了。
具体修改 package.json 文件:
"engines": {
- "node": ">=6.9.2 <7.0"
+ "node": ">=6.9.2"
},
再安装就行了。
修改默认的 ACS URL 地址
如果懒得输入地址参数,可以直接修改 genieacs-sim 代码中的默认 ACS URL,改成自己的本地测试地址。
例如,修改后的显示:
> ./genieacs-sim -h
Usage: genieacs-sim [options]
TR-069 client simulator for GenieACS
Options:
-V, --version output the version number
-u, --acs-url [url] ACS URL to contact (default: http://127.0.0.1:7547/) (default: "http://127.0.0.1:9019/api/tr069")
-m, --data-model [filename] Data model template (default: "./data_model_202BC1-BM632w-8KA8WA1151100043.csv")
-p, --processes [count] Number of devices to simulate (default: 1) (default: 1)
-w, --wait [milliseconds] Waiting period between process spawning (default: 1000) (default: 1000)
-s, --serial [offset] Serial number offset (default: 0) (default: 0)
-h, --help output usage information
模拟请求
修改 ACS 地址之后,就可以发起请求了
> ./genieacs-sim
Simulator 000000 started
Simulator 000000 listening for connection requests on http://127.0.0.1:62819/
我自己实现的 Golang Gin ACS Server 收到的请求:
[GIN] 2023/03/16 - 21:40:03 | 200 | 6µs | 127.0.0.1 | POST "/api/tr069"
如果要通过参数指定 acs server,示例:
$ ./genieacs-sim --acs-url=http://127.0.0.1:2999
缺陷
但是实际使用中发现,这个模拟工具缺了两个重要的功能:
- 无法模拟 BOOTSTRAP,BOOT 事件
- 不支持 http digest 验证
从 issue 中发现有其他开发者提交的 patch,但是并没有被受理合并。看来得自己 fork 一份,将这两个功能补上。
我的 genieacs-sim fork 项目地址:
https://github.com/sunzhongwei/genieacs-sim
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式