三步开启中兴光猫工厂模式:zteOnu 完整实战指南

三步开启中兴光猫工厂模式:zteOnu 完整实战指南

三步开启中兴光猫工厂模式:zteOnu 完整实战指南

【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu

深夜十二点,家里的光猫因为运营商远程下发配置而自动重启。重启本身没什么,可当你重新登录后台,发现上次好不容易打开的 Telnet 服务又悄悄消失了——一切回到原点。如果你也经历过这种"每次配置都被重置"的循环,那么今天要介绍的 zteOnu 或许就是你要找的答案:这是一款专门面向中兴(ZTE)光猫(ONU)的开源命令行工具,核心能力是帮你打开设备的工厂模式(factory mode),并在此基础上永久开启 Telnet 服务,让配置不再随重启丢失。

本文不打算堆砌参数表,而是按一条真实的"从折腾到省心"的旅程来写:先讲清楚问题根源,再带你完成安装、首次运行、进阶玩法,最后给出避坑指南。全程尽量用大白话解释每个命令背后的原理,你可以跟着一步步操作。


一、先搞明白:Telnet 为什么会"一觉醒来就没了"

在动手之前,值得花两分钟理解你遇到的问题到底是什么。中兴光猫出厂时有一套完整的权限分层

  • 普通用户(useradmin):只能改 Wi-Fi 密码之类的基础设置,很多高级功能在界面上是隐藏的;
  • 超级管理员(telecomadmin):能进入完整 Web 后台,但即便如此,Telnet 服务默认仍是关闭的;
  • 工厂模式(factory mode):设备内部最高权限级别,进入之后你才能拿到 Telnet 的登录凭证,从而通过命令行做深度配置。

问题在于:即使你费劲手动进入了工厂模式、临时打开了 Telnet,光猫一重启,这些配置往往会被重置回默认值。你需要一个工具,在每次需要时快速重走一遍"认证 → 进工厂模式 → 开 Telnet"的完整流程,最好还能自动化。zteOnu 做的事,就是把这条流程封装成一条命令行,帮你自动完成:

  1. 通过设备的 Web 管理接口(默认8080端口)发起一系列请求;
  2. 完成加密认证(这部分用到了 AES 加密和内置密钥池);
  3. 请求进入工厂模式,换取 Telnet 的用户名和密码;
  4. 可选地,自动登录 Telnet 并写入配置,让 Telnet永久保持开启。

听起来挺玄乎,但用起来其实就是一条命令的事。下一节我们就把它跑起来。


二、安装只需三步:从源码到可执行文件

zteOnu 用 Go 编写,好处是编译出的二进制文件不依赖运行时环境,Windows、Linux、macOS 都能直接运行。前提是你机器上已经有 Go 环境(当前版本需要 Go 1.26 以上,安装最新版即可)。

第一步,把仓库克隆到本地并进入目录:

git clone https://gitcode.com/gh_mirrors/zt/zteOnu cd zteOnu

第二步,编译生成可执行文件。项目根目录下的go.mod已经声明好了依赖,直接构建即可:

go build -o zteonu .

这条命令会读取main.go作为入口,把整个程序编译成名为zteonu的二进制文件。编译过程中会拉取cobra(命令行框架)和resty(HTTP 客户端)两个依赖库,网络正常的话几秒就能完成。

第三步,验证是否编译成功:

./zteonu version

如果能看到类似ZteONU dev, built at unknown的输出,说明程序已经就绪。想全局使用的话,可以把二进制放到系统 PATH 里,例如sudo mv zteonu /usr/local/bin/,之后在任何目录都能直接敲zteonu了。

💡 提示:本文所有命令都假设你在光猫同一局域网内运行,并且能访问光猫的管理地址(默认192.168.1.1)。操作前建议先用浏览器确认能打开光猫后台,避免在"连不上设备"的情况下干等。


三、核心操作:用一条命令打开工厂模式

现在进入正题。zteOnu 最基础的使用方式是运行下面这条命令:

./zteonu -i 192.168.1.1

这里的-i指定光猫的 IP 地址。工具会自动完成我们第一节说的完整流程,你会看到类似这样的分步输出:

