在路由器上写CMCC自动登录脚本2 (shell篇)

继上一篇在路由器上写CMCC自动登录脚本介绍用python脚本实现cmcc自动登录之后,用起来不是很爽!另外发现openwrt也不支持perl脚本,所以想到用shell脚本重新写一遍。方便在没有python环境下,能够直接使用。

今晚琢磨了两个小时,终于成功写出busybox能够支持的登录脚本了。因为登录过程中多次跳转,需要记录JSP的SessionID,所以需要下载安装完整版的wget,才能使用到wget的cookie功能!(busybox自带的wget不支持cookie功能)

上脚本代码:

#!/bin/sh
echo $(date) > /tmp/cmcc_date
wget 'http://www.google.com.hk/' -O /tmp/cmcc_touch --save-cookies /tmp/cmcc_cookies --keep-session-cookies

username="***********"
password="******"
wlanuserip=$(cat /tmp/cmcc_touch |grep 'NAME="wlanuserip"' |awk -F'"' '{print $6}')
wlanacname=$(cat /tmp/cmcc_touch |grep 'NAME="wlanacname"' |awk -F'"' '{print $6}')
wlanacip=$(cat /tmp/cmcc_touch |grep 'NAME="wlanacip"' |awk -F'"' '{print $6}')

if [[ !$wlanacname ]] 
then
    exit 0
fi

prelogin_url='http://221.179.9.18:8080/bpss/index.jsp'
wget "${prelogin_url}" --post-data "wlanuserip=${wlanuserip}&wlanacname=${wlanacname}&wlanacip=${wlanacip}" -O /tmp/cmcc_prelogin --load-cookies /tmp/cmcc_cookies --keep-session-cookies

login_url=$(cat /tmp/cmcc_touch |grep 'name="loginform"' |awk -F'"' '{print $4}')
wget "${login_url}" --post-data "bpssUSERNAME=${username}&bpssBUSPWD=${password}&Submit=%B5%C7%C2%BC&bpssLoginType=1" -O /tmp/cmcc_login --load-cookies /tmp/cmcc_cookies --keep-session-cookies

因为本人比较懒,有些网址直接hardcode了,所以你可能需要根据当地的情况而改变链接地址或者wget的请求方式。以上代码可以在广东省范围内使用 🙂

