——前言
分享下实现中国移动校园网通过request自动认证的思路
注意:只适用于中国移动的校园网,其他的校园网根据逻辑自行修改。
逛了很多的论坛发现没有用这种方法实现校园网自动认证的
办理的校园网每次登陆都需要手动打开浏览器进行验证
而且通过Python自动化实现登录校园网的功能具有一定局限性
在不装自动化驱动和环境的情况下是不能实现自动认证校园网的
是我换了一种思路,模拟Post提交表单数据请求直接实现校园网自动认证
输入校园网账号与密码
↓
自动保存账号密码到文本文件中
↓
获取本机网卡的mac地址
↓
获取本机WiFi的IPV4地址
↓
自动填充到链接中的IP和MAC中
↓
GET方法获取链接页面内容
↓
页面内容中提取登录表单
↓
构造登录请求
↓
Post发送登录请求
↓
检查是否登录成功
——1、准备工作
要模拟POST请求,必须拿到POST请求的相关信息。如请求的URL,发送的表单数据和标头
登陆界面如图上图所示
在此页面打开开发者选项[F12],选择网络,勾选保留日志:
输入账号密码登录,成功后会看到右侧出现一条名为login.do的数据
点击框内数据会显示该请求的URL、响应头、请求头、表单等信息:
将请求的URL、请求头、表单先记下来:
#请求url
http://211.138.1.146:8888/login.do
#请求标头:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 147
Content-Type: application/x-www-form-urlencoded
Cookie: portalsessionid=CA9DF25A110D4F6F774447463F25FB0C
Host: 211.138.1.146:8888
Origin: http://211.138.1.146:8888
Pragma: no-cache
Referer: http://211.138.1.146:8888/showLogin.do?wlanuserip=100.64.176.0&wlanacname=0013.0311.311.00&user-mac=44-e5-17-dc-04-06
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
#表单数据
'showVerify': 'false',
'loginType': '1',
'bpssUSERNAME': 校园网账号,
'bpssBUSPWD': 校园网密码,
'dynVerifyCode': '',
'bpssVERIFY': '',
'macAge': '填获取的',
'CSRFHW': '填获取的'
记住这三项数据,开始编写python代码
——2、技术细节
需要注意一点,中国移动校园网和其他的校园网认证方式不一样
认证页面的网址里是需要有本机IP和MAC地址的,不然认证失败
那么让我们先写获取IP地址和MAC地址的代码
获取IPV4地址:
import socket
ip_address = socket.gethostbyname(socket.gethostname())
print("本机IPv4地址:", ip_address)
运行截图:
获取MAC地址:
import wmi
def get_MACAddress():
s = wmi.WMI()
network = []
for nw in s.Win32_NetworkAdapterConfiguration(IPEnabled=1):
network.append(
{
"MAC": nw.MACAddress,
"ip": nw.IPAddress
}
)
MACAddress = str(network[0]["MAC"]).replace(':', '')
formatted_MACAddress = '-'.join([MACAddress[i:i + 2] for i in range(0, len(MACAddress), 2)])
return formatted_MACAddress
if __name__ == "__main__":
mac_address = get_MACAddress()
print("网卡MAC地址="+mac_address)
运行截图:
——3、自动匹配链接
将获取的IP地址和Mac地址自动匹配到链接中:
url = f"http://211.138.1.146:8888/showLogin.do?wlanuserip={ip_address}&wlanacname=0014.0311.311.00&user-mac={mac_address}"
运行截图:
——4、编写代码
提示:为了能有更好的使用体验,我在里面放了首次登录输入账号密码自动储存的功能,方便下次登录。
import socket
import requests
from bs4 import BeautifulSoup
import wmi
import os
def create_credentials_file():
credentials_file = "D:\\credentials.txt" # 修改文件路径为 D 盘根目录下的 credentials.txt
if not os.path.exists(credentials_file):
username = input("请输入校园网账号:")
password = input("请输入校园网密码:")
with open(credentials_file, "w") as file:
file.write(username + "\n")
file.write(password + "\n")
else:
print("1、密码储存文件已存在,请勿删除credentials.txt")
return credentials_file
def get_credentials():
credentials_file = create_credentials_file()
with open(credentials_file, "r") as file:
lines = file.readlines()
if len(lines) >= 2:
username = lines[0].strip()
password = lines[1].strip()
else:
username = input("请输入校园网账号:")
password = input("请输入校园网密码:")
with open(credentials_file, "w") as file:
file.write(username + "\n")
file.write(password + "\n")
return username, password
class NetworkInfo:
def get_MACAddress(self):
s = wmi.WMI()
network = []
for nw in s.Win32_NetworkAdapterConfiguration(IPEnabled=1):
network.append(
{
"MAC": nw.MACAddress,
"ip": nw.IPAddress
}
)
MACAddress = str(network[0]["MAC"]).replace(':', '')
formatted_MACAddress = '-'.join([MACAddress[i:i + 2] for i in range(0, len(MACAddress), 2)])
print("2、网卡MAC地址={}".format(formatted_MACAddress))
return formatted_MACAddress
username, password = get_credentials()
# 获取本机IPv4地址
ip_address = socket.gethostbyname(socket.gethostname())
# 获取本机MAC网卡地址
network_info = NetworkInfo()
mac_address = network_info.get_MACAddress()
url = f"http://211.138.1.146:8888/showLogin.do?wlanuserip={ip_address}&wlanacname=0013.0311.311.00&user-mac={mac_address}"
print("3、IP和MAC匹配的登录网址为:"+url)
# 发送GET请求,获取showLogin页面的内容
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# 提取登录表单的相关信息
form_url = url + soup.find("form")["action"]
# ... (其他部分代码)
# 发送登录请求
with requests.Session() as session:
# 构造请求头
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cache-Control': 'no-cache',
'Content-Length': '147',
'Content-Type': 'application/x-www-form-urlencoded',
'Cookie': 'portalsessionid=3EF9A1E666889BC47339C06195BCF724',
'Host': '211.138.1.146:8888',
'Origin': 'http://211.138.1.146:8888',
'Pragma': 'no-cache',
'Proxy-Connection': 'keep-alive',
'Referer': 'http://211.138.1.146:8888/showLogin.do',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
}
# 发送GET请求,获取showLogin页面的内容
response_show_login = session.get(url, headers=headers)
print(f"4、发送GET请求获取showLogin页面的内容为:+{response_show_login}")
# 提取登录表单的相关信息
form_url = url + BeautifulSoup(response_show_login.text, "html.parser").find("form")["action"]
print(f"5、提取登录表单的相关信息为:"+form_url)
# ...(获取其他表单数据的代码)
# 构造登录请求的数据(和之前保持一致)
data = {
'showVerify': 'false',
'loginType': '1',
'bpssUSERNAME': username,
'bpssBUSPWD': password,
'dynVerifyCode': '',
'bpssVERIFY': '',
'macAge': '',
'CSRFHW': ''
}
# 设置登录请求的地址为login.do,而非showLogin.do
login_url = "填写login.do链接"
# 然后发送登录请求
print(f"6、login_url的内容为:"+login_url)
print(f"7、headers的内容为:+{headers}")
print(f"8、data的内容为:+{data}")
response_login = session.post(login_url, headers=headers, data=data)
# 检查登录是否成功
print(f"9、response_login.text的内容为:"+response_login.text)
if "用户登录成功" in response_login.text:
print("登录成功!")
else:
print("登录失败!")
——5、编译为exe文件
首先先安装pyinstaller库:
pip install pyinstaller
然后到你py文件的目录下cmd,使用以下命令将Python脚本编译为exe文件:
pyinstaller --onefile 名字.py
将会在当前目录下的dist文件夹中生成可执行文件:
将其放入启动项文件夹中,每次开机自动启动
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
——6、注意事项
需要安装不同的库和依赖来运行与编译python代码
可以使用pip
命令来安装这些库。下面是安装所需库的命令:
-
安装
socket
库:pip install socket
-
安装
requests
库:pip install requests
-
安装
BeautifulSoup
库:pip install beautifulsoup4
-
安装
wmi
库:pip install wmi
-
安装
os
库:pip install os
更多待完善…欢迎提出问题