RUC Wifi: 鹿大校园网自动认证 / 定时连接

RUC WiFi: 鹿大校园网自动认证 / 定时连接

链接

overdose425/RUC_WiFi: 深澜认证协议下自动认证校园网 / 校园网定时重连 (github.com)

起因

跟鹿大在读的女友出门玩时,心疼她为了工作每次都要背个游戏本出门,不便且厚重,遂寄希望于远程连接在校园的电脑。然而鹿大的校园网断线频率实在太高,为了省心地解决该问题,我参考北航校园网下设置自动连接的方案,编写了鹿大校园网连接脚本。在此处感谢原po作者们!

参考

原项目:https://github.com/huxiaofan1223/jxnu_srun
实现主要参考:https://github.com/FuryMartin/BUAA_WIFI

改动

  1. 修改了相关url以适配RUC校园网
  2. 编码部分debug

使用

  1. 修改ruc_wifi.py中username和password值为你的网关账号密码
  2. 运行ruc_wifi.py 或 运行wifi.bat

自动

【windows下实现】 感谢原作者@FuryMartin

  1. 按键盘上的win+S键,直接打字搜索任务计划程序并打开

  2. 点击任务计划程序窗口右上角的创建任务

  3. 勾选常规-不管用户是否登录都要运行

  4. 点击触发器-新建,将开始任务下拉选择工作站解锁时,并设置重复任务时间为5分钟,且永不停止

  5. 点击操作-新建,点击浏览,将程序路径设置为wifi.vbe的绝对路径,【特别注意】起始于选项设置为本项目文件夹的绝对路径

  6. 取消勾选条件-只有在计算机使用交流电源时才启动此任务

  7. 点击确定

代码

ruc_wifi.py

import requests
import time
import re
from encryption.srun_md5 import *
from encryption.srun_sha1 import *
from encryption.srun_base64 import *
from encryption.srun_xencode import *

username = ""
password = ""

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36'
}
init_url = "http://go.ruc.edu.cn"
get_challenge_api = "http://go.ruc.edu.cn/cgi-bin/get_challenge"

srun_portal_api = "http://go.ruc.edu.cn/cgi-bin/srun_portal"
get_info_api = "http://go.ruc.edu.cn/cgi-bin/rad_user_info?callback=jQuery112403076366133070929_1630949443031&_=1630949443033"
n = '200'
type = '1'
ac_id = '1'
enc = "srun_bx1"


def get_chksum():
    chkstr = token+username
    chkstr += token+hmd5
    chkstr += token+ac_id
    chkstr += token+ip
    chkstr += token+n
    chkstr += token+type
    chkstr += token+i
    return chkstr


def get_info():
    info_temp = {
        "username": username,
        "password": password,
        "ip": ip,
        "acid": ac_id,
        "enc_ver": enc
    }
    i = re.sub("'", '"', str(info_temp))
    i = re.sub(" ", '', i)
    return i


def init_getip():
    global ip
    init_res = requests.get(init_url, headers=header)
    print("初始化获取ip")
    ip = re.search('ip     : "(.*?)"', init_res.text).group(1)
    print("ip:"+ip)


def get_token():
    # print("获取token")
    global token
    get_challenge_params = {
        "callback": "jQuery112404953340710317169_"+str(int(time.time()*1000)),
        "username": username,
        "ip": ip,
        "_": int(time.time()*1000),
    }
    get_challenge_res = requests.get(
        get_challenge_api, params=get_challenge_params, headers=header)
    token = re.search('"challenge":"(.*?)"', get_challenge_res.text).group(1)
    print(get_challenge_res.text)
    print("token为:"+token)


def do_complex_work():
    global i, hmd5, chksum
    i = get_info()
    i = "{SRBX1}"+get_base64(get_xencode(i, token))
    hmd5 = get_md5(password, token)
    chksum = get_sha1(get_chksum())
    print("所有加密工作已完成")


def login():
    srun_portal_params = {
        'callback': 'jQuery11240645308969735664_'+str(int(time.time()*1000)),
        'action': 'login',
        'username': username,
        'password': '{MD5}'+hmd5,
        'ac_id': ac_id,
        'ip': ip,
        'chksum': chksum,
        'info': i,
        'n': n,
        'type': type,
        'os': 'windows+10',
        'name': 'windows',
        'double_stack': '0',
        '_': int(time.time()*1000)
    }
    # print(srun_portal_params)
    srun_portal_res = requests.get(
        srun_portal_api, params=srun_portal_params, headers=header)
    print(srun_portal_res.text)


if __name__ == '__main__':

    init_getip()
    get_token()
    do_complex_work()
    login()
    res = requests.get(get_info_api, headers=header)
    print(res.text)

其他自动化脚本详见github repo内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值