tm5880891 发表于 2021-8-28 22:57:38

改造光猫实现神龙召唤术

本帖最后由 tm5880891 于 2021-8-28 23:19 编辑

光猫是中国移动PT939G的型号,全千兆网口,MTK的处理器,512M ddr,5G+2.4G双频,双USB口。由于现行宽带都是子网IP,没有公网地址,有时候上班想连回家里取点资料非常不便,要么用teamviewer开无人值守,7*24小时开机待命,无奈teamviewer这玩意三天两头提示检测到商用要断开连接,非常恼火。进入telnet之后,便想着将自家光猫使用frp透传到个人的云服务器上。拆开光猫看了眼芯片,是MTK套片MT7525,属于mips架构。上github找到frp最新版,下载了mips架构,用tftp上传上去,运行了一下,确实跑起来了,但是一关闭telnet终端,程序就结束了。搞定后台运行仔细检索了一下telnet里的命令行,busybox是阉割过的,不支持nohup之类的命令。试图上传一个screen上去做会话隔离,找了openwrt,又找了screen的源码,各种编译环境搭建之后,编译完放上去,竟然提示各种终端不支持,为了移植screen废了不少事,移植完发现还是用不了,telnet和ssh的终端思路不一样,不是用的xtearm,后来又尝试了xtmux,也是用不了,同样依赖xtearm之类的组件,最终放弃,寻找其他路径。又查了查资料,尝试了一下disown命令,发现也是不支持,光猫上没有disown命令。最终结论:光猫里的busybox是阉割过的,没有nohup。不支持screen,我移植一个进去启动提示缺文件。remote_ctl确实可以作为入口,但是那个原本的rcS脚本写的有问题,这个程序会执行,但会随着脚本执行完而结束。可以删掉。通过三晚的资料查询,找到了一个trap指令,使用trap "" HUP 指令完成了后台运行。光猫frpc完美工作,java虚拟机正常运行,为了提升性能我还在脚本里杀掉了两个没啥用的进程,一个是bandwidth,一个是wangspeed_info。这俩进程从名字看应该是测网速的,占用资源还挺高,关掉后也不影响上网拨号。周末拆开加上散热片,完美!搞定开机自启在研究后台运行的过程中,有了一些自启思路,就是通过/etc/init.d/里加入自启脚本。无奈光猫中的该目录是只读的,只有/usr/osgi挂载点可写,要想写入只能改固件。改固件首先得备份固件,剩下的就是怎么解压、打包、刷新了。dd if=/dev/mtd6 of=/tmp/mnt/usb1_1/PT939G/6.bin使用Firmware-mod-kit检测,使用的lzma算法压缩。Firmware-mod-kit里的squashfs版本太旧,无法解压出来,从github上找到最新的squashfs4.4安装gcc自行编译,输入命令unsquashfs -s ../../yaffs2utils/img/mtd6.bin sudo unsquashfs -d /home/xyuu/yaffs2utils/img/rootfs -f /home/xyuu/yaffs2utils/img/mtdblock6.bin sudo mksquashfs /home/xyuu/yaffs2utils/img/rootfs/ /home/xyuu/yaffs2utils/img/mtd6.bin -comp lzma避归风险保守落地虽然固件修改完生成了,我也有ttl线刷工具和编程器,我也深知光猫中有备份系统,即使其中一个固件损坏也不会变砖。但是决定步子不要迈的太大,毕竟光猫这种东西,坏了家里就断网了,而我仅仅只是为了自启一个程序罢了。于是我决定暂时先不刷固件,从原本的rcS脚本入手,我先备份原始文件/usr/osgi/remote_ctl/remote_ctl_client,然后写一个remote_ctl_client同名的sh脚本,在脚本中用echo >输出一个文件日志,如果重启后我能看到这个日志,则证明这个脚本会在启动时自动运行。重启后事实证明了这一点推测是对的。我又从运行光猫中原有的remote_ctl_client程序后看到日志输出连接服务器失败,这个程序对我是没用的。于是我这个remote_ctl_client可以作为自启的入口,后来事实证明了这一点,我成功实现了frpc自启的执行。为了自启后杀掉不必要的进程,杀进程脚本:ps aux |grep wanspeed_info |grep -v grep |awk '{print $2}' |xargs kill -9但提示没有xargs这个命令,于是又琢磨了一个不使用xargs杀进程的方法。kill `ps -aux | grep wanspeed_info | grep -v grep | awk '{print $1}'`使用wake on lan远程开机通过对光猫的研究,我知道了MTK方案是使用的BOA实现的cgi,要实现wake on lan可以通过在cgi中执行shell脚本来做到。又回到上述问题,BOA目录在/boaroot下,同样是一个只读目录,要改就得刷固件,而我不想冒这个险。思索之后,我忽然想到frp是开源的,我何不在frpc上加入wakeon lan的实现,然后实现远程唤醒呢?三下五除二撸了十来行代码,配上3389内网透传,实现了。召唤神龙实现功能:#!/bin/sh
sleep 120kill `ps -aux | grep bandwidth | grep -v grep | awk '{print $1}'`
while [ 1 ]do/usr/osgi/frp/frpc -c /usr/osgi/frp/frpc.inidone1.   使用shell脚本实现,frpc进程守护,当frpc遇到问题宕机时,shell脚本会自动拉起frpc进程。2.   使用移动“和家亲”APP可以随时重启光猫,光猫启动时会自动启动frpc脚本,并杀掉两个占用资源高的测网速进程。3.   平时我的电脑通着电源,插着网线,但未开机。当我需要用她时,我可以访问通过frp内网透传出来的光猫上的frp client的管理页面,输入用户名密码后,进入wake on lan页面,单击“wake on lan”。电脑开机启动,我可以通过家庭视频监控看到我的电脑硬盘灯亮起,一分钟后,我可以使用手机远程桌面连上我的电脑。不用开机棒,不用企业宽带,作为垃圾佬的我,使用最低成本极其完美的实现了召唤神龙,这感觉,简直不要太酷!!

