Python脚本搭配Mac自动操作登录学校热点

这个登录也用了有一段时间了,现在就总结下具体的操作过程。

Mac自带了一款应用,叫自动操作,可以自己定义多种操作,方便使用。这里要用自动操作登录Wifi,首先还是要写脚本,写脚本就要分析网页的登录请求是什么样的,以便构造。

连接Wifi以后,登录页面的IP固定。界面很简单,输入学号和密码,再选择运营商即可登录。

输入学号为account,密码为123456,运营商中国移动。然后打开BurpSuite,开启浏览器代理,点击登录,抓取登录请求的包。在BurpSuite看到请求包的内容如下,参数还是比较多的。user_account是账户名@运营商(@的URL编码为%40),user_account是密码,wlan_user_ip是当前IP。

然后,其他的参数意义我就不知道了,然后找到了室友给路由器写的脚本,发现很多参数是固定的,一些参数是时间戳,其他参数不用管,然后账户名,密码和运营商一选定,就可以登录Wifi了。感觉学校的一些东西做得还是不太讲究,2333。登录请求后,服务器会返回一个json数据,反映登录状态,脚本可根据这个判断是否出错。

整体的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
import time
import json
import base64
import requests

# 登录热点
def login(user, pwd, provider, ip, mac, stamp):
url = "http://10.2.5.251:801/eportal/?c=Portal&a=login&callback=dr1594111093261&login_method=1"
# user_account=05171759%40unicom&user_password=060534&wlan_user_ip=10.4.58.64&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.0&_=1594111654
# 添加账户信息
url += "&user_account={0}@{1}&user_password={2}".format(user, provider, pwd)
# 添加wlan信息
# 貌似登录热点并不需要wlan_user_ip和wlan_user_mac,所以删去了
# url += "&wlan_user_ip=10.4.58.64&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name="
url += "&wlan_ac_ip=&wlan_ac_name="
# 添加js版本和时间戳
url += "&jsVersion=3.0&_={0}".format(stamp)
res = requests.get(url)
res_text = res.content.decode("utf-8")
# 获取纯json格式数据
res_json = json.loads(res_text.split('(')[1].split(')')[0])
# 登录结果
result = res_json.get("result")
if result == '1':
print("登陆成功")
else:
msg = base64.b64decode(res_json.get('msg')).decode()
if msg == 'userid error1':
print('不存在此用户,请检查用户名是否填写错误,或者运行商选择错误')
elif msg == 'userid error2':
print('用户密码错误')
elif msg:
print('未知错误:', msg)
else:
print('无错误', msg)

if __name__ == "__main__":
# 账户信息,自己的账户、密码
user = "********"
pwd = "********"
# 供应商 移动:cmcc, 联通:unicom, 电信:telecom
provider = "********"
ip = ""
mac = "000000000000"
# 生成时间戳
time_stamp = str(int(time.time() * 1000))
# 登录
login(user, pwd, provider, ip, mac, time_stamp)

找个位置保存好上面的脚本,打开Mac上的自动操作,新建“快速操作”,在资源库中选择“运行Shell脚本”。工作流程收到“没有输入”,位于“任何应用程序”。在右下方的文本框,输入/usr/bin/python3 /Users/crownz/Code/VsCode/loginNetwork/school_network.py,以启动脚本,这个根据自己放置的位置而有所不同。

若现在连接了Wifi,可以点击运行来测试下。运行无误后,保存为“热点登陆.workflow”文件,这里把它放到了~/Library/Services目录下,这样就可以在左上方的“服务”下拉栏中看到我们的自动操作选项。如果想去掉,可以在服务偏好设置里面自定义。这个东西是全局的,在任何应用的“服务”下拉栏都可以使用。

参考

[1] 给 Mac 添加自定义服务