CQUPT实验室电脑定时联网
由于重邮上网需要拨号并且网络变动时会造成拨号掉线断网,但作为办公机有时候又需要实时联网方便使用,尤其是暑假放假机器更不能断。
解决方法:
Windows定时任务 + Python拨号脚本
Python拨号脚本
先准备python拨号脚本
"""
@author yutanglee
@description 这个代码可以免浏览器拨号上网,原理很简单,就是给认证服务器发送一个http请求。
@use 你需要提供上网账号、密码和运营商,是否采用手机端或者PC端是可选的。手机端和PC端是指,重邮的每个上网账号可以同时存在一个PC账号和手机端。
@author2 MirrorML
@descritpion 进行了Windows系统的适配
"""
from ast import arg
from pydoc import describe
import requests
import subprocess
import re
import argparse
import base64
def login(usr, psw, isp, ip, mobile=True):
url = 'http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&' +\
'user_account=%2C0%2C' + usr + '%40' + isp +'&user_password=' + psw + '&wlan_user_ip=' + ip + \
'&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3&v=10390'
if not mobile:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58'}
else:
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.58'}
r = requests.get(url=url, headers=headers)
return r.text
def get_local_ip():
try:
# 运行 ip a 命令获取网络接口信息
output = subprocess.check_output(["ipconfig"]).decode("cp1252")
print(output)
# 使用正则表达式解析 IP 地址
ip_pattern = r"(\d+\.\d+\.\d+\.\d+)"
match = re.findall(ip_pattern, output)
print(match)
# 筛选出以特定 IP 段开头的 IP 地址
target_ips = [ip for ip in match if ip.startswith("10.16.") or ip.startswith("10.20.")]
if target_ips:
return target_ips[0] # 返回第一个满足条件的 IP 地址
else:
return None
except subprocess.CalledProcessError:
return None
if __name__ == '__main__':
args = argparse.ArgumentParser()
args.add_argument('--user', type=str, default='认证码', help='your account for CQUPT network, maybe is your id number login ehall.cqupt.edu.cn')
args.add_argument('--psw', type=str, default='密码', help='password')
args.add_argument('--isp', type=str, default='校园网账号类型', help='cmcc|telecom|unicom|xyw')
args.add_argument('--mobile', action='store_true', help='do you want use mobile mode?')
args = args.parse_args()
if args.isp != 'cmcc' and args.isp != 'telecom' and args.isp != 'unicom' and args.isp != 'xyw':
print('运营商只支持cmcc|telecom|unicom|xyw 重新检查输入!')
exit(1)
ip = get_local_ip()
if ip is None:
ip = input("自动获取IP失败,请你输入正确的IP:")
print('your ip is:', ip)
print('your user is:', args.user)
print('your password is:', args.psw)
print('your isp is:', args.isp)
args.mobile = True
response = login(args.user, args.psw, args.isp, ip, args.mobile)
start_index = response.find('"result":"') + len('"result":"')
end_index = response.find('"', start_index)
result_value = response[start_index:end_index]
if result_value == '1':
print('登录成功!')
else:
start_index = response.find('"msg":"') + len('"msg":"')
end_index = response.find('"', start_index)
msg_encoded = response[start_index:end_index]
# 对msg进行Base64解码
msg_decoded = base64.b64decode(msg_encoded).decode('utf-8')
print(msg_decoded, response)
if msg_decoded == 'ldap auth error':
print('密码错误!')
elif msg_decoded == 'userid error1':
print('账号不存在!')
cmd的使用方式为, 默认使用手机端登录
python drome.py --user xx --psw xx --isp xx
Windows定时任务
打开任务计划程序
创建基本任务, 触发器每天执行(后续配置1小时执行一次),操作选择启动程序,
程序或者脚本选择python执行的路径,起始于选择python拨号脚本存放的路径,参数为 drome.py --user xx --psw xx --isp xx(这里是演示,我直接把参数写到文件里了,当前你也可以这样做)
点击确定完成。
重新点击这个任务,在触发器那里,选择重复任务间隔1小时
总结
至此,我们电脑便会1小时进行一次拨号,保存一直有网
后续扩展
- 利用DDNSGO+IPV6实现MSTSC远程访问
- 直接使用向日葵连接
- 使用Tailscale进行异地组网连接