其实写这篇博客本来是想记录一些shell脚本的知识, 因为写这个脚本的初衷就是为了破解netkeeper, 所以就写写破解的事吧. NetKeeper这个无耻流氓令人深恶痛疾. 鉴于我不懂汇编, 一直以来都是等着各高手大佬破解出新版的NetKeeper的拨号算法后再苦苦找一个路由器能用的pppd_plugin来用. 偶然从GitHub上看到一个"破解"NetKeeper流氓的新思路, 我便动手自己弄了一个. 可谓"自己动手,丰衣足食"啊
思路简要
思路是 在openwrt上面搭一个pppoe server 当电脑端netkeeper拨号时候会向路由器发送用户名和密码的请求 这个时候路由器用拦截到的用户名密码去拨号就行了 这样无论netkeeper怎么变算法应该都能实现路由器拨号吧
这样子确实不错, 诚然不能应对心跳, 但是即使是使用plugin也得重写应对心跳的脚本, 其实都一样. 而且以后还不用担心算法升级了. 这个脚本已经由huipengly完成并已在GitHub开源, 所以可以直接点击这个链接到GitHub查看.
实操过程
1. 首先需要搭建openwrt上的pppoe-server环境.
- 使用
opkg
安装rp-pppoe-sever软件包
opkg install rp-pppoe-server
注意: 如果使用opkg不能安装的话, 修改软件源或者手动下载rp-pppoe-server.ipk文件进行安装.mt7620的潘多拉固件可用的pppoe-server.ipk
#开启log
sed -i "s/\/dev\/null/\/tmp\/pppoe.log/" /etc/ppp/options
#允许log记录密码
sed -i "s/#debug/debug/" /etc/ppp/options
echo "show-password" >> /etc/ppp/options
#处理 \r 字符
cp /lib/netifd/proto/ppp.sh /lib/netifd/proto/ppp.sh_bak
sed -i '/proto_run_command/i username=`echo -e "$username"`' /lib/netifd/proto/ppp.sh
2. 写抓号脚本
因为开启了日志选项, pppoe-server会将日志打印到指定的log文件里, 所以需要写一个脚本将用户名和密码从日志中取出, 并用此用户名与密码进行拨号.
在这里记录一个bash shell快速入门的链接, 以备查阅需要
使用grep
命令可以在文本或流中查找字符串, tail
命令能够过滤文本中指定数目的"尾行", cut命令则可以用来切割字符串. 另外, 对于shell中形形色色的括号, 这里有很好说明.
while :
do
#读取log最后一个账号
username=$(grep "Peer" /tmp/pppoe-server.log | tail -n 1 | cut -c 8-)
# echo "username is ${username}"
username=${username%% fail*}
#开始进行拨号
#在这里使用uci指定接口进行拨号即可
sleep 10
done
3. 制作rc脚本
为了使抓号脚本在开机后自动运行, 可以制作一个开机自启动脚本并放置于/etc/init.d/
目录下
脚本如下:
#!/bin/sh /etc/rc.common
#优先级:
START=99
STOP=15
start()
{
#后台运行&
sh /usr/share/nk4/nk4.sh &
}
stop()
{
pid=$(ps | grep "nk4.sh" | grep -v "grep" | cut -c 1-5 )
if [ ${pid} ]
then
kill $pid
fi
}
restart()
{
pid=$(ps | grep "nk4.sh" | grep -v "grep" | cut -c 1-5 )
if [ ${pid} ]
then
kill $pid
fi
sh /usr/share/nk4/nk4.sh &
}
完整的脚本在我的Github. 在shell脚本之外, 我还使用luci框架为这个拨号脚本写了个"gui界面", 不完美的地方是没有将这些文件打包成ipk, 所以需要手动复制文件到对应目录了.
我的脚本自行测试是可以用的, 我没有写配置脚本, 如果是想"开箱即用"的话, 还是这个好huipengly/Openwrt-NetKeeper