北京联通光纤宽带提速100m脚本

文章更新

20160412-文章第一次发布 20160509-修改一些小错误

这个东西能干什么?

这个脚本是用来吧北京联通光纤宽带20m或者50m宽带变成100m用的。不过使用的门槛还是有一点的,普通的家用路由器是不行的,需要OpenWRT路由器才可以,并且需要有一定的动手能力。

脚本来源

这个是参考了某运维大神的脚本(运维大神见文章末尾链接),我在自己的路由器上,发现经常会卡在开始的地方,经过了一个多月的郁闷,终于发现是采用cat /dev/urandom的时候,会卡住。所以采用了新的方式来生成随机的MAC和字符串,详细可以看脚本的相关语句。

那么如何使用呢

  1. 使用ssh登入你的OpenWRT路由器
  2. 将这个wk.sh放在/root目录下
  3. 给脚本添加可执行权限 #chmod +x /root/wk.sh
  4. crontab -e,在任务里添加一句0,7,13,19,26,30,34,37,47,57 * * * * source /root/wk.sh
  5. 重启crontab #/etc/init.d/crontab restart
  6. (可选)脚本里很多地方都有>> /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

脚本下载

加速脚本wk.sh

最新消息

北京联通联合优酷土豆最近开展了30元即可得到优酷土豆路由器的活动,我自己也申请了一个,还能免费从20M宽带免费升级到40M,小伙伴们可以去试试哦,感觉还不错。

参考资料

运维大神的地址