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

文章目录

    开发环境没有真实的 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式