文章更新
20160412-文章第一次发布 20160509-修改一些小错误
这个东西能干什么?
这个脚本是用来吧北京联通光纤宽带20m或者50m宽带变成100m用的。不过使用的门槛还是有一点的,普通的家用路由器是不行的,需要OpenWRT路由器才可以,并且需要有一定的动手能力。
脚本来源
这个是参考了某运维大神的脚本(运维大神见文章末尾链接),我在自己的路由器上,发现经常会卡在开始的地方,经过了一个多月的郁闷,终于发现是采用cat /dev/urandom的时候,会卡住。所以采用了新的方式来生成随机的MAC和字符串,详细可以看脚本的相关语句。
那么如何使用呢
- 使用ssh登入你的OpenWRT路由器
- 将这个wk.sh放在/root目录下
- 给脚本添加可执行权限
#chmod +x /root/wk.sh - crontab -e,在任务里添加一句
0,7,13,19,26,30,34,37,47,57 * * * * source /root/wk.sh - 重启crontab
#/etc/init.d/crontab restart - (可选)脚本里很多地方都有
>> /tmp/out2.txt,这是我为了方便查看脚本运行状态自己写的一个输出文件,要不要影响不大。如果需要,就再创建个out2.txt就可以了#touch /tmp/out2.txt。
实现原理
北京联通宽带每个月给一般用户10个小时提速到100m的体验时常,如果用WireShark分析一下数据,就能知道,其实就是利用本机向北京联通的某ip地址提交一次提速申请,抓包分析一下,其中包括的参数主要有几个,分别是本机的mac地址、ip地址、加速round数、还有一些其他的参数,具体详见脚本,下载地址在文章末尾。
但是10个小时实在是不太够,所以利用本机模拟提交并且循环起来,就可以实现提速了,mac地址和ip地址可以自己随便写,每次都不一样就可以了。
再次声明,本研究的初衷并不是逃避缴费,而是出于学习和交流的目的!
按照这样分析,用户如果直接浏览器里,输入模拟构造出来的参数,应该也可以实现?我没有试验,如果哪位用户试验了,希望留言给我。
脚本
#!/bin/sh
set -x
refr() {
while :
do
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} refr!" >> /tmp/out2.txt
acc=100000000000
mac=$(dd bs=1 count=6 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "%02X-"' | head -c17)
reqsn=00TF$(date '+%Y%m%d%H%M')009262
comp=BFEBFBFF$(dd bs=1 count=9 if=/dev/random 2>/dev/null |hexdump -v -e '/1 "%1X"')
inf=$(/usr/bin/wget -t3 --timeout=30 -O - "http://bj.wokuan.cn/web/startenrequest.php?ComputerMac=${mac}&ADSLTxt=${acc}&Type=3&reqsn=${reqsn}&oem=00&ComputerId=${comp}" 2>>/dev/null | grep 'id="webcode"')
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} ${inf}" >> /tmp/out2.txt
if [ -n "$inf" ]
then
_acc=$(echo -n "$inf" | sed 's#.*&cn=\([^&]\+\)&.*#\1#g')
_rnd=$(echo -n "$inf" | sed 's#.*&random=\([^&<]\+\)[&<].*#\1#g')
_gus=$(echo -n "$inf" | sed 's#.*&gus=\([^&]\+\)&.*#\1#g')
_old=$(echo -n "$inf" | sed 's#.*&old=\([^&]\+\)&.*#\1#g')
_stu=$(echo -n "$inf" | sed 's#.*&stu=\([^&]\+\)&.*#\1#g')
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} good, got status" >> /tmp/out2.txt
break
fi
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} not get status! Again!" >> /tmp/out2.txt
sleep 10
done
}
prt() {
echo "prt" >> /tmp/out2.txt
echo "_acc: $_acc"
echo "_rnd: $_rnd"
echo "_gus: $_gus"
echo "_old: $_old"
echo "_stu: $_stu"
}
stop() {
echo "stop" >> /tmp/out2.txt
wget -O - "http://bj.wokuan.cn/web/lowerspeed.php?ContractNo=${_acc}&round=${_rnd}" > /dev/null 2>&1
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} speed is 20m now!" >> /tmp/out2.txt
}
boo() {
echo "boo" >> /tmp/out2.txt
wget -O - "http://bj.wokuan.cn/web/improvespeed.php?ContractNo=${_acc}&up=${_gus}&old=${_old}&round=${_rnd}" > /dev/null 2>&1
}
refr
prt
if [ "$_stu" = 0 ]
then
break
elif [ "$_stu" = 1 ]
then
echo "100m now, good but we need to slow to 20m and then boo!" >> /tmp/out2.txt
stop
break
else
break
fi
refr
prt
while :
do
if [ "$_stu" = 1 ]
then
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} speed is 100m! all good!" >> /tmp/out2.txt
echo "${cdt} Game End!" >> /tmp/out2.txt
break
elif [ "$_stu" = 0 ]
then
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} is still 20m, try again!" >> /tmp/out2.txt
refr
prt
boo
refr
prt
sleep 18
else
cdt=`date "+%Y-%m-%d %H:%M:%S"`
echo "${cdt} not sure how fast is now. Acquiring..." >> /tmp/out2.txt
refr
prt
sleep 19
fi
done
脚本下载
最新消息
北京联通联合优酷土豆最近开展了30元即可得到优酷土豆路由器的活动,我自己也申请了一个,还能免费从20M宽带免费升级到40M,小伙伴们可以去试试哦,感觉还不错。