CQU校园网双电脑接入方案
写在前面
本文涉及到的方案均在互联网上有详实的操作方案,但由于年代久远CQU的校园网API经过稍许变动,于是本文重新整理。
校园网接入
本文只讨论WIFI接入,后续会更新路由接入的方案。CQU校园网的抓包还是比较简单的,通过抓包分析校园网的http包,很容易看到其实是通过发送了如下的HTTPS GET请求
https://login.cqu.edu.cn:802/eportal/portal/login?callback=dr1004&login_method=1&user_account=%2C0%2C2024XXXXX&user_password=XXXXXXX&wlan_user_ip={self.ip}&wlan_user_mac=000000000000&lang=zh-cn&v=4050
分析请求字段,其中重点在user_account
,user_password
,wlan_user_ip
三部分。而阻止双电脑接入的重点在user_account
字段里。通过检测%2C
后的单字符的奇偶性进行接入的,PC似乎默认是0,移动端默认为1。
解决方案
因此解决方案就显而易见了,连接上校园网后两台电脑通过发送不同的请求包来实现双电脑接入。我使用了python的requests库实现。windows的powershell
不是很熟,不然使用curl
似乎更好。
import requests, socket
import psutil
import random
import math
import dataclasses
@dataclasses.dataclass
class UrlParam:
callback: int
device: int
user_account: str
user_password: str
ip: str
def create_url(self) -> str:
if self.ip is None:
raise ExceptionOfIpError("IP TYPE ERROR")
return f"https://login.cqu.edu.cn:802/eportal/portal/login?callback=dr{self.callback}&login_method=1&user_account=%2C{self.device%2}%2C{self.user_account}&user_password={self.user_password}&wlan_user_ip={self.ip}&wlan_user_mac=000000000000&lang=zh-cn&v={math.floor(random.random() * 10000 + 500)}"
class ExceptionOfIpError(Exception):
def __init__(self, *args):
super().__init__(*args)
def get_ip():
#获取所有网络接口的信息
interfaces = psutil.net_if_addrs()
#查找无线网络接口的IP地址
wlan_ip = None
for interface, addrs in interfaces.items():
if interface.lower() == "wifi" or "wlan" in interface.lower():
for addr in addrs:
if addr.family == socket.AddressFamily.AF_INET: #查找IPv4地址
wlan_ip = addr.address
break
return wlan_ip
def main():
callback_jsonp: int = 1000
try:
param = UrlParam(
callback=callback_jsonp,
device=1,
user_account="2024XXXXXX",
user_password="XXXXX",
ip=get_ip()
)
url = param.create_url()
response = requests.get(url=url)
print(response.text)
except ExceptionOfIpError:
exit(-1)
if __name__ == '__main__':
main()
修改为自己的账号和密码,运行即可。