虚拟的 CPE 设备向 ACS 模拟 SOAP 请求

更新日期: 2023-04-18 阅读次数: 1522 字数: 496 分类: 物联网

开发环境没有真实的 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

tags: tr069

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式