小熊の小站

Try my best.

校园网登入一键脚本分享

Littlebear0729's Avatar 2021-09-10 折腾记

  1. 1. bash实现
  2. 2. Python实现
  3. 3. 更多
  4. 4. 2021-10-02更新

参考:https://gist.github.com/leoleoasd/e7a5d6ba5bcd03e996bf886e94620b87
感谢leoleoasd
https://gist.github.com/littlebear0729/3b4a210c037f4eb07963791db58b9e98
感谢小熊自己

分享一下自己使用的BJUT有线校园网的一键登入脚本。

bash实现

这种方式适用于基于Linux、Unix的系统,比如macOS。

使用方法:新建一个后缀为.sh的文件,将下面的代码拷贝到文件中,赋予运行权限。每次运行会询问用户名和密码,输入之后就可以一键登入校园网了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env bash

# Read username & password from stdin
# Suited for public computers where credentials are not saved

read -p 'username: ' user
read -p 'password: ' -s pwd
echo

DATE=`date '+%Y-%m-%d %H:%M:%S'`

r1=`wget 'https://lgn6.bjut.edu.cn/V6?https://lgn.bjut.edu.cn' -qO- --post-data "DDDDD=$user&upass=$pwd&v46s=0&v6ip=&f4serip=172.30.201.2&0MKKey=" | grep v6ip | sed "s/<input type='hidden' name=DDDDD value='$user'><input type='hidden' name=upass value='$pwd'><input type='hidden' name=0MKKey value='Login'><input type='hidden' name='v6ip' value='//g" | sed "s/'><\/FORM><\/body><\/html>//g" | sed "s/:/%3A/g"`

r=`wget 'https://lgn.bjut.edu.cn/' -qO- --post-data "DDDDD=$user&upass=$pwd&0MKKey=Login&v6ip=$r1" | grep 'You have successfully logged into our system.'`


if [ "${r}" == '' ]; then
echo ${DATE} Failed
else
if [ "${r1}" == '' ]; then
echo ${DATE} Failed
else
echo ${DATE} Success
echo Your IPV6 address: `echo $r1 | sed "s/%3A/:/g"`
fi
fi

Python实现

这种方式适用于所有安装了Python3环境的设备。

使用方法:新建一个Python文件,将下面的代码拷贝到文件中,运行Python程序,输入用户名和密码即可一键登入校园网。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import requests
import getpass
import sys

username = input('username=')
password = getpass.getpass('password=')

headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'Origin': 'http://lgn6.bjut.edu.cn',
'Upgrade-Insecure-Requests': '1',
'DNT': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Sec-Fetch-Dest': 'document',
'Referer': 'http://lgn6.bjut.edu.cn/',
'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
}

params = (
('https://lgn.bjut.edu.cn', ''),
)

data = {
'DDDDD': username,
'upass': password,
'v46s': '0',
'v6ip': '',
'f4serip': '172.30.201.10',
'0MKKey': ''
}

try:
response = requests.post('https://lgn6.bjut.edu.cn/V6?https://lgn.bjut.edu.cn', headers=headers, data=data)
print(response.text)
except:
input('something went wrong...')
sys.exit()

tmp = response.text.split('value=')
v6ip = tmp[-1].split('\'')[1]


headers = {
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'Origin': 'https://lgn6.bjut.edu.cn',
'Upgrade-Insecure-Requests': '1',
'DNT': '1',
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Dest': 'document',
'Referer': 'https://lgn6.bjut.edu.cn/',
'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
}

data = {
'DDDDD': username,
'upass': password,
'0MKKey': 'Login',
'v6ip': v6ip
}

try:
response = requests.post('https://lgn.bjut.edu.cn/', headers=headers, data=data)
print(response.text)
except:
input('something went wrong...')
sys.exit()


if 'You have successfully logged into our system.' in response.text:
print('***Login successful***')

input('press any key to continue...')

更多

以上两种实现方式供读者参考,有能力的读者可以自己改一下代码,不用每次输入用户名和密码即可登入。

我尝试过通过苹果的Shortcut捷径来实现一键登入,但是失败了。感兴趣的朋友可以跟我一起探讨,解决问题。

此外,安卓手机的方法目前还没有研究出来,有会玩的朋友也可以跟大家分享一下。

2021-10-02更新

最近在GitHub上面发现也有不少BJUT的登录脚本,原理不尽相同,朋友们有兴趣可以研究一下。

例如:

https://github.com/toshichi/BJUT_Always_Online
https://github.com/josephstalin117/lgn_bjut_script

本文作者 : Littlebear0729
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://blog.bearxiong.xyz/2021/09/%E6%A0%A1%E5%9B%AD%E7%BD%91%E7%99%BB%E5%85%A5%E4%B8%80%E9%94%AE%E8%84%9A%E6%9C%AC%E5%88%86%E4%BA%AB/

本文最后更新于 天前,文中所描述的信息可能已发生改变