校园网认证系统是高校信息化建设的基础设施,但每次开机或切换网络都需要手动输入账号密码登录,这个重复性操作让不少师生感到困扰。我在深大就读期间就经常遇到这样的场景:早上第一节课前打开笔记本,发现网络未连接;在图书馆切换座位后,需要重新认证;实验室设备重启后,网络服务中断需要人工介入。
这个自动登录程序要解决三个核心痛点:
深大校园网采用标准的Portal认证,通过抓包分析发现其认证流程包含:
关键难点在于:
经过对比测试,最终方案组合:
python复制# 核心组件
import requests # 网络请求
from Crypto.PublicKey import RSA # 密码加密
import schedule # 定时任务
from bs4 import BeautifulSoup # HTML解析
选择Python的主要原因:
完整登录流程代码实现:
python复制def campus_login(username, password):
# 第一阶段:获取登录页面
session = requests.Session()
portal_page = session.get("http://172.30.255.2")
# 解析加密公钥
soup = BeautifulSoup(portal_page.text, 'html.parser')
public_key = RSA.import_key(soup.find('input', {'name': 'public_key'})['value'])
# RSA加密密码
cipher = PKCS1_v1_5.new(public_key)
encrypted_pwd = b64encode(cipher.encrypt(password.encode()))
# 构造POST数据
form_data = {
'username': username,
'password': encrypted_pwd,
'operator': 'telecom' # 移动/联通需相应修改
}
# 提交认证请求
auth_res = session.post("https://auth.szu.edu.cn/ac_portal/login.php", data=form_data)
return auth_res.json()['success']
实现可靠的网络连通性检测需要多策略组合:
python复制def check_network():
test_targets = [
("http://connect.rom.miui.com", 200), # 小米服务器
("http://www.qq.com", 302), # 腾讯首页
("http://172.30.255.2", 200) # 校园网Portal
]
for url, expect_code in test_targets:
try:
if requests.get(url, timeout=3).status_code != expect_code:
return False
except:
return False
return True
采用指数退避算法优化重试逻辑:
python复制retry_intervals = [1, 2, 4, 8, 16] # 单位:秒
def reconnect():
for delay in retry_intervals:
time.sleep(delay)
if campus_login(config.USER, config.PWD):
return True
return False
通过APScheduler实现7×24小时守护:
python复制from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
scheduler.add_job(network_monitor, 'interval', minutes=1)
scheduler.start()
采用config.ini保存敏感信息:
ini复制[auth]
username = 学号
password = BASE64加密后的密码
operator = telecom
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 反复弹出认证页面 | 心跳包未发送 | 检查定时任务是否正常运行 |
| 登录成功但无法上网 | 运营商选择错误 | 修改config.ini中的operator字段 |
| 程序占用CPU过高 | HTML解析异常 | 更新BeautifulSoup到最新版本 |
这个项目最让我意外的是校园网认证系统的健壮性——即便在毕业两年后回访测试,当年的自动登录脚本仍然可以正常工作。不过建议使用者每学期初检查一次认证流程是否有更新,特别是在学校网络升级改造期间。对于需要多设备登录的情况,可以考虑加入设备指纹识别功能避免账号异常检测。