在路由器上写CMCC自动登录脚本2 (shell篇)》有85个想法

    1. Xiaoxia 文章作者

      呃,暂时还没想到啥好的结合方法。目前我想摆脱cmcc的。我有个主意是把这个路由放在实验室,运行一个vpn。然后在宿舍通过校园网接入,这样就能使用实验室的网络了。

      回复
  1. samhjn

    这似乎是用wget在写自动应答程序。。。看起来shell编程配合wget也可以用来自动抓取数据。。。拿来编写sql注入工具之类的应当没问题了。。。

    回复
    1. Xiaoxia 文章作者

      嗯,用起来也挺方便,只不过我现在对python更熟悉,所以一般情况下都会优先使用python 🙂

      回复
    1. Xiaoxia 文章作者

      也可以先访问xiaoxia.org的,这样才会被重定向到登录页面。
      在重定向的时候,会得到一些登录所必需的信息。

      回复
  2. 薛定谔猫态的大茶几

    前些日子就可以不翻就访问你的blog了
    在之前可能是两会 或者是啥大事情搞得 最严重的时候 阿倒闭的官网都去不了

    回复
      1. 梓羿

        GFW的路由扩散技术搞的鬼吧,前两天电信广西区的出口路由交换机就被扩散成错误的路由表了。工作人员恢复了半天呢。

        回复
  3. tianle

    你好,我弄了个tt路由写入锐捷后无法登陆ipv6,设置那块不知道该怎么弄,还望指教。

    IPv6服务类型 自ISP的原生IPv6DHCPv6带前缀授权6to4 Anycast Relay6in4 Static TunnelOther 其他(手动配置))
    IPv6的广域网接口

    Assigned / Routed Prefix
    前缀长度
    路由器IPv6地址 DefaultManual
    静态DNS

    启用路由器通告
    接受远程访问自

    回复
  4. shindow

    小虾大神,请教一个问题

    现在我们在做GIS地图显示,显示的数据非常多,现在使用MFC的GDI来做的,总体速度还过得去,有不有更快的图形库了,我在网上也找了很久没找到

    另外,CDC里面的透明拷贝貌似也比较慢,需要将小物标绘制到一个小内存位图上,在进行透明拷贝

    回复
    1. Xiaoxia 文章作者

      应该是你的方法有问题吧,除非你的实现非常复杂了。 我也不是很了解GIS,Google Maps在浏览器上都可以做的很流畅。

      回复
        1. Xiaoxia 文章作者

          我不是指绘图的效率,我是指绘图的算法。例如你可以把要显示的部分分块,分成200×200的块,一块一块的渲染,并且部分非常耗时的缓存起来。文字可以不缓存。

          回复
          1. shindow

            刚开始我们使用的是内存大位图,位置一个比屏幕大九倍的位图,移动屏幕,直接可以从内存大位图上拷贝。但比如我们快速滚动鼠标也要保证地图快速显示。

            现在的情况是,能做的你说的那种优化能想到的都想了,比如个船,做成一个位图缓冲起来。并且你说的那种渲染面时会增加裁剪时间。
            显示几张海图没问题,非常快,现在加载了4百副海图,速度会有点点卡。所以现在着手的不是算法上,而是库的使用。

            回复
  5. Pingback引用通告: 在路由器上写CMCC自动登录脚本2 (shell篇) | 没咖啡?那来没咖啡提个神吧!

  6. David

    河南CMCC,点登陆按钮时候,POST了这个地址。
    https://211.138.30.41/cmcc_home_do_login.php?issaveinfo=&loginmode=static&staticpassword=412031&staticusername=18803786682&wlanacip=218.206.196.170&wlanacname=0133.0371.371.00&wlanacssid=CMCC-HENAN&wlanuserip=111.5.93.174
    我用CURL访问的时候,不行,但是用浏览器可以。
    我是这样访问的:
    curl -k -b cookie.txt https://211.138.30.41/cmcc_home_do_login.php?issaveinfo=&loginmode=static&staticpassword=412031&staticusername=18803786682&wlanacip=218.206.196.170&wlanacname=0133.0371.371.00&wlanacssid=CMCC-HENAN&wlanuserip=111.5.93.174
    返回是这样的:
    alert(“取AC名为空!”);history.back();’loginmode’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘staticpassword’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘staticusername’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘wlanacip’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘wlanacname’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘wlanacssid’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ‘wlanuserip’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

    回复
      1. David

        我这样访问
        curl -k -b cookie.txt -d “loginmode=static&staticpassword=******&staticusername=188******&wlanacip=211.142.107.194&wlanacname=0031.0378.371.00&wlanacssid=CMCC-HENAN&wlanuserip=223.88.203.173” https://211.138.30.41/cmcc_home_do_login.php
        返回
        alert(“请输入您的验证码”);history.back();
        可是浏览器访问的时候,没有让任何让填验证码的地方啊?

        回复
        1. Xiaoxia 文章作者

          你可以用浏览器监控一下网络数据的。可能你少了哪些步骤或者发送的地址有误吧!

          回复
          1. David

            不知道啊,这个发送地址我就是用firebug抓到的。验证码啥的,是不是Cookie上设置的,我不知道呢。

            回复
    1. Xiaoxia 文章作者

      应该没问题,只要是Linux系统就可以。
      如果你尝试把这个脚本读懂,那就更好了,方便修改符合你的习惯。

      回复
  7. 小小强

    另外,广东的,收到的信号是CMCC-TEST,平时用页面登录跟CMCC没有区别,也是自动链接至http://221.179.9.18:8080/bpss/index.jsp 请问使用你的代码,要怎样修改?

    有一名叫myeyre的仁兄写了个用在DDWRT路由自动登录的脚本(广东不能用),有“为防止无流量或在线超过8小时导致被踢下线, 每三分钟访问某页面以保持在线, 每6小时自动重新登录”,请问你的代码有这项功能吗?http://hi.baidu.com/myeyre/blog/item/d6ab7d1ebc4cf3e81bd576b9.html
    http://user.qzone.qq.com/237367233/blog/1328470035#!app=2&pos=1328470035

    回复
    1. Xiaoxia 文章作者

      同时广东的话,应该可以用的。你可以试试运行一下,看有没有什么问题。
      你可以用 crontab来实现那个功能,定时运行一次脚本即可。

      回复
  8. ASK

    我是刚接触OPENWRT的菜鸟,请问OPENWRT怎样写脚本? 搞了几天搞不好,能出个教程就最好了。。。

    回复
    1. Xiaoxia 文章作者

      你要写啥脚本呀!直接用ssh登陆到控制台,然后用vi编辑一个脚本文件,不就行了么?

      回复
  9. 青月

    打算试着在文本模式下登录这个。
    呃,顺便问下,是否有下线的脚本呢?因为不及时断开,还会扣时间的

    回复
    1. Xiaoxia 文章作者

      没有分析过下线的协议。如果你想有稳定的CMCC撑网,还是用53端口的bug吧!
      前提是自己要有一个服务器或者VPS了。

      回复
  10. fans

    我在 etc/init.d/ 目录下建了个CMCC.sh 文件,然后将代码写到这个文件里并保存好。再看“系统—启动项”,在第一行就已经多了这一项CMCC.sh。但不能自动登录,试着运行 sh cmcc.sh 命令,显示cat: can’t open ‘/tmp/cmcc_touch’:No such file or directoty 不知道是什么原因?WGET 没有安装好?

    回复
    1. Xiaoxia 文章作者

      应该是因为你的系统没有 /tmp 这个目录吧!挺神奇的,应该凡是linux都有这个目录才对。

      回复
  11. fans

    我在 etc/init.d/ 目录下建了个CMCC.sh 文件,然后将代码写到这个文件里并保存好。再看“系统—启动项”,在第一行就已经多了这一项CMCC.sh。但不能自动登录,试着运行 sh cmcc.sh 命令,显示cat: can’t open ‘/tmp/cmcc_touch’:No such file or directoty 不知道是什么原因?

    回复
  12. qingyuan0o0

    小虾,我看了好几个版本的利用网络的方法,你这个方法最特别,我有很多思路,就是欠缺编程以及写脚本的方法,能加你即时聊天吗?发图方便一些.

    回复
  13. ASK

    下面这段代码不加成功登录,加了反而不行,不知何解? 不会设成开机自动运行这个脚本来拨号,现在是设成每隔5分钟就运行一次这个脚本来拨号,所以现在OPENWRT路由开机后等5分钟才能上网,哈哈,不过现在总算成功了。找广东的代码很难,在这里再次感谢小虾师傅!!

    if [[ !$wlanacname ]]
    then
    exit 0
    fi

    回复
  14. Klaus

    今天测试了.不过不知道是不是我操作问题.中继成功但是还是要网页登录.没有点击下线路由可以独自继续提供上网.脚本效果?(手机已经关闭登录界面断开手机wifi)
    一路下载了一部电影都没有掉线.下载完后应该就是出现了移动的15分钟无操作自动下线.然后手机再次网页登录就照着之前那样运行了.博主帮忙给分析分析….O(∩_∩)O~

    回复
    1. ASK

      可能路由器还没从CMCC获取好IP地址、未中继好,脚本就运行了,我是加了行sleep 30 (即等待30秒),还把中间那段 if 什么的代码去掉。。。成功了。我那想请教一下小虾是什么原因,if [[ !$wlanacname ]] 错了吗?还是中间空格要省略变成if [[!$wlanacname]] ??

      回复
      1. Xiaoxia 文章作者

        我对bash的语法也没有系统了解过,也不知道他这样写的语句,会不会产生什么问题。

        回复
  15. gongjia

    Hi 小虾,
    请教一个问题,我想模拟一下CMCC自动弹出网页的过程,就是手机连上我的wifi设备后,随便输入一个网页,就跳转到我的url,你可知道?
    有空交流;QQ:307509256

    回复
    1. Xiaoxia 文章作者

      可以做到的。这个其实就是在你未认证的时候,不允许你所有的数据包出口。可以在dns里把所有域名解析成你的登陆服务器的IP。也可以把所有TCP流量转发,比如访问外部80端口的流量,转发到你的自己的服务器IP去。

      回复
      1. gongjia

        谢谢,这个我已实现;
        不过还有个疑问,如何让手机自动弹框呢? 很多Android手机连接可CMCC都有弹框提示
        这个过程是怎么交互的?我还没有抓包,初步怀疑是dhcp的时候…

        回复
      1. x140ke

        有些路由刷了openwrt后支持模拟ap,也就是一个路由就可以做到client模式和ap模式,
        比如小虾哥的wr703n.

        回复
  16. 请问运行这个脚本后还是不能上网呢?感谢
    一下是运行后显示的内容。
    –2012-11-09 12:17:22– http://www.google.com.hk/
    Resolving http://www.google.com.hk... 2404:6800:4005:c00::c7, 74.125.128.199
    Connecting to http://www.google.com.hk|2404:6800:4005:c00::c7|:80… failed: Address family not supported by protocol.
    Connecting to http://www.google.com.hk|74.125.128.199|:80… connected.
    HTTP request sent, awaiting response… 200 OK
    Length: 919 [text/html]
    Saving to: `/tmp/cmcc_touch’

    100%[======================================>] 919 –.-K/s in 0s

    2012-11-09 12:17:22 (7.33 MB/s) – `/tmp/cmcc_touch’ saved [919/919]

    回复
    1. –2012-11-09 12:26:39– http://www.google.com.hk/
      Resolving http://www.google.com.hk... 2404:6800:4005:c00::c7, 74.125.128.199
      Connecting to http://www.google.com.hk|2404:6800:4005:c00::c7|:80… failed: Address family not supported by protocol.
      Connecting to http://www.google.com.hk|74.125.128.199|:80… connected.
      HTTP request sent, awaiting response… 200 OK
      Length: unspecified [text/html]
      Saving to: `/tmp/cmcc_touch’

      [ ] 163,170 58.0K/s in 2.7s

      2012-11-09 12:26:42 (58.0 KB/s) – `/tmp/cmcc_touch’ saved [163170]

      回复
    2. Xiaoxia 文章作者

      Hi,你是否已经连上了呢,我看到你已经成功连接到Google的服务器呀!
      看看cmcc_touch里是什么内容。

      回复
      1. #!/bin/sh
        echo $(date) > /tmp/cmcc_date
        wget ‘http://www.baidu.com/’ -O /tmp/cmcc_touch –save-cookies /tmp/cmcc_cookies –keep-session-cookies

        username=”15964055097″
        password=”******f”
        wlanuserip=$(cat /tmp/cmcc_touch |grep ‘NAME=”wlanuserip”‘ |awk -F'”‘ ‘{print $6}’)
        wlanacname=$(cat /tmp/cmcc_touch |grep ‘NAME=”wlanacname”‘ |awk -F'”‘ ‘{print $6}’)
        wlanacip=$(cat /tmp/cmcc_touch |grep ‘NAME=”wlanacip”‘ |awk -F'”‘ ‘{print $6}’)

        if [[ !$wlanacname ]]
        then
        exit 0
        fi

        prelogin_url=’http://221.179.9.18:8080/bpss/index.jsp’
        wget “${prelogin_url}” –post-data “wlanuserip=${wlanuserip}&wlanacname=${wlanacname}&wlanacip=${wlanacip}” -O /tmp/cmcc_prelogin –load-cookies /tmp/cmcc_cookies –keep-session-cookies

        login_url=$(cat /tmp/cmcc_touch |grep ‘name=”loginform”‘ |awk -F'”‘ ‘{print $4}’)
        wget “${login_url}” –post-data “bpssUSERNAME=${username}&bpssBUSPWD=${password}&Submit=%B5%C7%C2%BC&bpssLoginType=1” -O /tmp/cmcc_login –load-cookies /tmp/cmcc_cookies –keep-session-cookies

        回复
  17. xianyanlin

    为什么最后一句报错了呢?
    root@OpenWrt:~# wget “${login_url}” –post-data “bpssUSERNAME=${username}&bpssBUSPWD=${password}&Submit=%B5%C7%C2%BC&bpssLoginType=1” -O /tmp/cmcc_login –load-cookies
    /tmp/cmcc_cookies –keep-session-cookies
    http://: Invalid host name.

    回复
  18. xianyanlin

    师兄我还有一个问题想问一下 我用路由器连接校园网 WAN设置校园网分配的静态地址 LAN设置局域网包括发射无线wifi 为什么设置完后在luci上可以ping通www.baidu.com 但是在PC上确ping不通呢?这个问题困扰了我两天了 不知道该怎么解决 求指导

    回复
  19. liangjw90

    你好,由于对linux不熟悉,我在openwrt里想让它自动连接这个网页
    “h-t-t-p://125.88.59.131:10001/login.do?userName1=【当然是用户名】&password1=【是密码】&eduuser=【本机帮绑定的IP】&edubas=119.146.99.27&patch=zq%2Fzq251”
    然后就可以返回成功登陆页面了。听说elink可以外部打开这个,但是我想路由自行登陆(当然检测断网后重新打开的功能不敢奢望,但是可以让它一定时间后自动打开或者刷新就可以达到断网后次日正常上网,因20分钟不上要求重新登录网页,而晚上锐捷断网)
    请问用什么方法吗?当然,我不介意做伸手党的,哈哈~~

    回复
  20. liangjw90

    上面那个测试正常,而且感觉那个容易实现,下面这个有时自动登录不正常,貌似要浏览器js支持,希望你可以帮忙看看:

    蛋疼校园网

    setTimeout(“document.login1.submit()”,1)

    校园网登录

    用户名

    密码

    回复
  21. 成年的小朋友

    /$ sh cmcc.sh
    wget: unrecognized option `–keep-session-cookies’
    Usage: wget [OPTION]… [URL]…

    Try `wget –help’ for more options.
    cmcc.sh: line 4: : not found
    cat: can’t open ‘/tmp/cmcc_touch’: No such file or directory
    cat: can’t open ‘/tmp/cmcc_touch’: No such file or directory
    cat: can’t open ‘/tmp/cmcc_touch’: No such file or directory
    cmcc.sh: line 10: : not found
    cmcc.sh: line 20: syntax error: unexpected end of file (expecting “then”)
    运行后返回如下数据,点半呢?

    回复
  22. freeboss12

    大神,有个问题向您提出,您的sogou代理脚本能否直接运行在openwrt下呢?我试了好几次都没有成功,能否提供个思路呢?我跟你是一样的路由器…..

    回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据