Python实现连接dr校园网示例详解

作者:旧巷听雨风然尘 时间:2022-09-20 05:00:45 

背景

在校园里认证上网很麻烦需要web输入账号密码有时还会忘记web地址此时就需要一个人或者程序帮我们实现,这时我想到用python制作这个程序(初学者python代码不规范)

分析

Python实现连接dr校园网示例详解

需要分析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

标签:Python,校园网,连接
0
投稿

猜你喜欢

  • Python模块的制作方法实例分析

    2021-09-06 05:57:26
  • QQ影音感念亲恩皮肤,不只是大按钮这么简单

    2009-01-04 14:16:00
  • 关于淘宝网导航几个让人不解的问题

    2009-03-24 21:08:00
  • python实现的分析并统计nginx日志数据功能示例

    2023-07-30 20:08:15
  • perl哈希hash的常见用法介绍

    2023-08-12 18:46:59
  • php通过隐藏表单控件获取到前两个页面的url

    2023-11-16 04:00:08
  • 十万条Access数据表分页的两个解决方法

    2008-05-23 18:24:00
  • 菜单效果

    2020-08-16 04:45:01
  • 细化解析:MySQL+Webmin轻松创建数据库

    2009-01-14 13:13:00
  • 微软建议的ASP性能优化28条守则(2)

    2008-02-22 17:02:00
  • Oracle中大批量删除数据的方法

    2010-07-21 13:05:00
  • python新式类和经典类的区别实例分析

    2023-07-28 10:01:02
  • MySQL中SQL的单字节注入与宽字节注入

    2009-03-25 14:49:00
  • JavaScript 中为 Date 类实现 DateAdd 方法

    2008-04-03 16:19:00
  • js实现浏览器倒计时跳转页面效果

    2023-07-18 06:49:57
  • ASP+SQLServer2000 经验积累

    2008-02-03 15:16:00
  • 数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)

    2011-09-30 11:26:06
  • javascript在线游戏:找相同的图片

    2008-03-12 12:18:00
  • Pycharm生成可执行文件.exe的实现方法

    2023-07-19 12:09:54
  • 如何建设一个多语言版的ASP网站?

    2009-11-26 20:36:00
  • asp之家 网络编程 m.aspxhome.com