【好玩的网络】从零开始搭建家庭网络环境——突破千兆XGPON/10G EPON协议(ZXHN F4607PF/ZXHN 7607P篇)

一、ZXHN F4607PF/ZXHN 7607P光猫

ZXHN F4607PF/ZXHN 7607P光猫是中兴推出的全光智能网关,其原有FTTH基础上,采用Wi-Fi 6全光产品替换原有网关及路由器等设备,搭配光纤取代传统的网络传输介质,为用户带来全覆盖、高网速、无缝切换的极致生活体验。 真千兆网络体验:光纤传输损耗少,完美解决传统网线组网的损耗问题,搭配Wi-Fi 6高性能组网设备,实际测速超千兆。 全区域无缝漫游:支持全光网关与光路由器EasyMesh组网,实现全屋1张网和毫秒级智能漫游,构建无处不在、极速智能的家庭网络。(官网介绍)其最大的优点是含有一个原生2.5G的LAN电口,从而可以解决千兆LAN因物理限制而千兆宽带只能跑到950Mbps速度的问题。在众位大神的共同努力下先后研究出来了XGPON模式改成10G EPON模式、移动版刷联通版、移动版刷电信版、联通版刷电信版等骚操作,并将这些操作整理集合成教程共享了出来,在此表示特别的感谢。本着共享的目的,本文章特意整理了相关的教程,使其更加完整和完善。

关于ZXHN F4607PF/ZXHN 7607P的拆解和测评,acwifi站长发布已经详细拆机和测试文章,我就在此不献丑了。有兴趣的可以移步:2.5G LAN口光猫中兴F7607P拆机

重要提示:刷机有风险,刷前需谨慎!!!

二、移动版固件、联通版固件、电信版固件区别

  • 由于硬件相同,软件功能基本差别不大。
  • 电信版固件在网页后台可以自由切换XGPON和XEPON模式。联通版和移动版则需要通过Telnet进行修改。

三、Telnet的开启和永久固定

zte_factroymode.py是实力网友@douniwan逆向固件后的开源python工具。十分感谢!
TelnetONU FactoryMode是网友@mayi5147zte_factroymode为核心编译而成本地离线工具。十分感谢!
从而使Telnet的开启和永久固定变得异常简单,再次感谢大佬们努力!

由于软件需要相应的运行库,如果没有运行库请先安装运行库,运行库安装包以放置文末。

TelnetONU FactoryMode软件介绍:

  • 1、增加了内置账号及密码,支持比如云南移动这种特殊账号密码。
  • 2、支持默认超密情况下自定义IP地址及端口的输入。
  • 3、支持全手工输入自定义信息进行获取。
  • 4、整合Telnet调试终端,支持自定义IP地址及端口登录。
  • 5、配合Frp或者公网IP支持远程连接。
  • 6、内置永久开启Telnet命令,连接并成功登录后自行输入所有命令并保存。

Telnet的开启

第一步:确保光猫通电后可以正常登录,并且超级密码为默认值,如果非默认值可尝试通过复位孔对光猫进行复位后在进行开启。

第二步:启动软件后,选择对应的对应的固件版本。

第三步:按需选择执行地址(192.168.1.1)获取自定义执行,依次输入光猫的IP地址及端口号(如果远程连接输入公网IP地址以及转发出去的光猫http端口号,注:移动和联通为80端口,电信为8080端口)。

第四步:程序自动运行完成连接和临时账号密码的获取。(临时账户为user=和&之间的8个字符,临时密码为pass=和\x00之间的8个字符)5分钟之内有效。
如:b'FactoryModeAuth.gch?user=e7cvt74z&pass=0hrRIVv0\x00',则其中临时账户为e7cvt74z,临时密码为0hrRIVv0

第五步:此时可以选择使用内置的telnet终端登录也可以使用其它的,如果失败则可以返回重新获取。

Telnet的永久固定

选择使用内置的终端进行登录,则正确输入后内置终端会启动并自动登录并开始执行永开telnet命令,等待结束即可。此时,Telnet登录账号:root Telnet登录密码:Zte521

如果选择其他的终端登陆Telnet,这里以Xshell 7为例,第四步获取的账号密码登录,并依次输入下列命令(一条一条输入避免出错):修改代码中的Zte521可以修改密码,但要俩个要修改为相同内容。

