找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12364|回复: 13

改造光猫实现神龙召唤术

[复制链接]
发表于 2021-8-28 22:57:38 | 显示全部楼层 |阅读模式
本帖最后由 tm5880891 于 2021-8-28 23:19 编辑
0 Y! @! R* {5 M9 u1 u" V9 P% Q% `$ ~' V
光猫是中国移动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
3 O) |/ a* |7 A- }
sleep 120
kill `ps -aux | grep bandwidth | grep -v grep | awk '{print $1}'`
: D# b5 g+ F3 G: Y& c# }" _( K+ a
while [ 1 ]
do
/usr/osgi/frp/frpc -c /usr/osgi/frp/frpc.ini
done
1.   使用shell脚本实现,frpc进程守护,当frpc遇到问题宕机时,shell脚本会自动拉起frpc进程。
2.   使用移动“和家亲”APP可以随时重启光猫,光猫启动时会自动启动frpc脚本,并杀掉两个占用资源高的测网速进程。
3.   平时我的电脑通着电源,插着网线,但未开机。当我需要用她时,我可以访问通过frp内网透传出来的光猫上的frp client的管理页面,输入用户名密码后,进入wake on lan页面,单击“wake on lan”。电脑开机启动,我可以通过家庭视频监控看到我的电脑硬盘灯亮起,一分钟后,我可以使用手机远程桌面连上我的电脑。
不用开机棒,不用企业宽带,作为垃圾佬的我,使用最低成本极其完美的实现了召唤神龙,这感觉,简直不要太酷!!

9 t1 S% Y5 T( T/ e" c- x. B0 C  G& f
发表于 2021-8-28 23:18:17 | 显示全部楼层
刚看完首发作者的原帖 知乎上写的挺好 适合新手
7 Y& P5 ~; v; ~& W, P0 [3 Whttps://www.zhihu.com/column/xyuustudio
 楼主| 发表于 2021-8-29 09:53:36 | 显示全部楼层
qq519948746 发表于 2021-8-28 23:18
/ O: K3 ^# r0 ?/ X4 w刚看完首发作者的原帖 知乎上写的挺好 适合新手2 U; ?3 z5 L' U: E3 R. |
https://www.zhihu.com/column/xyuustudio ...

. F6 V$ o; c) G1 o9 C{:7_200:}那有,宽带技术网没有嘛?反正这基本靠抄袭是不。允许别人抄就不允许我抄。我是懒得写,就这个技术????
发表于 2021-8-29 11:38:38 | 显示全部楼层
哇哦。先模仿,再创新。
 楼主| 发表于 2021-8-29 17:09:55 | 显示全部楼层
本帖最后由 tm5880891 于 2021-8-29 17:11 编辑 8 i+ R' U$ j2 U( p
举头望明月 发表于 2021-8-29 11:38( ?5 J0 J( F" w6 T
哇哦。先模仿,再创新。

# P6 f/ T  s, V( e8 t
# [) @# L' c" {! i* o7 S就这个技术我觉得好就搬搬了,免得整天没事华为华为华为华为,华为啊华为,华为啊华为,毫无营养成份了,玩烂了的东西,论坛就没别的能发了,就是华为了,说一亿次不过那点东西,,,,我自己的东西我当然不随便写出来
 楼主| 发表于 2021-8-29 17:13:36 | 显示全部楼层
举头望明月 发表于 2021-8-29 11:381 Q  W: n4 u7 p4 x5 U! g' f  L
哇哦。先模仿,再创新。
, [9 t9 e2 O; n4 D5 z+ {
华为有什么好写的啊,华为还有技术吗???就这种事用得着一直写????????
发表于 2021-8-29 19:07:30 | 显示全部楼层
1. 编译静态 busybox。用 buildroot 工具链。; w5 h5 g  w# V' u
2. 修改固件,再刷回去,风险太大。" b7 V% U9 O' F# z3 I7 ^- H* _; V
发表于 2021-8-30 09:44:41 | 显示全部楼层
老版主这个转载的好。
发表于 2021-8-30 16:49:56 | 显示全部楼层
既然是转载也要说明一下尊重作者
 楼主| 发表于 2021-8-30 17:10:20 | 显示全部楼层
172551234 发表于 2021-8-30 16:49
# J! G1 y. o$ b1 f) ?既然是转载也要说明一下尊重作者

# ?7 ~4 D. o0 L3 Y7 Y, S我看到了,就是我的,他有意见他自己来,,
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|宽带技术网 |网站地图 粤公网安备44152102000001号

GMT+8, 2025-5-3 22:49 , Processed in 0.027332 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表