Hotdry.

Article

Bambu Lab 打印机网络协议逆向与本地控制恢复实践

通过固件修改与协议逆向工程恢复 Bambu Lab 打印机原生网络控制能力,绕过厂商加密锁定。

2026-05-13systems

Bambu Lab 系列打印机凭借其出色的打印质量与智能化体验赢得了大量用户,但随着固件迭代,设备与云端服务的耦合度不断加深,用户对本地网络控制能力的诉求日益强烈。社区开发者通过逆向分析打印机固件中的网络协议栈,重建了完整的本地控制路径,使得用户能够在不依赖厂商云服务的前提下实现打印任务管理、状态监控与固件更新。本文从技术实现角度,详细拆解 Bambu Lab 打印机网络协议的三层架构、认证机制与数据格式,并给出可落地的集成参数与代码示例。

协议架构总览:三层协议栈的设计逻辑

Bambu Lab 打印机的网络通信并非单一协议,而是由三个功能明确的协议层构成的完整体系。第一层是设备发现层,基于 SSDP(Simple Service Discovery Protocol)协议实现。打印机在局域网内以 UDP 广播方式向 239.255.255.250 地址的 1990 和 2021 端口发送通知消息,公告自身 IP 地址、序列号与固件版本。任何处于同一局域网的客户端应用均可通过监听这些广播报文自动发现网络中的打印机设备。第二层是实时控制层,构建于 MQTT 协议之上,打印机在本地 8883 端口运行加密的 MQTT broker,接收来自客户端的控制指令并主动推送状态更新。第三层是文件传输层,使用 FTPS(FTP over TLS)协议在 990 端口完成 G-code 文件的安全上传。三层协议各司其职,共同构成了打印机与外部应用之间的通信基础设施。

从网络抓包数据来看,SSDP 广播报文包含一系列以 Dev 为前缀的自定义字段,如 DevModel.bambu.com 表示设备型号、DevName.bambu.com 表示设备名称、DevSignal.bambu.com 表示 WiFi 信号强度、DevVersion.bambu.com 表示固件版本。这些字段使得客户端应用无需连接打印机即可获取设备的核心参数,为后续建立 MQTT 连接提供了前置信息。值得注意的是,广播报文中的 DevConnect.bambu.com 字段标识了当前连接模式,当值为 lan 时表示处于局域网模式,此时打印机的云端通信行为将受到限制。

MQTT 本地控制:认证机制与消息结构

MQTT 层是 Bambu Lab 网络控制的核心。打印机在本地运行一个支持 TLS 加密的 MQTT broker,监听 8883 端口。客户端需要使用特定的用户名与密码完成认证,其中用户名固定为 bblp,密码为打印机屏幕上显示的 LAN Only Access Code。这种基于设备屏幕显示的动态密码机制确保了只有物理接触打印机的用户才能获取控制权限,在一定程度上保障了设备的安全性。连接必须使用 TLS 加密,否则认证将被拒绝,这是 Bambu Lab 在协议设计层面采取的安全防护措施。

建立 MQTT 连接后,客户端需要订阅特定主题以接收打印机的状态推送。根据协议规范,订阅主题的格式为 device/{SERIAL}/report,其中 {SERIAL} 需要替换为打印机的序列号,该序列号可从 SSDP 广播报文的 USN 字段中提取。订阅此主题后,客户端将实时接收打印机推送的状态更新消息,包含打印进度、温度读数、AMS 耗材管理系统状态、灯光控制状态等丰富信息。状态消息以 JSON 格式封装,外层结构包含 printamssystem 等多个嵌套对象,每个对象对应打印机的不同功能模块。例如,print.gcode_state 字段标识当前打印状态,可选值包括 IDLERUNNINGPAUSEDFINISHEDFAILED 等。

向打印机发送控制指令需要使用请求主题,格式为 device/{SERIAL}/request。指令同样以 JSON 格式封装,外层结构根据指令类型选择 printsysteminfo 等不同的命名空间。关键字段 sequence_id 用于关联请求与响应,客户端需要在连续发送多条指令时递增该值以确保响应匹配。每条指令必须包含 command 字段指明操作类型,可选值包括 pushall(强制推送完整状态)、pause(暂停打印)、resume(恢复打印)、stop(停止打印)、ledctrl(灯光控制)、gcode_line(执行自定义 G-code)等。