sendcmd 1 DB p TelnetCfg
sendcmd 1 DB set TelnetCfg 0 Lan_Enable 1
sendcmd 1 DB set TelnetCfg 0 TS_UName root
sendcmd 1 DB set TelnetCfg 0 TSLan_UName root
sendcmd 1 DB set TelnetCfg 0 TS_UPwd Zte521
sendcmd 1 DB set TelnetCfg 0 TSLan_UPwd Zte521
sendcmd 1 DB set TelnetCfg 0 Max_Con_Num 99
sendcmd 1 DB set TelnetCfg 0 ExitTime 999999
sendcmd 1 DB set TelnetCfg 0 InitSecLvl 3
sendcmd 1 DB set TelnetCfg 0 CloseServerTime 9999999
sendcmd 1 DB set TelnetCfg 0 Lan_EnableAfterOlt 1
sendcmd 1 DB save

killall telnetd

完成后,Telnet登录账号:root Telnet登录密码:Zte521(如果进行修改则为修改过的)

到此,已完成了Telnet的开启和永久固定!

四、版本的互换

备份原机闪存

折腾任何机器的第一步永远是备份,对于F7607P来说犹如此。从目前已知的信息看,此机器CPU为ZX279132s,属于高安芯片,带secure boot,闪存内的uboot被加密和签名过,且其中绑定了CPU id或NAND id,具体哪个还未知,已知的就是自己的uboot只能在自己的机器上用,别人的uboot分区备份在自己的机器上启动不了,所以一定要备份好自己的uboot分区,万一挂了又没有备份的话就会彻底变砖,编程器也救不了。

插入NTFS或FAT32格式的U盘,Telnet登陆后可以使用如下命令备份完整闪存,
移动固件:
dd if=/dev/mtd0 of=/mnt/usb1_1/f7607p_dd.bin
cat /dev/mtd0 > /mnt/usb1_1/f7607p_cat.bin
nand kread /dev/mtd0 0x0 0x10000000 /mnt/usb1_1/f7607p_nand.bin

联通固件:
cat /dev/mtd0 > /mnt/USB1_disc1/f7607p_cat.bin
nand kread /dev/mtd0 0x0 0x10000000 /mnt/USB1_disc1/f7607p_nand.bin

电信固件:
cat /dev/mtd0 > /mnt/USB_disc1/f7607p_cat.bin

nand kread /dev/mtd0 0x0 0x10000000 /mnt/USB_disc1/f7607p_nand.bin

保险起见可以几种方式都备份2次。

固件分区介绍

联通版固件的分区结构:

/# cat /proc/mtd
dev:    size  erasesize name
mtd0: 10000000 00020000 "whole flash"
mtd1: 00200000 00020000 "u-boot"
mtd2: 00200000 00020000 "others"
mtd3: 00200000 00020000 "parameter tags"
mtd4: 00200000 00020000 "wlan"
mtd5: 00800000 00020000 "usercfg"
mtd6: 00600000 00020000 "preplugin"
mtd7: 02800000 00020000 "kernel1"
mtd8: 02800000 00020000 "kernel2"
mtd9: 01000000 00020000 "framework"
mtd10: 01000000 00020000 "framework1"
mtd11: 07900000 00020000 "plugin_data"
mtd12: 024c0000 00020000 "rootfs"

电信版固件的分区结构:

/ # cat /proc/mtd
dev: size erasesize name
mtd0: 10000000 00020000 "whole flash"
mtd1: 00200000 00020000 "u-boot"
mtd2: 00200000 00020000 "others"
mtd3: 00200000 00020000 "parameter tags"
mtd4: 00200000 00020000 "wlan"
mtd5: 00800000 00020000 "usercfg"
mtd6: 01000000 00020000 "framework"
mtd7: 01000000 00020000 "framework1"
mtd8: 00600000 00020000 "dbus"
mtd9: 02800000 00020000 "kernel1"
mtd10: 02800000 00020000 "kernel2"
mtd11: 07900000 00020000 "plugin_data"
mtd12: 024c0000 00020000 "rootfs"

