下载工具 前提 你的光猫是中兴的
运营商还没有下发配置(意味着你需要reset)
factorymode_crack 适用老款光猫
zteOnu 兼容新款光猫
在中兴F653GV9上测试通过
factorymode_crack 使用方法 cd 到 factorymode_crack 目录
运行相关命令
1 ./factorymode_crack.exe -l xxx open -i 192.168.1.1 -u CMCCAdmin -pw aDm8H%MdA -p 80
如果不行可以将80端口改为8080端口
zteOnu 使用方法 cd 到 zteOnu 目录
运行相关命令
1 ./zteOnu --ip 192.168.1.1 --user CMCCAdmin --pass aDm8H%MdA --port 80
加上 --telnet 参数可以固化telnet,但在我这台机器上不行,所以我就不加了
telnet 使用windows自带的telnet工具可能会出现无法打开23端口的情况,可以使用putty工具
可以看一下路由器的配置
然后 cat 里面的文件,可以看到一些配置信息
1 2 3 4 5 sendcmd 1 DB set DevAuthInfo 1 Level 1 sendcmd 1 DB set DevAuthInfo 0 User xxxxxxxx sendcmd 1 DB set DevAuthInfo 0 Pass yyyyyyyy
本人的光猫是移动版中兴 F653GV9
在此记录具体信息
通过命令,可以得知以下信息:
项目 型号 处理器 ARMv7 Processor rev 1 (v7l) 内存 512MB 内核版本 4.1.25 芯片 ZX279127S 核心数 1 芯片厂商 ZXIC 固件大小 256M 设备树 ZTE ZX27912X BogoMIPS 1987.37 主频(推测) 993.7MHz
这个光猫还是不错的,虽然单核A9的处理器配512MB内存很难绷得住,但是全千兆端口、无Wifi、稳定性很好,不过没有源码,只能充当光电转换的角色。
点击查看具体信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 / # uname -a Linux F653GV9 4.1.25 #1 SMP Fri Jul 22 10:26:33 CST 2022 armv7l GNU/Linux / # cat /proc/version Linux version 4.1.25 ([email protected] ) (gcc version 4.9.4 (Buildroot 2017.05-svn2186) ) #72 SMP Sun Jun 06 21:16:58 CST 2021 / # cat /proc/cpuinfo processor : 0 model name : cortex-a9 (arm v7l) BogoMIPS : 1987.37 Features : half fastmult edsp tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1 Hardware : ZTE ZX27912X (Device Tree) Revision : 0000 Serial : 0000000000000000 / # cat /proc/capability/boardtype type : F653GV9 flag : 1 vid : 167 optype : 0 optname : DF tmtype : 0 cpuname : ZX279127S cpuid : 4 chipvendor : ZXIC / # cat /proc/capability/ethernetmac IfName EMAC Mode Speed Duplex AutoNeg CurMode Port eth0 0 1 1000Mbps full 1 GMII 3 eth1 0 1 1000Mbps full 1 GMII 2 eth2 0 1 1000Mbps full 1 GMII 1 eth3 0 1 1000Mbps full 1 GMII 0 wan_lport: 3 / # free total used free shared buffers Mem: 524288 208224 316064 1144 3432 Swap: 0 0 0 Total: 524288 208224 316064 / # cat /proc/stat cpu 21685 0 30484 4788950 5442 0 6943 0 0 0 cpu0 21685 0 30484 4788950 5442 0 6943 0 0 0 intr 16666950 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4853504 0 0 644176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55191 0 0 0 0 1353694 0 0 7 7 2 7 0 0 0 0 9706974 0 0 0 0 0 0 0 53388 ctxt 52842244 btime 4294967295 processes 2134 procs_running 1 procs_blocked 0 softirq 17183364 9706467 4853357 19422 1354886 3090 0 61 0 0 1246081 / # cat sys/bus/cpu/devices/cpu0/uevent OF_NAME=cpu OF_FULLNAME=/cpus/cpu@0 OF_TYPE=cpu OF_COMPATIBLE_0=arm,cortex-a9 OF_COMPATIBLE_N=1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 / # fdisk -l Disk /dev/loop0: 20 MB, 20418560 bytes 255 heads, 63 sectors/track, 2 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/loop0 doesn't contain a valid partition table Disk /dev/mtdblock0: 268 MB, 268435456 bytes 255 heads, 63 sectors/track, 32 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/mtdblock0 doesn't contain a valid partition table Disk /dev/mtdblock10: 52 MB, 52428800 bytes 255 heads, 63 sectors/track, 6 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/mtdblock10 doesn't contain a valid partition table / # df Filesystem 1024-blocks Used Available Use% Mounted on /dev/root 32640 27332 5308 84% / /dev/loop0 19968 19968 0 100% /kmodule /dev/mtdblock3 4096 456 3640 11% /tagparam tmpfs 20480 252 20228 1% /var tmpfs 25600 0 25600 0% /vasdocker tmpfs 81920 0 81920 0% /upgtempfile tmpfs 2048 0 2048 0% /var/osstmp tmpfs 2048 0 2048 0% /mnt tmpfs 16384 24 16360 0% /var/felix-temp tmpfs 15360 32 15328 0% /tmp /dev/mtdblock5 8192 640 7552 8% /userconfig /dev/mtdblock6 4096 384 3712 9% /kmodule/usr/local/ct ubi0_0 41628 25872 15756 62% /kmodule/usr/tmp /dev/loop1 26624 26624 0 100% /kmodule/usr/java ubi1_0 55508 9788 42852 19% /kmodule/usr/plugin /dev/mtdblock4 4096 404 3692 10% /wlan cgroup_root 222696 0 222696 0% /sys/fs/cgroup / # cat /etc/fstab # <file system> <mount point> <type> <options> <dump> <pass> # The syntax of busybox's fstab entry's a little different than traditional # mount, and doesn't work with the usual 'rootfs / rootfs rw 0 0' entry. # Actually, it's not needed unless you're mounting from a non-nfs device, # like a hard disk. In that case, you probably need something like the # following: # /dev/hda1 / ext3 rw 1 1 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 #devpts /dev/pts devpts defaults 0 0 #tmpfs /var tmpfs rw 0 0 / # cat /proc/mtd dev: size erasesize name mtd0: 10000000 00020000 "whole flash" mtd1: 00200000 00020000 "u-boot" mtd2: 00400000 00020000 "others" mtd3: 00400000 00020000 "parameter tags" mtd4: 00400000 00020000 "wlan" mtd5: 00800000 00020000 "usercfg" mtd6: 00400000 00020000 "middleware" mtd7: 02000000 00020000 "kernel1" mtd8: 02000000 00020000 "kernel2" mtd9: 03200000 00020000 "osgi1" mtd10: 03200000 00020000 "osgi2" mtd11: 04100000 00020000 "plugin_data" mtd12: 01fe0000 00020000 "rootfs"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 / # mtd_debug read /dev/mtd0 0 0x10000000 /mnt/usb1_1/mtd0 / # tftp -p -l mtd0 192.168.1.2 / # tftp -p -l mtd1 192.168.1.2 / # tftp -p -l mtd2 192.168.1.2 / # tftp -p -l mtd3 192.168.1.2 / # tftp -p -l mtd4 192.168.1.2 / # tftp -p -l mtd5 192.168.1.2 / # tftp -p -l mtd6 192.168.1.2 / # tftp -p -l mtd7 192.168.1.2 / # tftp -p -l mtd8 192.168.1.2 / # tftp -p -l mtd9 192.168.1.2 / # tftp -p -l mtd10 192.168.1.2 / # tftp -p -l mtd11 192.168.1.2 / # tftp -p -l mtd12 192.168.1.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 / # cd /dev/ / # mtd_debug info mtd0 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 268435456 (256M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd1 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 2097152 (2M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd2 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 4194304 (4M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd3 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 4194304 (4M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd4 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 4194304 (4M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd5 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 8388608 (8M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd6 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 4194304 (4M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd7 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 33554432 (32M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd8 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 33554432 (32M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd9 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 52428800 (50M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd10 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 52428800 (50M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd11 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 68157440 (65M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0 / # mtd_debug info mtd12 mtd.type = MTD_NANDFLASH mtd.flags = mtd.size = 33423360 (31M) mtd.erasesize = 131072 (128K) mtd.oobblock = 2048 (2K) mtd.oobsize = 64 mtd.ecctype = MTD_ECC_NONE regions = 0
常用 telnet 命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sendcmd 1 DB p all sendcmd 1 DB p DevAuthInfo sendcmd 1 DB p TelnetCfg sendcmd 1 DB p WANCPPP sendcmd 1 DB p WLANPSK sendcmd 1 DB set MgtServer 0 Tr069Enable 0
配置分析 超级管理员账号为CMCCAdmin,密码变成了CMCCAdmin+8位随机字符串(数字/字母/特殊字符)这个基本上是随机的没有规律
pppoe拨号的账号为手机号@net,密码为12345678
参考 中兴光猫开临时telnet-修改超管密码-固化开启telnet—-第一期
【天翼天邑】 中兴电信光猫天翼4.0破解获取超级密码教程
【网络】 简单分享F7015TV3新款光猫详细参数及分享个人光猫修改经验
F653GV9 成功开启telnet 备份固件
光猫破解教程二:固件备份(小白升级篇,同样适用于路由器)
移动光猫固件备份、刷机、改sn和mac等
中兴7015TV3 开启telnet 换光猫 折腾记录
【中兴】 中兴光猫 ZXHNTelnet设置代码大全
移动中兴ZXHN F6610M光猫拨号密码查询
后续 挂在 OpenWrt 上的 Python 脚本 这光猫的系统是 Linux,并且有 BusyBox,理论可以通过 BusyBox 的一些命令来实现一些高级操作
然而还是我想多了,这个光猫的 BusyBox 版本太低,而且有大量的命令被删除了,所以只能用来做一些简单的操作
比如 iptables,可以通过 iptables 命令来设置防火墙规则,然而并不生效
又比如 tc,可以通过 tc 命令来设置网络带宽,然而 qdisc 的算法都被删除了
或许你可以想到使用 shell 脚本来实现一些功能,然而这个光猫的固件使用了 UBI 文件系统,ROOTFS 是只读的,以及没有任何文本编辑器(vi、vim、nano、emacs 都没有),即使是 sh 也是 not found。
只有 ifconfig 还算正常,可以通过 ifconfig 命令来设置网络接口
故此,只能另辟蹊径了,比如使用 Python 来实现一些功能
可以利用上述脚本模拟延迟
把它添加应用到 bash 脚本中,再使用路由器的定时任务中,可以实现某时段的延迟
至于限速,目前则是无能为力了。
由于一些原因,不能直接从外网访问到该路由(并非是没有 IPv6),故,通过挂在其下的 OpenWrt 来实现
功能 我用于执行 ifconfig 命令,可以指定延迟和随机延迟,以及执行次数
一个 Python 脚本来生成一个计划任务列表,追加到 crontab 中
没有自己的服务器,我们要怎么把 IP 传递到外网呢?
可以通过 git 来实现,git 有一个功能,就是可以通过 git push 命令,把本地的文件推送到远程仓库
在 openwrt 上,安装 git、openssh-keygen、openssh-client、python3
搭配默认的 crontab 计划任务,每隔一段时间执行一次脚本,把 IP 写入到一个文件中,然后通过 git 推送到远程仓库
那么就可以实现通过 git 来获取 IP 了
在 openwrt 上执行以下命令
1 2 3 4 5 6 7 8 cat /proc/net/arp iwinfo phy1-ap0 info iwinfo phy1-ap0 assoclist iw dev phy1-ap0 station dump cat /tmp/dhcp.leases cat /tmp/hosts/odhcpd ifconfig ip addr
结合以上命令,可以得到当前连接到路由器的设备的 IP 地址
一个 Python 脚本来检测 /tmp/python-script/ 目录下的所有 .log 文件的大小,当大小达到 1MB 时,删除前半段内容
同理,可以通过 git 来读取配置文件,然后执行相应的操作
使用方法 将脚本文件解压到 openwrt 的 /usr/bin/ 目录下
然后在 openwrt 上执行以下命令
1 chmod +x /usr/bin/pyscript.py
然后编辑 cron 计划任务
添加以下内容
1 2 # 每天 0 点执行一次 0 0 * * * /usr/bin/python3 /usr/bin/pyscript.py
我将一些路径设定在了 /tmp/python-script/ 目录下,你可以根据自己的需要修改这个路径重启后会清空,可以改到 /root/ 目录下,这个目录是可以持久化的