LEDE配置校园网自动登陆脚本

前言

校园网更新后登陆方便了许多,使用了Web的方式登陆,并且“用户友好”地没有加密,全程明文传输,方便了我制作登陆脚本。

编写脚本

上脚本:

#!/bin/sh
#查看连接状态,返回1表示已连接,返回0表示已断开
function alive(){
    status_code=$(curl -X GET -I -m 10 -o /dev/null -s -w %{http_code} 192.168.125.21:9002)
    if [ $status_code -eq 200 ]
    then
        return 1
    else
        return 0
    fi
}
#登陆函数,调用后会发送登陆请求
function connect(){
    curl -k --raw -X POST -s -o /dev/null \
    -d "R7=0&R2=&buttonClicked=&DDDDD=【学号】&user=&cmd=&R6=0&para=00&username=&password=&redirect_url=&0MKKey=123456&R1=0&Login=&R3=2&err_flag=&upass=【密码】" \
    -H "Host: 192.168.125.21" \
    -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
    -H "Accept-Encoding: gzip, deflate" \
    -H "Connection: keep-alive" \
    -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Referer: http://192.168.125.21/a79.htm?isReback=1" \
    -H "Upgrade-Insecure-Requests: 1" \
    -H "DNT: 1" \
    -H "Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2" \
    "http://192.168.125.21/a79.htm"
}
function main(){
    successful=0
    failed=0
    #如果登陆成功一次或者失败5次就退出循环
    until [ $successful -eq 1 -o $failed -gt 5 ]
    do
        alive
        is_alive=$?
        if [ $is_alive -eq 1 ]
        then
            let successful+=1
        elif [ $is_alive -eq 0 ]
        then
            connect
            let failed+=1
        fi
    done
    if [ $successful -gt 0 ]
    then
        return 1
    else
        return 0
    fi
}
main
result=$?
#如果登陆成功就访问一次外网资源,以维持连接
if [ $result -eq 1 ]
then    
    curl -s -o /dev/null "www.baidu.com"
fi

说说脚本原理,没有登陆校园网时访问192.168.125.21:9002,会收到一个302的状态码,登陆校园网后访问则收到200的状态码,可以依据这点来判断校园网是否连接上,当然这种方法有可能不太严谨(因为9002端口并不是专门用于查询连接状态的端口),应该以能不能访问外网资源为是否已连接的标准,但是因为懒而且脚本运行起来没问题就先用着吧。
最后保存上述脚本到路由器,假设路径为/root/auto-connect.sh

设置crontab

crontab用于完成定时计划,可以配置它来完成定时登陆。
首先新建一个任务脚本:

echo "0,20,40 * * * * sh /root/auto-connect.sh" > mycrontab

接着使用命令crontab mycrontab建立任务,这段脚本的含义为每小时的第0,20,40分钟执行一次/root/auto-connect.sh脚本。之所以设置每20分钟运行一次是因为校园网规定30分钟没有流量则自动断开连接,当然也可以把脚本执行的频率调高一些。

LEDE中的crontab默认是不启动的,需要手动开启

/etc/init.d/crontab start

windows下powershell的登陆脚本

$Headers = @{
    "Host" = "192.168.125.21"; `
    "Accept" = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; `
    "Accept-Encoding" = "gzip, deflate"; `
    "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"; `
    "Content-Type" = "application/x-www-form-urlencoded"; `
    "Referer" = "http://192.168.125.21/a79.htm?isReback=1"; `
    "Upgrade-Insecure-Requests" = "1"; `
    "DNT" = "1"; `
    "Accept-Language" = "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2"
}
$Body = @{
    "R7"="0"; `
    "R2"=""; `
    "buttonClicked"=""; `
    "DDDDD"="【学号】"; `
    "user"=""; `
    "cmd"=""; `
    "R6"="0"; `
    "para"="00"; `
    "username"=""; `
    "password"=""; `
    "redirect_url"=""; `
    "0MKKey"="123456"; `
    "R1"="0"; `
    "Login"=""; `
    "R3"="2"; `
    "err_flag"=""; `
    "upass"="【密码】"
}
Invoke-WebRequest "http://192.168.125.21/a79.htm" -Method POST -Headers $Headers -Body $Body

参考

http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html

发表评论

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