shell脚本入门与Netkeeper破解路由

Author Avatar
ciaoly 2017年06月10日
  • 在其它设备中阅读本文章

其实写这篇博客本来是想记录一些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

  • 配置pppoe-server以抓取拨号账号 因为我个人对正则表达式的使用不算熟练(没错, 我都是手动修改的这些文件), 这里使用了github上huipengly代码
#开启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