简介:中兴TelnetONU1.5版本是一款面向中兴光猫用户的Telnet调试与设备管理工具,针对家庭网关深度维护场景,提供Windows和Python双版本,重点解决开启Telnet、获取并修改超级密码、调整SN认证等常见难题。压缩包共23个文件,约16.46MB,内部包含Windows可执行程序与Python脚本两套核心工具,并配有说明文档、配置文件、协议描述及bat辅助脚本,兼顾小白上手与开发者二次开发。已有10363人学习/下载,适合光纤宽带用户、网络运维人员及对光猫有定制需求的技术爱好者。借助双版本可灵活切换运行环境,通过配套教程与命令参考能快速掌握获取超级密码的完整流程;硬编码导出、出厂模式等脚本则有助于深入分析和调整设备参数,在增强安全性的同时满足个性化组网需要。
1. 为什么要用 TelnetONU:超级密码会变,SN 绑定换猫难,双版本是给两种人准备的
用过中兴光猫的人基本都撞过同一堵墙:光猫装好时默认密码还能进,过一阵子运营商下发配置后,普通用户账号只能进“基本设置”,桥接、VLAN、超管账号一概看不到。更麻烦的是换猫——旧猫淘汰想换自己的设备,光猫里的 SN 认证直接卡住,LOID 对上了也注册不了。TelnetONU 1.5 版本把这两件事统一收口:通过 Telnet 登录 ONU 的维护命令行,拿到超级管理员权限,改 DevAuthInfo 里的超管账号密码,再改 SN 认证信息,让设备在 OLT 侧重新通过注册。标题里的 Windows+Python 双版本,分别服务两类人:装维师傅手里只有 Windows 机器,要双击就能干活;折腾党有 Python 环境,要批量、要脚本化、要跑完留日志。这个工具解决的是“光猫是黑匣子,Telnet 是最后一道门”的问题,适合改桥接被锁、换猫注册失败、二手光猫过户、想清掉固件里旧归属信息的人。
2. Windows 版先把 Telnet 通道跑通:开启客户端、探测端口、第一次登录
2.1 先确认三件事:光猫型号、固件版本、Telnet 端口是否开放
用 TelnetONU 之前,先把目标设备信息摸清。中兴光猫型号不同,Telnet 登录方式差别很大:老款 F660、F677V2 这类固件还保留着 Telnet 服务,默认监听 23 端口;新一些的设备,比如中兴 7615TV3、F7607P 这代,大部分固件默认关闭 Telnet 服务,需要先用设备管理页或使能工具把 Telnet 打开,否则后面所有事情都做不了。我一般的做法分三步:先通过光猫背后的标签确认型号和硬件版本;再登录 Web 管理页看软件版本;最后直接探一下 23 端口是否响应。
需要留意的是,中兴光猫的“维护账号”分两层:一层是 Web 里的超级管理员,比如 telecomadmin;另一层是 Telnet 里的 ONU 控制台账号,常见的有 root、telnetadmin。TelnetONU 主要操作的是第二层,改超级密码走的是DevAuthInfo表,改 SN 走的是 boardinfo 和 GPON/EPON 注册配置。如果型号不确认就套用命令,大概率会在端口探测和账号登录两个环节卡住。这一步别跳,后面的命令能不能生效全看这里。
2.2 Windows 下开启 Telnet 客户端与端口探测批处理
Windows 10/11 默认不带 Telnet 客户端,cmd 里敲telnet会提示“不是内部或外部命令”。这一步不装,后面连登录都做不了。开启方式是在控制面板的“启用或关闭 Windows 功能”里勾选 Telnet Client,也可以直接用管理员态命令:
dism /online /enable-feature /featurename:TelnetClient /norestart这条命令执行完不需要重启,新开一个 cmd 窗口就能用。注意 dism 必须跑在管理员终端里,否则会报“错误: 拒绝访问”。执行完可以用下面这条命令验证:
telnet如果进入 Microsoft Telnet Client 的提示符,说明客户端已经就位。此时不要直接敲quit退出,因为我还要做端口探测。
端口探测我用 PowerShell 的 Test-NetConnection,比起打开 Telnet 客户端等超时更直观:
Test-NetConnection -ComputerName 192.168.1.1 -Port 23返回结果里TcpTestSucceeded : True代表 Telnet 端口开放,False代表服务没开或端口被改。需要注意:光猫管理地址可能是 192.168.1.1,也可能是 192.168.0.1 或 192.168.1.254,以光猫背后标签为准。端口探测失败时,先排查电脑和光猫是否在同一网段,再确认光猫是否开了 Telnet 服务。新固件的开启入口一般在 Web 管理页的“设备管理—维护”里,有些版本需要登录普通用户后连续点击版本号之类的隐藏入口,具体以固件为准。
2.3 用 Windows 版 TelnetONU 跑通首次登录:命令序列与账号匹配
端口通了之后,手动验证一遍 Telnet 登录链路,这样后面交给工具跑的时候,出问题你知道卡在哪一步。cmd 里敲:
telnet 192.168.1.1登录后进入的是 ONU 维护命令行,提示符一般是WAP>,这也是 TelnetONU 这类工具脚本识别设备就绪的关键标志。首次登录通常要求输入 Login 和 Password,账号的匹配逻辑因固件而异。中兴较新设备常见组合是telnetadmin/telnetadmin,老款有root/root,定制固件里见过admin/admin,还有部分地区把密码改成了设备序列号后几位。这个问题没有统一答案,只能先试常用组合,再根据 Web 页面信息和固件版本缩小范围。
Windows 版 TelnetONU 的典型用法是双击运行后,脚本自动完成“连接→登录→等待 WAP> 提示符→下发命令→保存退出”。它内部做的工作无非是把上面这串手工操作自动化。我不建议完全不理解过程就直接双击工具:Git,至少你得知道它登录用的哪个账号、下发了哪些命令。既然标题里说“内含教程”,我的建议是第一次用的时候把教程里写的命令序列手动跑一遍,确认每一条命令在你这个型号上都有回显,再交给工具批量跑。
2.4 常见固件的 Telnet 账号与密码对照
下面是我在不同中兴光猫上实际遇到过的 Telnet 账号规律,整理成表供参考。注意:这张表是经验值,不是官方文档。定制固件(比如各省移动、电信的 E2633、F663N 定制版)改动空间很大,账号可能被运营商抹掉或改掉。
| 设备形态 | 常见 Telnet 账号 | 备注 |
|---|---|---|
| 老款 F660、F607 | root / root | 端口默认 23,登录后 WAP> |
| F677V2、F657GV9 | telnetadmin / telnetadmin | 部分固件密码带校验 |
| 新款 7615TV3 等 | 需先开启 Telnet 服务 | 账号多为 telnetadmin |
| 运营商定制固件 | admin / admin 或 root | 视地区和固件而定,个别无 Telnet |
如果表里的都试过还进不去,那就不是账号问题,而是固件层直接关闭了 Telnet 服务。这类情况需要先通过 Web 页面的隐藏维护入口开启 Telnet,或者用对应使能工具打开。TelnetONU 的教程里如果写了开启方式,优先按教程走;没写的话,多数情况下是 Web 页面里“维护”标签下有个 Telnet 开关。
3. Python 版接替手工:用 telnetlib 把重复操作变成脚本
3.1 为什么 Python 版比 Windows 版更值得留一份
Windows 版解决了“能跑”的问题,Python 版解决的是“能改”的问题。Telnet 操作 ONU 本质上是一串等待式交互:发一条命令,等回显,根据回显决定下一条。Windows 批处理做这种交互很笨拙,它没有一个干净的机制去读回显、做判断。Python 则可以把整个交互过程封装成函数,出错能捕获、步骤能注释、日志能输出。尤其当你手里不止一台设备——给亲戚朋友捎带手帮改超密、帮过户光猫时,批量处理的效率差距就体现出来了。
另一个原因是可维护性。TelnetONU 1.5 的 Windows 版是打包好的可执行文件,固件版本一变,命令不兼容,你只能等作者更新。Python 版拿到的是源码,命令不对自己改一行就行。我就是因为这个原因,把 Windows 版当“首次跑通验证工具”,日常维护全部转到自己改过的 Python 脚本上。前提是你本机得有 Python 环境,安装时记得勾选“Add Python to PATH”,装完在 cmd 里敲python --version能出版本号再往下走。
3.2 最小可用的 telnetlib 脚本:改密码的命令序列
下面这个脚本是我自己常用的最小版本,作用是通过 Telnet 登录 ONU,查看当前超级管理员配置,然后修改超级密码。注释里写清楚了每一步在干什么:
import telnetlib import time HOST = "192.168.1.1" PORT = 23 USER = b"telnetadmin" PASSWD = b"telnetadmin" PROMPT = b"WAP>" NEW_PASS = "NewAdminPass123" # Python 3.13 起标准库移除了 telnetlib,跑之前先检查版本 import sys if sys.version_info >= (3, 13): raise RuntimeError("Python 3.13+ 没有 telnetlib,请换 Python 3.8~3.12 或改用 pexpect") tn = telnetlib.Telnet(HOST, PORT, timeout=10) # 登录 tn.read_until(b"Login:", timeout=5) tn.write(USER + b"\r\n") tn.read_until(b"Password:", timeout=5) tn.write(PASSWD + b"\r\n") # 等待进入 WAP> 提示符 tn.read_until(PROMPT, timeout=5) # 1. 查看当前超级管理员账号配置 tn.write(b"sendcmd 1 DB p DevAuthInfo\r\n") time.sleep(1) output = tn.read_very_eager().decode("utf-8", errors="ignore") print("当前配置:") print(output) # 2. 修改超级管理员密码 tn.write(("sendcmd 1 DB set DevAuthInfo 0 Pass " + NEW_PASS + "\r\n").encode("ascii")) time.sleep(1) tn.read_very_eager() # 3. 保存配置,不保存则重启后失效 tn.write(b"sendcmd 1 DB save\r\n") time.sleep(1) tn.read_very_eager() tn.close()这段代码的逻辑顺序是:连接 → 登录 → 等待提示符 → 查配置 → 改密码 → 保存。这里有个关键点容易被新手忽略:Telnet 是文本流,没有任何结构化的返回码,read_until 等待的不是“命令执行成功”,而是下一个提示符出现。所以我在每条命令后都加了 time.sleep(1),用等待时间来兜底回显延迟。改密码前先执行查询命令,是因为我要确认 0 号用户确实存在,且当前 Pass 字段能读出来。有些固件对 User 字段有保护,只改 Pass 不动 User 更稳妥。
3.3 参数说明与异常处理:超时、提示符变化、假死
上面脚本里的几个参数值得单独说。timeout=10是 TCP 连接超时,超过这个时间连不上就抛异常;read_until里的 timeout=5 是等待特定字符串的超时,比如等 Login 提示符。这两个值不是拍脑袋定的:ONU 的 Telnet 服务响应普遍偏慢,尤其刚开机时,5 秒以内通常够用;如果设备负载高,建议放宽到 10 秒。把超时设得太短,会遇到“还没等到 Login 就超时退出”的假失败;设得太长,设备挂了你也不知道,只能干等。
提示符WAP>也不是所有固件都长这样。我见过中兴部分新固件把提示符改成了#或设备型号名,比如F677V2>。这时脚本里的PROMPT就得改,否则read_until永远等不到目标字符串。排查这类问题的方法是:先手动 Telnet 登录,看实际提示符是什么,再把脚本里 PROMPT 改成观察到的值。这也是很多人拿到 Python 版脚本后第一个翻车点——直接跑别人的脚本,没先确认自己设备提示符。
另一个坑是read_very_eager()读取可能不完整。这条命令读取的是当前缓冲区里的所有数据,但如果 ONU 回显速度慢,你读到的可能是上一轮命令的残留。我一般会搭配 sleep 用,宁可多等 0.5 秒也不要读到不完整的回显。真要实时交互,可以考虑 pexpect 这类专门做交互自动化的库,但它需要额外的 pip 安装,复用性不如标准库。
3.4 从单台到批量:把设备清单做成配置表
只有一两台设备,脚本写死 IP 没问题。一旦量上来了,建议把设备信息抽出来放到配置表里,脚本只管读配置、连设备、执行命令。我最常用的是 CSV 格式:
ip,user,passwd,new_pass,remark 192.168.1.1,telnetadmin,telnetadmin,Admin123456,客厅光猫 192.168.1.2,root,root,Admin123456,卧室光猫Python 里用标准库 csv 模块读这个文件,然后循环调用登录和改密逻辑。这个做法的价值在于:设备参数和脚本逻辑分离,换一批设备不用改代码,只改 CSV。批量执行时还有一个关键习惯——每台设备的操作日志要单独落盘,至少记录 IP、操作时间、成功失败。原因很实在:Telnet 交互出问题时,没有日志你根本不知道是第几台、哪一步开始错的。我吃过这个亏,批量改到第五台时发现命令没生效,但前四台都提示“完成”,如果没有日志,你连哪台有问题都定位不了。
4. 修改超级密码与 SN 认证:命令、备份和回滚边界
4.1 修改超级密码:先查后改,改完必须落盘
修改超级密码的思路不是“直接改”,而是“先查清楚再改,改完立刻保存”。登录 ONU 后,第一步永远是执行查询命令,把当前超级管理员配置完整拉出来。中兴 ONU 上超级管理员信息存在DevAuthInfo表里,0 号用户一般就是最高权限的管理员,1 号用户通常是普通 useradmin。查表命令:
sendcmd 1 DB p DevAuthInfo回显里能看到User和Pass字段。有些固件 Pass 字段是明文,有些是密文。如果是密文,改密码时直接 set 新密码即可,系统会在保存时重新加密;如果是明文,只要确认你没有被限制修改,直接 set 进去。改命令:
sendcmd 1 DB set DevAuthInfo 0 Pass YourNewPassword123 sendcmd 1 DB save这里有两个细节。第一,0是索引,不是固定不变的,一切以查询结果为准。有的固件里 0 号是普通用户,1 号才是管理员,盲目按索引改会把超管密码改错地方。第二,sendcmd 1 DB save必须有。Telnet 里改的配置默认只在内存中生效,掉电就丢。不执行 save,你重启光猫后会发现密码变回去了,那是正常的,不是工具不好使,是你没落盘。
还有一条血泪经验:改超管密码前,把查询结果原样保存下来,这就是你的“后悔药”。要是改错了、忘了新密码,你还能回来看出原始配置长什么样。别问我为什么强调这个,我曾经改完密码后把新密码也忘了,最后是靠恢复出厂才救回来。
4.2 SN 认证的原理:GPON 认 SN,EPON 认 LOID,改前先备份 boardinfo
SN 认证是光猫入网注册的核心。GPON 网络里,OLT 会校验 ONU 的序列号(SN),和网管系统里登记的序列号一致才允许注册;EPON 网络则更多认证 LOID 或 MAC。中兴 ONU 上 SN 不只是打印在标签上的一串字符,它同时存在设备配置和 boardinfo 文件里。所以改 SN 认证,改的是设备注册信息,目的是让设备在 OLT 侧的身份标识和运营商标记一致。
我在动手改 SN 之前,一定会先把原值备份下来。通过 Telnet 查看 boardinfo 内容是最常见的做法:
cat /etc/boardinfo这个文件里通常能看到设备的 SN、MAC、硬件版本等出厂信息。有些版本路径不同,可能在/usr/local/boardinfo或/opt/etc/boardinfo,用find / -name boardinfo可以定位。拿到文件内容后,把 SN 对应的行原样复制到一个本地文本文件里存好。改完 SN 如果注册失败要回滚,这些原始值就是唯一可靠的参考。没有备份就改 SN,和闭着眼拆炸弹没有区别。
4.3 修改 SN 的常见命令路径与字节序问题
修改 SN 没有一条“全中兴通用”的命令,不同固件版本差异很大。我见过的可靠方案大致分两类:一类是通过 ONU 维护命令直接改,比如部分固件支持set sn或通过sendcmd 1 DB set修改 SN 相关表项;另一类是改 boardinfo 文件后重启生效。第二类做法一般先通过 Telnet 把 boardinfo 导出到本地,修改 SN 字段后再导回去,随后重启光猫让 u-boot 重新读取。
这里有一个非常容易翻车的细节:字节序。SN 在 boardinfo 文件里可能是正常 ASCII 排列,也可能是反序存储。比如标签上印的是HWTC12345678,文件里存的可能是87654321CTWH。改的时候没注意字节序,看起来改对了,实际写入是反的,OLT 收到后识别不了,注册状态直接原地打转。遇到 OLT 注册失败的场景,第一反应先确认字节序,而不是怀疑命令没执行成功。
具体的命令以 TelnetONU 1.5 教程里提供的为准。我自己的建议是:先用查询命令确认当前 SN 在设备里的真实存储格式,再照着相同格式改。比如查询结果里看到的 SN 是反序的,新 SN 也要反序写进去,不要自作聪明转成正序。
4.4 换猫场景下 SN 要一起改的三个前提
换光猫时改 SN,不是改了就能通。我遇到过的成功案例都有三个前提:LoID 和 Password 已经正确配置;新设备的 SN 改成旧设备的 SN 或网管登记的序列号;改完 SN 后完整注册一次,等 OLT 重新下发业务。任何一步缺失,注册就卡住。
先说 LoID。部分运营商的认证方式是 LOID + 密码,只在光猫里改了 SN 没用,LOID 不对照样注册失败。其次,改 SN 只影响注册身份标识,光猫的其他业务配置——VLAN、路由模式、语音鉴权——不会跟着变。如果你是从一个完全陌生的光猫开始改,只改 SN 不够,还得把宽带拨号账号密码、VLAN ID 一起核对。最后,改完 SN 后一定要清掉光猫里残留的旧业务配置,尤其之前绑定过其他宽带账号的,不然可能出现“注册成功但无法拨号”的诡异状态。
5. 避坑:TelnetONU 调试最常见的 5 个翻车现场与排查顺序
5.1 翻车现场一:Telnet 端口连不上,网线明明通着却被拒绝
现象:网线连接正常,Web 管理页能打开,但Test-NetConnection 192.168.1.1 -Port 23返回TcpTestSucceeded : False,或 Telnet 客户端直接提示“无法打开到主机的连接”。
原因:新固件普遍默认关闭 Telnet 服务,端口没有监听,连接自然被拒。这不是网络问题,是服务没起。
解决:先通过 Web 页面找 Telnet 开关。中兴较新设备一般在“设备管理”或“维护”页面里有 Telnet 使能选项;找不到开关的版本,需要借助对应使能工具打开,TelnetONU 教程里如果写了开启方法,优先按教程执行。确认端口通了之后再跑登录脚本,不要反复换账号密码试,问题的根源不在认证。
5.2 翻车现场二:账号密码对不上,root 和 telnetadmin 来回试
现象:Telnet 端口通了,但输入root/root提示密码错误,换telnetadmin/telnetadmin还是进不去,前后试了七八组全部失败。
原因:运营商定制固件对 Telnet 账号做了改动,常见的是删掉 root 账号或改了默认密码,也有的固件要求先设置 Telnet 密码才能登录。
解决:先在光猫 Web 页面里找“Telnet 密码设置”或“维护密码”,有些固件允许用户自己设一个 Telnet 登录密码,设完再用这个密码登录。另一条路是查设备当前固件版本的默认账号字典,直接搜“光猫型号 + Telnet 账号”基本能找到同款答案。不建议暴力试密码,试多了有些固件会临时锁定 Telnet。
5.3 翻车现场三:Python 3.13 直接报 ModuleNotFoundError
现象:脚本运行时提示ModuleNotFoundError: No module named 'telnetlib'。
原因:Python 3.13 起,标准库移除了 telnetlib 模块。你本机装的是新版 Python,脚本用的是旧版标准库,不兼容。
解决:最省事的办法是换 Python 3.8~3.12 版本运行脚本,装的时候注意“Add Python to PATH”勾选;不想换版本,就把 telnetlib 的调用改成 pexpect,实现逻辑类似但需要pip install pexpect。我不建议为了跑一个小脚本去改系统 Python 路径,直接在项目目录里用虚拟环境锁版本最干净。
5.4 翻车现场四:超级密码改完重启后恢复原密码
现象:用sendcmd 1 DB set DevAuthInfo 0 Pass改了密码,当时查询确认改成功,但光猫重启后密码又变回旧值。
原因:没有执行sendcmd 1 DB save,或者执行 save 后没有等返回值就立刻断电。配置只保存在内存缓存里,没有落盘。
解决:改完密码后执行sendcmd 1 DB save,等 1~2 秒确认没有报错再重启。有些固件对 DB 操作有两次落盘的要求,保险起见可以连续执行两次 save。这个坑我踩过不止一次,现在我的脚本里 save 之后必加 sleep,就是为了等落盘动作彻底完成。
5.5 翻车现场五:SN 改完上不了网,OLT 注册状态不正常
现象:SN 改完后光猫能拨号,但宽带没有数据流量;或者设备注册状态一直处于 O1、O2,进不去 O5 正常状态。
原因:SN 字节序写反了,或者 SN 对应的设备信息(比如厂商代码)和 OLT 登记的不一致。OLT 侧校验失败,拒绝发放业务。
解决:改回备份的原始 SN,核对字节序后重新修改。恢复原始 SN 后如果注册还不行,检查 boardinfo 里 MAC 和硬件版本有没有被动过,最好把整个文件恢复到备份态再重启。这也是为什么我一直强调 boardinfo 一定要完整备份而不是只记一行 SN。
6. 进阶:把调试过程固化成自己的脚本,并做好验证与回滚
到这一步,你已经能用工具登录、改密码、改 SN 了。下一步是把这套流程固化成自己的脚本,让验证和回滚成为自动的默认动作。我的个人模板分四步:先探测端口和账号可用性,再登录并备份当前配置,接着执行修改命令,最后验证修改是否真正生效。验证部分很多人会省掉,但这恰恰是最重要的——Telnet 命令有回显不代表操作生效,生效也不代表能通过 OLT 注册。
验证密码修改是否成功的可靠方法不是再看一眼 DevAuthInfo,而是保存后让光猫重启,再用新密码重新 Telnet 登录一次。能进就说明改成功,进不去就回滚。验证 SN 是否生效,看光猫的注册状态和光信号概要:GPON 注册成功通常能查到状态为 O5,注册失败则是 O1 或 O2。这两个验证动作做下来,才算真正“完成”,而不是“执行了”。
回滚机制的实现也很简单:把第 4 章里备份的 DevAuthInfo 原文和 boardinfo 原文存成独立文件,脚本里写一个--rollback参数,遇到失败时直接读备份文件,把原始值写回去。这个习惯帮我救回了好几台改坏的设备。最开始我嫌麻烦,觉得多备份几个字段就行了,直到有一次改字节序失误、原值又没记全,整个下午都在给光猫恢复出厂重来,才明白备份文件这种东西,存了可以不用,但用的时候绝对不能没有。
另一个值得做的事,是把同一套调试思路平移到中兴其他设备上,比如 B860AV2.1-T 这类机顶盒,底层同样是 Telnet 维护通道,登录方式和命令风格大同小异。工具本身只是个壳,真正值钱的是你对命令、提示符、字节序、落盘机制的理解。希望我的这些踩坑记录能帮你少走一段弯路,祝顺利。
本文还有配套的精品资源,点击获取