其中kernel1和kernel2完全一样,uboot启动时会读取mtd2中的BootImageNum值,其为0的话就从kernel1启动,1的话从kernel2启动,如果被选择的分区无法通过crc和rsa等校验,则会从另一个kernel分区启动。rootfs分区是kernel分区内的一部分。framework和framework1是插件分区,也完全相同,互为备份。移动版固件要改为联通版,只用核心功能的话,只需要替换mtd7和mtd8就行,要完整替换的话还需要替换mtd9和mtd10插件分区,mtd12由于被包含在mtd7或mtd8之内,所以不需要再单独额外替换,和移动与联通版不同,电信版的kernel分区改为了mtd9和mtd10,但实际在闪存中的地址不变,还是0x1600000-0x3e00000和0x3e00000-0x6600000,大小也还是0x2800000,rootfs的结构也一样,所以可以继续使用上面的方法替换,只需稍加改动。

刷联通版固件

第一步,检验联通版固件,对比下hash值以防分区数据出错,kernel分区差一个字节也无法启动。

第二步,将kernel.bin、framework.bin两个文件放入NTFS或FAT32格式的U盘根目录(注意:最好将U盘进行格式化,避免刷机出现问题),插入光猫USB接口,进入Telnet,运行fw_flashing,会报错并给出当前启动的内核分区,如:baseaddr:1600000, curpdev=/dev/mtd7, offset=0其中mtd7为当前启动的内核分区:
当启动分区为mtd7时,执行命令upgradetest switchver 1
当启动分区为mtd8时,执行命令upgradetest switchver 0
作用是下一次启动时切换到另一个分区,把固件写入另一个当前没有被使用的分区,避免直接对正在运行中的Kernel分区做覆盖,很可能会写入失败并且产生大量坏块

第三步,严格按顺序执行以下命令,一次一行避免出错!【注意:U盘目录名移动版默认为usb1_1,联通版默认为USB1_disc1,电信版默认为USB_disc1。】
当启动分区为mtd7时,执行以下命令:

cd /mnt/usb1_1
echo 2 > /proc/zteinfo/factory/factorymode
touch /userconfig/nanddebug
nand kerase /dev/mtd8 0x0 0x2800000
nand kwrite /dev/mtd8 0x0 0x2800000 ./kernel.bin

当启动分区为mtd8时,执行以下命令:

cd /mnt/usb1_1
echo 2 > /proc/zteinfo/factory/factorymode
touch /userconfig/nanddebug
nand kerase /dev/mtd7 0x0 0x2800000
nand kwrite /dev/mtd7 0x0 0x2800000 ./kernel.bin

完成后执行reboot进行重启,重启完成后再次进入Telnet继续按顺序执行以下命令:
再次运行fw_flashing得到当前启动的内核分区:

当启动分区为mtd8时,执行以下命令:

cd /mnt/USB1_disc1
echo 2 > /proc/zteinfo/factory/factorymode
nand kerase /dev/mtd7 0x0 0x2800000
nand kwrite /dev/mtd7 0x0 0x2800000 ./kernel.bin
nand kerase /dev/mtd9 0x0 0x1000000
nand kwrite /dev/mtd9 0x0 0x1000000 ./framework.bin
nand kerase /dev/mtd10 0x0 0x1000000
nand kwrite /dev/mtd10 0x0 0x1000000 ./framework.bin
nand kerase /dev/mtd11 0x0 0x7900000
nand kerase /dev/mtd6 0x0 0x600000
rm  /userconfig/nanddebug

当启动分区为mtd7时,执行以下命令:

cd /mnt/USB1_disc1
echo 2 > /proc/zteinfo/factory/factorymode
nand kerase /dev/mtd8 0x0 0x2800000
nand kwrite /dev/mtd8 0x0 0x2800000 ./kernel.bin
nand kerase /dev/mtd9 0x0 0x1000000
nand kwrite /dev/mtd9 0x0 0x1000000 ./framework.bin
nand kerase /dev/mtd10 0x0 0x1000000
nand kwrite /dev/mtd10 0x0 0x1000000 ./framework.bin
nand kerase /dev/mtd11 0x0 0x7900000
nand kerase /dev/mtd6 0x0 0x600000
rm /userconfig/nanddebug

第四步,修改区域信息,使用cat /etc/init.d/regioncode查看区域码对照表,找到想要的区域代码,例如内蒙古为331,然后用命令upgradetest sdefconf 331切换区域为内蒙古。

