tr069

大象笔记 > 标签 > tr069

TR069 - 用户终端设备广域网管理协议

TR069 协议 TR069 (Technical Report 069), 即 CPE 用户终端设备广域网管理协议(CPE WAN Management Protocol, CWMP)。用于实现终端的自动配置。 CPE / ACS TR069 里有两个重要的名词: 用户终端设备(Customer Premise Equipment,CPE)。在宽带接入中,CPE 指的就是家庭网关。any equipment used by customers which can be managed by the ACS (set-top boxes, VoIP-phones but also modem ...

阅读全文...

TR-069 协议中 CPE 与 ACS 的会话过程

建立连接前 CPE 需要的配置 ACS 的 URL 地址 CPE 与 ACS 的通信频率。Inform Interval。两者间不是长期保持连接,而是周期性的通信一会,大概几秒钟,即可完成关键数据的交换。这个短暂的过程称为 provisioning session。 用户名/密码。验证是可选的,这取决于 ACS 是否需要验证,及安全级别。 会话 (Session) 发起者 CPE,即由设备向 ACS 发起会话。 注意:ACS 并不能发起 session 会话,只能由 CPE 发起。 但是,ACS 可以向 CPE 请求 (Connection Request),请求 CPE 发起会话。 对应 ...

阅读全文...

虚拟的 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 EBADENG ...

阅读全文...

tr069 协议中,acs 与 cpe 的完整通信过程

TR-069协议是一种用于远程管理设备、进行配置和故障排除的协议。它使用客户端/服务器模型,其中ACS(自动配置服务器)充当服务器,CPE(客户端设备)作为客户端。 之前刚接触 tr069 协议的时候,简单了解过 TR-069 协议中 CPE 与 ACS 的会话过程 。但是整体流程还是不够清晰,网上也没有完整的逻辑流程图。 向 ChatGPT 请教 tr069 协议中,acs 与 cpe 的完整通信过程 还是 AI 解释的更通俗易懂一些。 以下是TR-069协议中ACS与CPE之间的完整通信过程: 0. 前置条件 在 CPE 配置 ACS 的 URL 地址 设置连接周期 In ord ...

阅读全文...

TeamsACS 代码目录结构

粗略浏览一遍,大概了解每个模块的每个文件是实现什么功能的。可以 tree 一下结构,把每个文件的注释加上。 查看目录 排除 assets 子目录,因为下面的 js 文件太多。 tree -I assets 目录结构 . ├── Dockerfile ├── Dockerfile.local ├── License ├── Makefile // 里面的生成证书和部署方式可以借鉴 ├── README.md ├── assets // 前端代码 ├── app │   ├── app.go │   ├── constant.go │   ├── cwmp.go │   ├── cwmp_p ...

阅读全文...

tr069 消息类型 (message type)

tr069 是基于 SOAP 的 RPC 协议。 message type 可以理解为每个 RPC 的方法名。 这里有趣的地方是,既然是远程调用,那么就存在两种情况: ACS 调用 CPE 的方法 CPE 调用 ACS 的方法 ACS 调用 CPE 的方法列表 GetPRCMethods: 获取 CPE 所支持的方法集合 GetParameterNames: Retrieve list of supported parameters from the device. GetParameterValues: Retrieve current value of the parameter(s ...

阅读全文...

tr069 事件类型 (event type)

Inform 类型的消息中,包含 Event 信息。 All communications and operations are performed in the scope of the provisioning session. The session is always started by the device (CPE) and begins with the transmission of an Inform message. 触发 provisioning session 的事件列表: Event List Bootstrap – when device contacts ...

阅读全文...

tr069 CPE 模拟器 genieacs-sim 默认通信流程解读

cpe 端模拟器 genieacs sim 的日志 > ./genieacs-sim --acs-url=http://127.0.0.1:2999 Simulator 000000 started Simulator 000000 listening for connection requests on http://127.0.0.1:53849/ acs 端日志 增加了部分 debug 日志: message 类型是 Inform Inform 消息的 Event 类型是 PERIODIC 第一次请求的 body 长度是 2066, 第二次请求的 body 长度是 0 Con ...

阅读全文...

tr069 server TeamsACS 中的 Basic Auth 与 HTTP Digest Auth

我在 TeamsACS tr069/server.go 中只找到了 BasicAuth middleware, 并没有 http digest auth (准确地说 auth_client.go 中有实现,但是 server 逻辑里没有). Basic Auth TeamsACS 中 basic auth 的实现很敷衍,并没有校验密码。有几种可能: 要么我代码没有看仔细,逻辑有遗漏。可以给 CPE 模拟器增加 BootStrap 事件等模拟通信,由后台生成账号/密码,并观察后续流程 要么 TeamsACS 作为开源版本,隐藏了部分实现 支持 TLS 的情况下,ACS 不需要实现 http d ...

阅读全文...

tr069 协议中何时使用 basic auth 或者 http digest auth

由于没有在 TeamsACS 的 tr069 server 部分代码中没有找到 HTTP Digest Auth Middleware 的逻辑。 我开始怀疑我对 tr069 协议的 auth 部分理解有问题。所以查询了 tr069 协议文档。 参考: https://www.broadband-forum.org/download/TR-069_Amendment-1.pdf 第一版,不推荐 https://www.broadband-forum.org/technical/download/TR-069_Amendment-5.pdf 推荐看第五版,这部分说明跟第一版有差异。这个文档真是 ...

阅读全文...

TeamsACS 对于 PERIODIC Event 的处理逻辑

Event 类型的判别 tr069/handlers.go func (s *Tr069Server) processInformEvent(c echo.Context, lastInform *cwmp.Inform) { ... cpe := app.GApp().CwmpTable().GetCwmpCpe(lastInform.Sn) cpe.CheckRegister(c.RealIP(), lastInform) cpe.UpdateStatus(lastInform) // 通知系统更新数据 cpe.NotifyDataUpdate(false) log.In ...

阅读全文...

TeamsACS 对于 BootStrap Event 的处理逻辑

实际上类似于 TeamsACS 对于 PERIODIC Event 的处理逻辑 的处理逻辑, 只不过多了一个 UpdateManagementAuthInfo 的处理流程。 UpdateManagementAuthInfo 的调用参数 err = cpe.UpdateManagementAuthInfo("bootstrap-session-"+common.UUID(), 1000, false) UpdateManagementAuthInfo 的定义 主要逻辑就是由 ACS 向 CPE 发送 auth 用的 username / password。 usernam ...

阅读全文...

TeamsACS 在处理 BootStrap 事件时, 如何生成的密码

TeamsACS 是一个开源的 tr069 ACS 实现。其在处理 CPE 发送的 BootStrap 事件时,逻辑有点绕。 BootStrap 处理逻辑 判断 CPE 请求的 body 非空时,如果是 BootStrap 事件,生成连接用的账号/密码。注意,这里没有直接返回给 CPE,而是通过 golang channel 缓存了起来。 判断 CPE 请求的 body 为空时,不再判断事项类型,从 golang channel 中获取之前生成的账号/密码,以 soap 格式返回给了 CPE 我不太理解 tr069 协议为何要这样设计。为何要多走一步? 返回的 SOAP XML 数据格式 ...

阅读全文...

TeamsACS 登录时,显示用户不存在

login 时,用户不存在的逻辑在哪里 使用 admin/teamsacs 登录时,发现无法登录,提示用户不存在。 于是查看了一下登录的处理逻辑: // 登录提交 webserver.POST("/login", func(c echo.Context) error { username := c.FormValue("username") password := c.FormValue("password") if username == "" || password == "" { ...

阅读全文...