目录
思路
python发送直接登录请求,避免web登录认证浪费时间
一、抓包
登录校园网时可以利用浏览器自带的开发人员工具,F12打开以后可以看到图中这些功能,现在我们利用到的是网络功能。
点击黑色的小圆点,红色为激活抓包,黑色为关闭抓包。
关闭状态
开启状态
打开某校登录认证系统,并确保网络抓包激活,进行登录。
这时我们可以在 网络 中接收到登录请求所用到的流量包
此时,我们发现一共有三条数据,我们逐条检查,寻找刚刚输入的账号密码
在这一条中就找到了关键词,里面有我们所输入的123 123的账号密码,都是没有加密的,很容易就可以找到。
右键单击他,选择复制为cURL(bash)
curl 'http://10.11.0.10:801/eportal/portal/login?callback=dr1042&login_method=1&user_account=%2C0%2C123&user_password=123&wlan_user_ip=10.90.106.254&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=zh-cn&v=5458&lang=zh' \
-H 'Connection: keep-alive' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' \
-H 'Accept: */*' \
-H 'Referer: http://10.11.0.10/a79.htm' \
-H 'Accept-Language: zh-CN,zh;q=0.9' \
--compressed \
--insecure
复制出来是这样子的
二、一键生成请求
我们需要用到一个黑科技网站:
Convert curl commands to Python
这个网站可以帮助你将上面得到的bash 一键生成python 等语言的请求脚本
将他生成的复制出来,扔到python里面
三、脚本完善
1.引入库
#import requests由于上面生成的脚本里面已经有引入过requests模块了,这里就不用再引入了。
import socket
2.更改数据
代码如下:
socket.gethostbyname(socket.gethostname()))
只需要修改这个位置就可以了
这个位置是你登录的IP地址,因为每次获取的IP是动态的,所以要实时更改登录IP。
这里我们用了socket模块来获取本地IP地址,你也可以用其他模块来代替,可以获取IP就行了。
总结
完整代码:
import requests
import socket
headers = {
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Accept': '*/*',
'Referer': 'http://10.11.0.10/a79.htm',
'Accept-Language': 'zh-CN,zh;q=0.9',
}
params = [
('callback', 'dr6673'),
('login_method', '1'),
('user_account', ',0,123@cmcc'),#账号
('user_password', '123'),#密码
('wlan_user_ip', socket.gethostbyname(socket.gethostname())),
('wlan_user_ipv6', ''),
('wlan_user_mac', '000000000000'),
('wlan_ac_ip', ''),
('wlan_ac_name', ''),
('jsVersion', '4.1.3'),
('terminal_type', '1'),
('lang', 'zh-cn'),
('v', '5841'),
('lang', 'zh'),
]
response = requests.get('http://10.11.0.10:801/eportal/portal/login', params=params, headers=headers, verify=False)
print(response.content.decode())