300:Jiangsu
301:Xinjiang
302:Hainan
303:Tianjin
304:Anhui
305:Shanghai
306:Chongqing
307:Beijing
308:Sichuan
309:Shandong
310:Guangdong
311:Hubei
312:Fujian
313:Suzhou
314:Zhejiang
315:Shanxi
316:Hunan
317:Yunnan
318:Xizang
319:Heilongjiang
320:Guizhou
321:Shanxi2
322:Hebei
323:Ningxia
324:Guangxi
325:Jiangxi
326:Gansu
327:Qinghai
328:Xian
329:Liaoning
330:Jilin
331:Neimeng
332:Henan

切换后猫会自动重启,加载内蒙古地区的默认配置,当然telnet又被关闭了,有需要可以再次重新开启。
另须注意:北京联通没有超级管理员账户,不建议将区域设置为北京

刷电信版固件

第一步,检验电信版固件,对比下hash值以防分区数据出错,kernel分区差一个字节也无法启动。

第二步,将kernel.bin、framework.bin两个文件放入NTFS或FAT32格式的U盘根目录(注意:最好将U盘进行格式化,避免刷机出现问题),插入光猫USB接口,进入Telnet,运行fw_flashing,会报错并给出当前启动的内核分区,如:baseaddr:1600000, curpdev=/dev/mtd7, offset=0其中mtd7为当前启动的内核分区:
当启动分区为mtd7时,执行命令upgradetest switchver 1
当启动分区为mtd8时,执行命令upgradetest switchver 0
作用是下一次启动时切换到另一个分区,把固件写入另一个当前没有被使用的分区,避免直接对正在运行中的Kernel分区做覆盖,很可能会写入失败并且产生大量坏块

第三步,严格按顺序执行以下命令,一次一行避免出错!
当启动分区为mtd7时,执行以下命令:

cd /mnt/usb1_1
echo 2 > /proc/zteinfo/factory/factorymode
touch /userconfig/nanddebug
nand kerase /dev/mtd8 0x0 0x2800000
nand kwrite /dev/mtd8 0x0 0x2800000 ./kernel.bin

当启动分区为mtd8时,执行以下命令:

cd /mnt/usb1_1
echo 2 > /proc/zteinfo/factory/factorymode
touch /userconfig/nanddebug
nand kerase /dev/mtd7 0x0 0x2800000
nand kwrite /dev/mtd7 0x0 0x2800000 ./kernel.bin

完成后执行reboot进行重启,重启完成后再次进入Telnet继续按顺序执行以下命令:
再次运行fw_flashing得到当前启动的内核分区:

当启动分区为mtd9时,执行以下命令:

cd /mnt/USB_disc1
echo 2 > /proc/zteinfo/factory/factorymode
nand kerase /dev/mtd10 0x0 0x2800000
nand kwrite /dev/mtd10 0x0 0x2800000 ./kernel_CT.bin
umount /opt/upt/apps/mnt1(移动版刷电信固件不用这一步)
umount /opt/upt/apps/mnt2(移动版刷电信固件不用这一步)
nand kerase /dev/mtd6 0x0 0x1000000
nand kwrite /dev/mtd6 0x0 0x1000000 ./framework_CT.bin
nand kerase /dev/mtd7 0x0 0x1000000
nand kwrite /dev/mtd7 0x0 0x1000000 ./framework_CT.bin
nand kerase /dev/mtd8 0x0 0x600000
nand kerase /dev/mtd11 0x0 0x7900000
rm  /userconfig/nanddebug

当启动分区为mtd10时,执行以下命令:

cd /mnt/USB_disc1
echo 2 > /proc/zteinfo/factory/factorymode
nand kerase /dev/mtd9 0x0 0x2800000
nand kwrite /dev/mtd9 0x0 0x2800000 ./kernel_CT.bin
umount /opt/upt/apps/mnt1(移动版刷电信固件不用这一步)
umount /opt/upt/apps/mnt2(移动版刷电信固件不用这一步)
nand kerase /dev/mtd6 0x0 0x1000000
nand kwrite /dev/mtd6 0x0 0x1000000 ./framework_CT.bin
nand kerase /dev/mtd7 0x0 0x1000000
nand kwrite /dev/mtd7 0x0 0x1000000 ./framework_CT.bin
nand kerase /dev/mtd8 0x0 0x600000
nand kerase /dev/mtd11 0x0 0x7900000
rm  /userconfig/nanddebug