qq519948746 发表于 2021-8-28 23:18:17

刚看完首发作者的原帖 知乎上写的挺好 适合新手
https://www.zhihu.com/column/xyuustudio

tm5880891 发表于 2021-8-29 09:53:36

qq519948746 发表于 2021-8-28 23:18
刚看完首发作者的原帖 知乎上写的挺好 适合新手
https://www.zhihu.com/column/xyuustudio ...

{:7_200:}那有,宽带技术网没有嘛?反正这基本靠抄袭是不。允许别人抄就不允许我抄。我是懒得写,就这个技术????

举头望明月 发表于 2021-8-29 11:38:38

哇哦。先模仿,再创新。

tm5880891 发表于 2021-8-29 17:09:55

本帖最后由 tm5880891 于 2021-8-29 17:11 编辑

举头望明月 发表于 2021-8-29 11:38
哇哦。先模仿,再创新。

就这个技术我觉得好就搬搬了,免得整天没事华为华为华为华为,华为啊华为,华为啊华为,毫无营养成份了,玩烂了的东西,论坛就没别的能发了,就是华为了,说一亿次不过那点东西,,,,我自己的东西我当然不随便写出来

tm5880891 发表于 2021-8-29 17:13:36

举头望明月 发表于 2021-8-29 11:38
哇哦。先模仿,再创新。
华为有什么好写的啊,华为还有技术吗???就这种事用得着一直写????????

hongsxxxxxxxx 发表于 2021-8-29 19:07:30

1. 编译静态 busybox。用 buildroot 工具链。
2. 修改固件,再刷回去,风险太大。

jcape 发表于 2021-8-30 09:44:41

老版主这个转载的好。

172551234 发表于 2021-8-30 16:49:56

既然是转载也要说明一下尊重作者

tm5880891 发表于 2021-8-30 17:10:20

172551234 发表于 2021-8-30 16:49
既然是转载也要说明一下尊重作者

我看到了,就是我的,他有意见他自己来,,
页: [1] 2
查看完整版本: 改造光猫实现神龙召唤术