Python实现连接dr校园网示例详解
作者:旧巷听雨风然尘 发布时间:2022-09-20 05:00:45
背景
在校园里认证上网很麻烦需要web输入账号密码有时还会忘记web地址此时就需要一个人或者程序帮我们实现,这时我想到用python制作这个程序(初学者python代码不规范)
分析
需要分析web登录网址的浏览器头发现是get方法这就简单了,再次分析get请求发现有user_account字段,user_password字段还有ip字段mac字段这时我们的思路就来了使用curl命令直接把这个代码放到终端里运行发现是可以的
curl "http://学校认证服务器ip:801/eportal/?c=Portal&a=login&callback=dr1004&login_method=1&user_account=你的账号&user_password=你的密码&wlan_user_ip=终端的ip&wlan_user_ipv6=&wlan_user_mac=终端的mac&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3&v=随机四位数/"
返回信息
dr1004({"result":"1","msg":"\u8ba4\u8bc1\u6210\u529f"})
使用unicode在线转中文发现
dr1004({result: "1", msg: "认证成功"})
理论成功
实现
经过分析我们需要以下信息
1.上网账号
2.账号密码
3.设备ip
4.设备mac
5.4位随机数
获取ip(wlan连接)
网上方法很多但都获取不到正确的索性用最笨的方法获取调用 ipconfig /all 方法
import random
import os
import requests
from urllib import parse
mac_ip_hostname=os.popen("ipconfig /all")
macmore=mac_ip_hostname.read()
此时获取的是一大堆网络信息并不是我们想要的所以要用到find方法找到特殊字段的位置
macw=macmore.find("无线局域网适配器 WLAN")
找到了不代表能用现在需要把这个字符串进行截取从找到的位置到之后的400个字符的数据都截取下来
再赋值给别的函数
macm = ''
i=macw
y=macw+400
while i< y:
macm += macmore[i]
i =i+1
这时定义一个函数来接收400个字符数据,现在的问题是我们还是不能直接使用还要进行截取我们需要的数据,我们还需要find找到 物理地址 这个字段的数据,如法炮制我们进行3次查找就找到了所需要的数据(如果是lan 网线的话,方法一样)
macxw=macm.find("物理地址")
#print(macxw)
x=macxw
y=macxw+50
macxm=''
while x<y:
macxm +=macm[x]
x =x+1
maci=macxm.find("-")
m1=maci-2
m2=maci-1
m3=maci+1
m4=maci+2
m5=maci+4
m6=maci+5
m7=maci+7
m8=maci+8
m9=maci+10
m10=maci+11
m11=maci+13
m12=maci+14
mac=(macxm[m1]+macxm[m2]+macxm[m3]+macxm[m4]+macxm[m5]+macxm[m6]+macxm[m7]+macxm[m8]+macxm[m9]+macxm[m10]+macxm[m11]+macxm[m12])
我们获取到了mac 这时我们还缺少ip数据,像ip这种数据不是固定字符所以不能用上述一个方法来取值还需要rindex方法,先用上面的方法进行截取数据到IP的数据时我们先将字符串里的数字先遍历出来找到第一个数字的位置,和最后一个数字的位置然后我们在取值就完美解决ip地址字符不确定的问题
ipcxw=macm.find("IPv4 地址")
o=ipcxw+10
p=ipcxw+70
ipc=''
while o<p:
ipc +=macm[o]
o =o+1
#print(ipc)
op=0
ipsd=''
is_op='0123456789'
isstart = False #定义是否是数字开始的标记变量
for a in ipc: #将数字循环遍历
if a in is_op: #判断取出来的数字是否是数字
if isstart==True:
ipsd = ipsd+a
else:
ipsd = ipsd+a
isstart=True
ipzh=(ipsd[len(ipsd)-1])
ipks=(ipsd[0])
ipce=ipc.find(ipks)
ipcea=ipc.rindex(ipzh)
j=ipce
l=ipcea+1
ip = ''
while j<l:
ip +=ipc[j]
j =j+1
我们还需要随机四位数
c=''
for i in range(4):
ch = chr(random.randrange(ord('0'), ord('9') + 1))
c += ch
现在我们要用到requests库中的get方法来进行与服务器交流
url="http://学校认证服务器ip:801/eportal/?c=Portal&a=login&callback=dr1004&login_method=1&user_account="+user+"&user_password="+password+"&wlan_user_ip="+ip+"&wlan_user_ipv6=&wlan_user_mac="+mac+"&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3&v="+c+"" (user=你的用户,password=你的账户密码)
qinqiu=requests.get(url)
现在我们需要服务器给我们返回信息
print(str(qinqiu.content))
来源:https://blog.csdn.net/v225m/article/details/121592005


猜你喜欢
- 需求:给定一个dataframe和一个list,list中存放的是dataframe中某一列的元素,删除dataframe中与list元素重
- 偶然发现linux系统附带的一个数独游戏,打开玩了几把。无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了。于是就打算借助计算机的强
- 最近在做的一个项目中需要使用到HTML5中引入的WebSocket技术,本来以为应该很容易就能搞定,谁知道在真正上手开发了以后才发现有很多麻
- go简单代码反汇编用简单的代码用以分析go的调用约定及多返回值的返回方式。package mainfunc vals(c, d int) (
- 定义函数:CREATE FUNCTION [dbo].[GetAge] ( @BirthDay nvarchar(2
- <? //作者:www.tongqiong.com //header("content-type:text/html; ch
- 使用神经网络进行样本训练,要实现随机梯度下降算法。这里我根据麦子学院彭亮老师的讲解,总结如下,(神经网络的结构在另一篇博客中已经定义):de
- 想要asp能连接mysql数据库需要安装MySQL ODBC 3.51 驱动 http://www.jb51.net/softs/19910
- 从低版本迁移到MySQL 8后,可能由于字符集问题出现 Illegal mix of collations (utf8mb4_general
- 原文链接:Histogram of Oriented Gradients(文中的图片均来自翻译原文)什么是特征描述子特征描述子一张图片或者一
- 安装golang使用homebrew安装golang。homebrew是MacOS 平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索
- 之前都是直接拿sax,或dom等库去解析xml文件为Python的数据类型再去操作,比较繁琐,如今在写Django网站ajax操作时json
- 前言:在生活中工作中,我们经常使用Excel用于储存数据,Tableau等BI程序处理数据并进行可视化。我们也经常使用R、Python编程进
- 请问论坛的树状记录表是怎么展开的?如何做?论坛的这种展开技术一般采用两种方法实现,一种是采用递归的方法,优点是逻辑简单,编程简单,缺点是速度
- Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。1.PHP加密扩展库Mcrypt安装在标准的PHP安装过程中并没
- php mysql PDO 查询操作的实例详解<?php $dbh = new PDO('mysql:host=localho
- 问题:python spyder先出现dos窗口,然后后面就什么都没有了。解决方法:C:\用户\Administrator\.spyder3
- 刚开始使用django,在创建第一个app时被提示不知道命令runserver,百度得出是环境变量的问题。1、配置python变量环境,C:
- 本文实例讲述了python实现Oracle查询分组的方法。分享给大家供大家参考,具体如下:1.分组的概念:关键字:group by子句结论:
- python是一款简单易用的编程语言,特别是其第三方库,能够方便我们快速进入工作,但其第三方库的安装困扰很多人.现在安装python时,已经