第四步,修改区域信息,使用cat /etc/init.d/regioncode查看区域码对照表,找到想要的区域代码,例如内蒙古为231,然后用命令upgradetest sdefconf 231切换区域为内蒙古。

200:Jiangsu
201:Xinjiang
202:Hainan
203:Tianjin
204:Anhui
205:Shanghai
206:Chongqing
207:Beijing
208:Sichuan
209:Shandong
210:Guangdong
211:Hubei
212:Fujian
214:Zhejiang
215:Shanxi
216:Hunan
217:Yunnan
218:Xizang
219:Heilongjiang
220:Guizhou
221:Shanxi2
222:Hebei
223:Ningxia
224:Guangxi
225:Jiangxi
226:Gansu
227:Qinghai
229:Liaoning
230:Jilin
231:Neimeng
232:Henan
234:TelecomInstitute

切换后猫会自动重启,加载内蒙古地区的默认配置,当然telnet又被关闭了,有需要可以再次重新开启。
另须注意:

  • 电信版中兴系统的登陆入口不是80端口,而是8080。80端口为插件内的系统,直接访问8080端口会自动跳转到80端口登陆,所以电信版没有插件分区无法进入网页后台。
  • 电信版某些省份的默认配置限制较多,建议使用区域代码234电信研究院。

U-boot下写入固件

如果两个kernel分区都已经损坏无法启动的话,只能接TTL在uboot下写入分区备份。(左上角四个空孔从左到右1、 2、TXD 3、RXD 4、GND)

安装OpenTFTPtftpd64等tftp服务端软件,将分区备份放入tftp的工作目录内,给光猫通电,然后迅速按任意键中断启动,进入U-boot控制台:

设置本机和TFTP服务器IP:

setenv ipaddr 192.168.2.2
setenv serverip 192.168.2.3
saveenv

然后开始下载分区备份到内存并写入到NAND中对应的位置,三家运营商的版本kernel分区的位置大小一样,写入命令一样,但移动版的osgi分区与联通电信版的framework分区位置和大小不同,注意!!!

移动/联通/电信版写入kernel分区:

tftp 0x88000000 kernel.bin
nand erase 0x1600000 0x2800000
nand erase 0x3e00000 0x2800000
nand write 0x88000000 0x1600000 0x2800000
nand write 0x88000000 0x3e00000 0x2800000

移动版写入osgi分区:

tftp 0x88000000 osgi.bin
nand erase 0x6600000 0x3200000
nand erase 0x9800000 0x3200000
nand write 0x88000000 0x6600000 0x3200000
nand write 0x88000000 0x9800000 0x3200000

联通/电信版写入framework分区:

tftp 0x88000000 framework.bin
nand erase 0x6600000 0x1000000
nand erase 0x7600000 0x1000000
nand write 0x88000000 0x6600000 0x1000000
nand write 0x88000000 0x7600000 0x1000000

reset重启

附加设置(以下修改均在Telnet中进行)

ITMS注册

电信固件和联通固件部分省份没注册ITMS服务器的话会劫持所有DNS请求的结果到192.168.1.1,使用如下命令手动欺骗ITMS注册结果:

sendcmd 1 DB set PDTCTUSERINFO 0 Status 0
sendcmd 1 DB set PDTCTUSERINFO 0 Result 1
sendcmd 1 DB save

修改超级密码

  • 修改超级帐号:sendcmd 1 DB set DevAuthInfo 0 User XXXXXX
  • 修改超级密码:sendcmd 1 DB set DevAuthInfo 0 Pass XXXXXX

修改用户限制

sendcmd 1 DB p CltLmt
sendcmd 1 DB set CltLmt 8 Max 20   (修改最大用户数为20,可以改成其他数目,最大数目不超过255)
sendcmd 1 DB set CltLmt 8 Enable 0
sendcmd 1 DB save

修改MAC、SN等

查看当前信息:setmac show2

修改格式:setmac 1 [ID] [内容] 绿色为对应条目的ID号,蓝色为修改内容。

如修改PONMAC命令为:setmac 1 32769 MAC地址

五、相关下载

  • Onedrive网盘:点击打开 密码:6666
  • 阿里云盘:点击打开 提取码:dw6h 等待分享功能

六、参考

七、相关系列

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