原文:https://hi.imzlh.top/2024/07/18.cgi (预发布)
很久没有写完全折腾类文章了,这还得追溯到上次折腾S905L3A那会。 这篇文章很长,但是是小白级包学会。
关于为什么我会想到折腾光猫,见 https://hi.imzlh.top/2024/03/02.cgi 这篇文章本来应该在4个月前就完成了,但是我一直都在折腾NAS软件 其中我也尝试了很多方法,奈何时间不足断断续续的
至于为什么会这么折腾,完全是因为光猫限制比较大。详细的内容看原文即可,我们现在开始吧
这个材料很好找,一般的光猫都可以,但是有些光猫锁得很死,很考验大家的技术
为什么是telnet呢
这一步就需要大家熟练使用搜索引擎了。 型号很好找,直接打开 管理页面,去网上搜索就轻松找到
可以尝试一些工具,比如 针对ZTE机型的爆破工具 这里就不重点介绍了,感兴趣的自己研究
下载 putty,telnet连接到192.168.1.1 账号密码就是上一步爆破得来的,直接输入就行了
有的畜生光猫默认给的权限不是root,这个时候移动root密码一般都是 aDm8H%MdA,其他的我也不清楚请自行搜索 建议固定到Windows剪贴板( Win标 + V )上,下一次登录就很方便了
aDm8H%MdA
运营商有一个坑爹的东西叫做远程管理,能批量远程配置 一旦配置下发,你可能就又得再重新配置一次了(《从0开始的折腾之旅》) 因此为了杜绝后患,必须得把远程管理这个隐患干掉
我接触过两种光猫,有两种管理工具,除了名字不一样,命令是一样的 你可以试试看哪种命令适合你的光猫
sendcmd 1 DB set WANC 0 Enable 0sidbg 1 DB set WANC 0 Enable 0
sendcmd 1 DB set WANC 0 Enable 0
sidbg 1 DB set WANC 0 Enable 0
然后你也可以顺便改一下超级密码,这样下次Web端登录会更方便 (比如我家的光猫就是账号 root 密码 toor ,怎么样好记吗)
root
toor
sidbg 1 DB set DevAuthInfo 0 User [账号]sidbg 1 DB set DevAuthInfo 0 Pass [密码]
sidbg 1 DB set DevAuthInfo 0 User [账号]
sidbg 1 DB set DevAuthInfo 0 Pass [密码]
~ $ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1594.16 Features : half thumb fastmult edsp tls CPU implementer : 0x41 CPU architecture : 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1 processor : 1 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1594.16 Features : half thumb fastmult edsp tls CPU implementer : 0x41 CPU architecture : 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1 Hardware : ZTE ZX279128 (Device Tree) Revision : 0000 Serial : 0000000000000000
~ $ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1594.16 Features : half thumb fastmult edsp tls CPU implementer : 0x41 CPU architecture : 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1
processor : 1 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1594.16 Features : half thumb fastmult edsp tls CPU implementer : 0x41 CPU architecture : 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1
Hardware : ZTE ZX279128 (Device Tree) Revision : 0000 Serial : 0000000000000000
arm-eabi
arm-eabihf
ZX279128S是一款功能强大的SoC(System on Chip)芯片。芯片内嵌ARM Cortex A9双核处理器 以及丰富的外设,使用AXI高性能总线实现互联,CPU的频率达到1000MHz,可实现复杂协议报文的处理。
armv7,但是没有vfp,那就当作是armv5,或者说是armel,别搞错了 mips的可能稍微难搞一点,下文可能需要自己编译软件
这个很重要,划重点 根目录大多是有CRC校检的或者直接打包进内核的,bin这类文件夹大多放在根目录。所以想要重启后不消失或者不变砖,建议找/usr/data,空间也大 或者这里更建议扔到自启动脚本周围,如我的光猫就保存到/usr/local/osgi/,方便 下文默认所有文件都保存到/usr/local/osgi/,如果不是,你可能需要修改nginx配置并替换所有出现的/usr/local/osgi/
/usr/data
/usr/local/osgi/
想要ctrl作为软件管理程序?自行参考 我写的文章 [懒人版一键复制] 这里假设你的光猫有curl自带,如果没有,参考 https://hi.imzlh.top/2024/03/02.cgi
# aria2curl https://hi.imzlh.top/usr/uploads/2024/03/971539169.gz -k | gunzip - > aria2# nginxcurl https://hi.imzlh.top/usr/uploads/2024/07/1871251897.gz -k | gunzip - > nginx# natmapcurl https://hi.imzlh.top/usr/uploads/2024/07/1468987588.gz -k | gunzip - > natmap
# aria2
curl https://hi.imzlh.top/usr/uploads/2024/03/971539169.gz -k | gunzip - > aria2
# nginx
curl https://hi.imzlh.top/usr/uploads/2024/07/1871251897.gz -k | gunzip - > nginx
# natmap
curl https://hi.imzlh.top/usr/uploads/2024/07/1468987588.gz -k | gunzip - > natmap
首先,你需要安装vList5和一个fancyindex美化包,方法也非常简单 假设你的硬盘已经挂载到了/mnt,如果没有,请执行mount /dev/sda /mnt
/mnt
mount /dev/sda /mnt
curl -Lk https://github.com/imzlh/vlist-njs/releases/download/master/vlist5.js -o /usr/local/osgi/vlist.jscd /mntcurl https://github.com/imzlh/vList5/releases/download/main/vlist5_latest.tgz -Lk | tar xzmkdir .staticcd .staticcurl https://hi.imzlh.top/usr/uploads/2024/07/2093537519.gz -k | tar xz
curl -Lk https://github.com/imzlh/vlist-njs/releases/download/master/vlist5.js -o /usr/local/osgi/vlist.js
cd /mnt
curl https://github.com/imzlh/vList5/releases/download/main/vlist5_latest.tgz -Lk | tar xz
mkdir .static
cd .static
curl https://hi.imzlh.top/usr/uploads/2024/07/2093537519.gz -k | tar xz
关于nginx配置文件这里直接抄作业就行了,保存到 /usr/local/osgi/etc/nginx/nginx.conf 我可是研究了将近一天研究出来了这一份高性能高并发的nginx配置 (B:你似乎很骄傲啊,你知不知道,你这一句就相当于赤裸裸地在说 “快夸我,快给我三连”啊?) (别忘了新建文件夹,mkdir /usr/local/osgi/etc/nginx/)
/usr/local/osgi/etc/nginx/nginx.conf
mkdir /usr/local/osgi/etc/nginx/
worker_processes auto;events { accept_mutex on; multi_accept on; use epoll; worker_connections 1024;}http { include mime.types; default_type application/octet-stream; log_format main '$status $remote_addr $request'; access_log /tmp/nginx/access.log main; tcp_nopush off; tcp_nodelay on; client_max_body_size 256m; client_body_buffer_size 128m; client_header_timeout 1m; client_body_timeout 10m; send_timeout 10m; reset_timedout_connection on; client_body_in_file_only clean; client_body_in_single_buffer on; gzip on; gzip_min_length 1024; gzip_buffers 4 128k; gzip_types text/plain; gzip_vary on; output_buffers 2 128k; postpone_output 1460; sendfile on; sendfile_max_chunk 256k; directio 4m; keepalive_timeout 1h; open_file_cache max=1024 inactive=1m; open_file_cache_min_uses 4; server_tokens off; proxy_cache_path /tmp/nginx/cache/ levels=1:2 keys_zone=thumb:1M inactive=10h max_size=256M; proxy_http_version 1.1; ssl_session_cache shared:SSL:1m; dav_ext_lock_zone zone=dav:1m timeout=1h; js_shared_dict_zone zone=njs:1m type=string; resolver 114.114.114.114 223.5.5.5 8.8.8.8; http2_recv_buffer_size 128k; http2_chunk_size 128k; http3_stream_buffer_size 128k; server { listen 81; # listen [::]:8443 ssl; # listen [::]:444 quic; listen [::]:88; # http2 on; # http3 on; # ssl_certificate [证书cer/crt文件]; # ssl_certificate_key [证书key文件]; # ssl_protocols TLSv1.2 TLSv1.3; # ssl_buffer_size 32k; # ssl_early_data on; # ssl_session_timeout 10m; root /mnt/; index index.html; fancyindex on; fancyindex_localtime on; fancyindex_exact_size off; fancyindex_header /.static/header.html; fancyindex_footer /.static/footer.html; fancyindex_css_href /.static/core.css; fancyindex_default_sort name; fancyindex_show_path off; fancyindex_hide_parent_dir on; fancyindex_time_format "%y/%m/%d %H:%M"; charset_types *; charset utf-8; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; dav_access user:rw group:rw all:r; create_full_put_path on; dav_ext_lock zone=dav; # js_path lib/nginx/; js_import /usr/local/osgi/lib/nginx/vlist.js; js_import /usr/local/osgi/lib/nginx/ddns.js; js_fetch_buffer_size 128k; js_fetch_max_response_buffer_size 4m; js_fetch_timeout 30s; js_fetch_verify off; add_header Alt-Svc 'h3=":444"; h2=":8443"; ma=86400'; add_header Access-Control-Allow-Origin * always; add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; location = /@api/{ js_var $authkey "[请自己设一个密码]"; js_content vlist.main; } }}
worker_processes auto;
events {
accept_mutex on;
multi_accept on;
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$status $remote_addr $request';
access_log /tmp/nginx/access.log main;
tcp_nopush off;
tcp_nodelay on;
client_max_body_size 256m;
client_body_buffer_size 128m;
client_header_timeout 1m;
client_body_timeout 10m;
send_timeout 10m;
reset_timedout_connection on;
client_body_in_file_only clean;
client_body_in_single_buffer on;
gzip on;
gzip_min_length 1024;
gzip_buffers 4 128k;
gzip_types text/plain;
gzip_vary on;
output_buffers 2 128k;
postpone_output 1460;
sendfile on;
sendfile_max_chunk 256k;
directio 4m;
keepalive_timeout 1h;
open_file_cache max=1024 inactive=1m;
open_file_cache_min_uses 4;
server_tokens off;
proxy_cache_path /tmp/nginx/cache/ levels=1:2
keys_zone=thumb:1M inactive=10h max_size=256M;
proxy_http_version 1.1;
ssl_session_cache shared:SSL:1m;
dav_ext_lock_zone zone=dav:1m timeout=1h;
js_shared_dict_zone zone=njs:1m type=string;
resolver 114.114.114.114 223.5.5.5 8.8.8.8;
http2_recv_buffer_size 128k;
http2_chunk_size 128k;
http3_stream_buffer_size 128k;
server {
listen 81;
# listen [::]:8443 ssl;
# listen [::]:444 quic;
listen [::]:88;
# http2 on;
# http3 on;
# ssl_certificate [证书cer/crt文件];
# ssl_certificate_key [证书key文件];
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_buffer_size 32k;
# ssl_early_data on;
# ssl_session_timeout 10m;
root /mnt/;
index index.html;
fancyindex on;
fancyindex_localtime on;
fancyindex_exact_size off;
fancyindex_header /.static/header.html;
fancyindex_footer /.static/footer.html;
fancyindex_css_href /.static/core.css;
fancyindex_default_sort name;
fancyindex_show_path off;
fancyindex_hide_parent_dir on;
fancyindex_time_format "%y/%m/%d %H:%M";
charset_types *;
charset utf-8;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
dav_access user:rw group:rw all:r;
create_full_put_path on;
dav_ext_lock zone=dav;
# js_path lib/nginx/;
js_import /usr/local/osgi/lib/nginx/vlist.js;
js_import /usr/local/osgi/lib/nginx/ddns.js;
js_fetch_buffer_size 128k;
js_fetch_max_response_buffer_size 4m;
js_fetch_timeout 30s;
js_fetch_verify off;
add_header Alt-Svc 'h3=":444"; h2=":8443"; ma=86400';
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
location = /@api/{
js_var $authkey "[请自己设一个密码]";
js_content vlist.main;
PS 想要SSL? 打开注释掉的内容即可
在这么精简的系统内,如何处理 请求更新 呢? 那只有使用 curl 才行。如果没有请使用 wget也差不多(嘛,HTTPS就别想了)
参考readme.md,这是适用于natmap地自动更新脚本的参数列表
argv[0]: Script path argv1: Public address (IPv4/IPv6) argv2: Public port argv3: IP4P argv4: Bind port (private port) argv5: Protocol (TCP/UDP) argv6: Private address (IPv4/IPv6)
所以脚本也很好写(保存到/usr/local/osgi/update.sh,别忘了chmod +x update.sh):
/usr/local/osgi/update.sh
chmod +x update.sh
#!/bin/sh# 换成自己的动态重定向服务,如我的是redirect.phpcurl https://[你的服务地址]?addr=$1:$2 -k# wget也可以,但是不支httpswget http://[你的服务地址]?addr=$1:$2 -O - >> /dev/null
#!/bin/sh
# 换成自己的动态重定向服务,如我的是redirect.php
curl https://[你的服务地址]?addr=$1:$2 -k
# wget也可以,但是不支https
wget http://[你的服务地址]?addr=$1:$2 -O - >> /dev/null
对于所有系统,直接使用 cat > update.sh,输完了 Ctrl+D 即可 (如果系统很好心提供了vi,那就更方便了,比如我的H60G就很良心地提供了busybox vi)
cat > update.sh
Ctrl+D
vi
busybox vi
#!/bin/shcurl https://....?addr=$1:$2 -k ^D
curl https://....?addr=$1:$2 -k ^D
这样就OK了
除非你家的光猫 7x24 小时开机,不然难免会想要自启动 我最开始修改了etc文件夹里的文件,第一台变砖第二台直接还原。 最后很简单,直接暴力干掉插件系统就行了(java...如果你有需要建议留着)
参考了这篇文章,不仅干掉了java插件系统,大幅度优化之外还提供了自启动管理 但是还是不能照抄,因为我们的java挂载不是镜像,而是完整的磁盘分区
替换成以下内容就行了 (这里吐槽一下,垃圾光猫权限都不给足,还需要su升权,详情:https://hi.imzlh.top/2024/03/11.cgi)
#!/bin/shif [ ! -f /tmp/services.log ]then while true do curl -sk http://www.gstatic.com/generate_204 && break sleep 10 done echo aDm8H%MdA | su -c "/usr/local/osgi/rc.sh" -l root > /tmp/services.log &else echo "services already started"fiexit 1
if [ ! -f /tmp/services.log ]
then
while true
do
curl -sk http://www.gstatic.com/generate_204 && break
sleep 10
done
echo aDm8H%MdA | su -c "/usr/local/osgi/rc.sh" -l root > /tmp/services.log &
else
echo "services already started"
fi
exit 1
接下来是自启动脚本 /usr/local/osgi/rc.sh,这个脚本里是有root权限的 这里,我们需要启动nginx和natmap 注意 千万别忘记mkdir /tmp/nginx/,不然nginx会启动报错的
/usr/local/osgi/rc.sh
mkdir /tmp/nginx/
cd /usr/local/osgi/./natmap -4 -k 8 -s stunserver.stunprotocol.org -h baidu.com -t 192.168.1.2 -p 80 -d -e update.shmkdir /tmp/nginx/./nginx
cd /usr/local/osgi/
./natmap -4 -k 8 -s stunserver.stunprotocol.org -h baidu.com -t 192.168.1.2 -p 80 -d -e update.sh
./nginx
建议添加一行用来挂载USB磁盘
保存重启 OK!全文完。
原文链接:https://www.cnblogs.com/imzlh/p/18307425
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728