文件传输:FTPS 协议的工作流程

打印任务除了需要发送控制指令外,还需要将 G-code 文件传输至打印机。文件传输基于 FTPS 协议完成,隐式 TLS 加密模式下使用端口 990。连接建立过程与 MQTT 类似,首先需要完成 TLS 握手,随后使用 bblp 用户名与 LAN Only Access Code 完成认证。文件传输时需要使用 curl 或其他支持 FTPS 的客户端工具,将包含 G-code 的 3MF 压缩包上传至打印机根目录。上传路径不能指向子目录如 /sdcard/,否则打印机将拒绝接收文件。

文件上传完成后,需要通过 MQTT 发送 project_file 指令通知打印机加载并执行该文件。指令中的 param 字段指定 3MF 压缩包内部 G-code 文件的路径,通常为 Metadata/plate_1.gcodeurl 字段则必须以 ftp:// 开头指向刚上传的文件。ams_mapping 字段用于配置 AMS 多色耗材槽位映射关系,数组长度固定为 5 元素,采用从右至左的反向索引方式,其中值 -1 表示对应颜色槽位未使用。

实用集成参数与代码示例

在实际工程集成中,建议将上述协议封装为独立的客户端库以提高复用性。MQTT 连接参数应使用以下配置:Keepalive 间隔设置为 60 秒,QoS 级别对于状态推送使用 0(最多一次),对于控制指令可提升至 1(至少一次)以确保指令可靠送达。TLS 证书的获取可通过 openssl 工具从打印机直接提取,无需使用设备出厂预置证书。

文件上传部分推荐使用 curl 命令行工具并添加 --ftp-ssl --insecure 参数绕过证书验证,FTP 连接模式设置为 EPSV 以兼容 NAT 环境。G-code 文件建议保持 3MF 格式打包,因为 Bambu Studio 生成的切片文件包含 AMS 颜色映射等元数据信息,解包后传递给打印机的 G-code 路径必须在 3MF 压缩包内正确配置。

固件更新是另一个需要关注的场景。从抓包数据来看,打印机固件更新通过 CloudFront CDN 分发,下载流量约 97MB,下载完成后自动重启。固件更新过程中打印机仅与 public-cdn.bambulab.com 域名通信,通信内容经过 TLS 加密保护,因此无法从流量中提取固件内容。如果需要阻止自动更新,可在路由器层面对该域名实施 DNS 封锁,但需要注意这可能导致后续手动更新固件需要离线完成。

风险提示与版本兼容性

协议逆向工程面临的最大风险在于固件升级可能导致协议格式变更。Bambu Lab 在更新日志中未详细披露协议变更内容,社区开发者需要通过实际测试验证新版本固件的兼容性。建议在生产环境中锁定固件版本,并在隔离环境中完成新版本协议适配测试后再部署至正式设备。

另一个需要注意的风险点是 LAN Only Access Code 的获取方式。该密码仅在打印机屏幕的操作界面中显示,且每次进入 LAN Only 模式时可能刷新。如果打印机固件版本过旧,可能不支持本地 MQTT 功能,此时需要升级固件至至少 01.07.00.00 版本以上。TLS 证书的有效期同样值得关注,打印机固件内置的证书可能存在过期风险,若出现 MQTT 连接失败可尝试在客户端侧配置证书验证跳过逻辑。

通过上述协议分析与参数配置,开发者可以在不依赖 Bambu Lab 云服务的前提下构建完整的本地控制方案,实现打印任务管理、状态监控与文件传输的自主化。需要强调的是,所有协议分析工作均基于公开可获取的网络流量数据与社区共享的逆向研究成果,协议的使用应遵循设备原厂的服务条款与相关法律法规。


资料来源:本文协议参数与数据结构参考 Grumpy Developer 维护的 Bambu Lab Printer Reverse-Engineering Knowledge Base(contentnation.net/en/grumpydevelop/bl-knowledge)。

systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com