----------------------------------- step [0] reset factory: ok step [1] request factory mode: ok step [2] send sq: ok step [3] check login auth: ok step [4] enter factory mode: ok ----------------------------------- user: <telnet用户名> pass: <telnet密码>

每一行 step 都在干什么?简单拆解一下,这也是理解工具的关键:

步骤动作通俗解释
step 0请求SendSq.gch重置工厂接口相当于"敲门",激活设备的 Web 服务,提高后续成功率
step 1请求RequestFactoryMode.gch向设备申请进入工厂模式
step 2发送随机数,协商加密密钥设备会返回一个随机数,工具用它从内置密钥池里算出本次会话的 AES 密钥
step 3加密发送用户名密码,校验身份用上一步的密钥加密认证请求,设备验证通过后返回凭证
step 4请求FactoryMode.gch换取 Telnet 凭证拿到最终可用的 Telnet 用户名和密码,打印在屏幕上

看到这里你可能有个疑问:为什么步骤 3 要加密?因为这类认证请求如果明文传输,很容易被局域网内的人抓包窃听。zteOnu 用 AES-ECB 加密,密钥则根据设备返回的随机数动态生成,每次会话都不同。这些细节工具都帮你处理好了,你只需要关心最后打印出来的那一对用户名和密码。

如果你运行的设备较新,可能还会遇到另一种认证方式,需要加--new参数,我们放到下一节讲。


四、进阶玩法:永久 Telnet 与新旧两种认证方式

4.1 一键永久开启 Telnet

拿到 Telnet 凭证只是第一步,真正省心的是让 Telnet 一直保持开启。zteOnu 提供--telnet参数,在换取凭证之后会自动登录 Telnet、修改数据库配置、保存并重启设备:

./zteonu -i 192.168.1.1 --telnet

命令执行后,工具会依次执行这么几件事(对应源码app/telnet/telnet.go):

  1. 用刚才拿到的凭证登录 Telnet;
  2. 执行sendcmd 1 DB set TelnetCfg ...系列命令,把 Telnet 的开关、用户名、密码、最大连接数、安全级别写进配置数据库;
  3. 执行sendcmd 1 DB save保存配置;
  4. 执行reboot重启设备,让配置生效。

完成后屏幕上会提示:

Permanent Telnet succeed user: root, pass: Zte521 wait reboot..

也就是说,重启之后 Telnet 依然可用,默认账号是root、密码是Zte521。如果你不想用默认的 23 端口,可以用--tp自定义,例如--tp 2323

⚠️安全提醒--telnet会把 Telnet 永久开放,同时把账号密码设为一个公开默认值(root / Zte521)。这意味着任何能连到设备的人都有可能拿到控制权。建议只在受控的内网环境中使用,操作完成后尽快修改密码,或通过防火墙限制访问来源。这属于高危操作,请务必确认你有权管理这台设备。

4.2 新旧两种认证方式怎么选

你可能注意到,不同批次的光猫固件对认证协议的处理并不一样。zteOnu 为此支持两种方式:

参数适用场景说明
(默认,旧方式)老固件直接发送加密认证请求,兼容性好
--new新固件需要额外发送一个SendInfo报文,里面编码了客户端 MAC 地址

新方式的关键在于 MAC 地址。设备会校验发送方 MAC 是否在白名单里,如果 MAC 不匹配,认证就会失败(返回info error)。所以使用--new时,你通常要同时指定一个设备认可的 MAC:

# 用指定 MAC 推导 SendInfo 报文(历史上设备接受 00:07:29:55:35:57) ./zteonu -i 192.168.1.1 --new -m 00:07:29:55:35:57 # 或者指定本机某个网卡的 MAC 作为来源 ./zteonu -i 192.168.1.1 --new --iface en0

这里-m是手动指定 MAC,优先级最高;--iface是从指定网卡读取 MAC;两者都不给时,工具会自动选择本机第一个非回环网卡的 MAC。项目源码里有一段很有意思的注释:SendInfo报文是逆向设备内置校验虚拟机得到的——46 字节的报文由 12 个小端uint16值组成,每个值后面跟两个零字节,MAC 被异或进数值字节中。正因为搞清了这套规则,工具才能对任意 MAC 重新计算报文,而不是死记一份抓包数据。

💡 建议:如果你不确定自己的光猫属于哪种固件,可以先跑一次不带参数的旧方式命令。如果认证一直失败、日志里出现info error,再改用--new配合-m指定 MAC 试试。


五、避坑指南与安全使用建议

5.1 常见错误与排查思路

作为新手,第一次跑命令大概率会遇到下面某个问题。对照表格排查,能省不少时间:

现象可能原因处理方法
连接超时IP 填错或不在同一网段ping 192.168.1.1确认网络连通
返回errors user or password认证账号密码不对确认光猫的 telecomadmin 账号密码;默认组合是telecomadmin / nE7jA%5m
返回info error新固件要求SendInfo且 MAC 不被认可改用--new -m 00:07:29:55:35:57重试
请求反复重试(Attempt retrying..)设备繁忙或请求时序不对工具本身会自动重试最多 10 次,仍失败就等设备空闲后再跑
端口被拒管理端口不是默认 8080--port指定光猫实际 HTTP 端口

源码里有一个细节值得知道:工厂模式的整个流程最多自动重试 10 次,每次间隔 0.5 秒(见app/factory/factory.goHandle方法)。所以看到Attempt retrying..(1/10)这样的输出时先别慌,给工具一点时间自己调整。

5.2 负责任地使用:三条底线

工厂模式和永久 Telnet 本质上是绕过设备限制的能力,用得好是运维利器,用得不好就是安全隐患。请务必遵守:

  1. 只在你有权操作的设备上使用。如果你是给客户或公司设备操作,先确认授权;违规操作可能违反服务条款甚至法律。
  2. 最小权限原则。能只开 Telnet 就不必开工厂模式;能临时开就不要永久开。--telnet开完后,尽快改掉默认密码Zte521
  3. 先备份再操作。光猫配置一旦改错可能导致断网,动手前记下当前设置,最好在测试设备上先演练一遍。

5.3 批量管理的小技巧

如果你负责多台光猫,可以把 zteOnu 包进一个简单的 Shell 循环,逐台执行,并顺手记录每台的成功/失败状态。要点是逐台串行、加延时,避免同一时间打爆设备。举个思路示例:

#!/bin/bash for dev in 192.168.1.1 192.168.1.2 192.168.1.3; do echo "==> $dev" ./zteonu -i "$dev" --new -m 00:07:29:55:35:57 --telnet && echo "OK: $dev" || echo "FAIL: $dev" sleep 2 done

这段脚本对每一台设备依次执行"新方式认证 + 永久 Telnet",每台之间休息 2 秒避免请求过密。真实生产环境里,建议把sleep拉长到 5~10 秒,并记录日志,方便事后审计。


六、写在最后:把"反复折腾"变成"一次搞定"

回到开头那个深夜场景。有了 zteOnu,你不再需要记住那一长串手动的认证步骤,也不再担心重启后一切归零——一条命令,工厂模式、永久 Telnet,全部搞定。这正是这类工具最大的价值:把依赖经验的手工操作,变成可复制、可脚本化、可批量执行的标准流程

如果你接下来想深入理解它的原理,推荐按这个顺序阅读源码:

  • 认证与工厂模式核心逻辑:app/factory/factory.go,重点看handle()的五步流程和密钥协商;
  • 新方式报文逆向细节:app/factory/model.go,注释里完整解释了 MAC 如何编进 46 字节报文;
  • Telnet 永久开启逻辑:app/telnet/telnet.go,看它如何用sendcmd改数据库;
  • 命令行参数入口:cmd/root.go,所有 flag 的定义和默认值都在这里。

最后再叮嘱一次:工具本身没有善恶,关键看使用方式。在受控环境里用它提升效率,同时守住安全底线。如果你在真机上跑通了,欢迎把你遇到的设备型号和固件版本记录下来分享给社区——多一份数据,这个工具对后来者就更友好一点。

【免费下载链接】zteOnuA tool that can open ZTE onu device factory mode项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考