暗夜协奏者 发表于 2021-3-17 20:27

锐捷校园网用python实现自动登录(需要有自己的账号)

本帖最后由 暗夜协奏者 于 2021-3-17 20:30 编辑

本人大四狗,非计算机专业,学习这个纯属爱好,希望各位大佬指出错误和改进意见前段时间组装了一台服务器跑脚本(腾讯和阿里的服务器学生党买不起),校园网每天早上登录很麻烦,路由器刷不死再改MAC地址也试过,感觉不太行的样子

某山论坛上有许多路由器直接认证的,之前也打算写在路由器上(安装了openwrt,但查资料的时候发现python环境似乎需要外挂U盘安装),所以这个只适用于——使用路由器突破设备数量限制的自动的登录
当然,有好的想法和建议希望大家能提出来,毕竟多多学习其他人的编程思想有利于提高自己的编程水平、
环境:python3.X
需要用到的模块:requests模块和自带的os模块
下面是思路:
1.通过调用CMD,查询当前是否连接上WIFI以及是否是目标网络(顺带Ping了一下百度,用于判断网络是否可用,这里也可以直接用request模块访问一个网址,根据响应的状态码判断是否有网也可)
2.通过fiddle抓包(这软件真心不错,论坛有资料),发现本校的锐捷网络是通过下列方式认证
①先向10.10.10.4发送GET请求,获得一个临时的cookie(不知道干嘛的,后面的Get请求和Post请求会用到)
②接着跳转到认证界面,也是一个GET请求,包含了之前的Cookie和自己是学生(猜测是通过MAC名单识别的)
这一步我也不知道到底要不要,也没有实验,但我怕过不了认证,所以就完全模拟了浏览器登录
③最后跳转到http://123.123.123.123,直接返回了AP的相关信息,我们截取下来,待会POST请求会用到
④最后我们用Post请求将账号,密码(这里加了密,我不清楚加密方式),运营商(也加了密),AP的信息
为了防止被封禁,我还加了头域
最后一并发往验证,结果当然成功了


import requests
import os
#写在前面:本人大四狗,希望学弟学妹们好好学习,好好利用网络资源,而不是利用网络打游戏,刷剧。上大学谈个恋爱,加个社团,考几个证书,好好充实自己

####配置区

user="0000000000000"
password="88888888888888888"

#这里仅仅是判断是否联网,并没有判断网络SSID,也就是无法判断是否是校园网(本人为了突破校园网限制两个设备登录,使用了路由器,不想使用ssid判断是否是校园网)
#这里给出的思路是 netsh WLAN show interfaces语法来完成检测
#以下为解决方案,自行替换已注释掉
'''
#解决方案,这里的fosu是本人校园网SSID,可以自行替换掉
info = str(os.popen('netsh WLAN show interfaces | find "SSID"').readlines())
if "fosu" in info:
    print("已连接至目标网络fosu")
'''
#检查当前WIFI连接状态
info = str(os.popen('ipconfig | find "IPv4 地址"').readlines())
if 'IPv4' in info:
    print("已连接到网络")

else:
    print("未连接至网络,尝试连接至目标网络")
    os.system("netsh wlan set hostednetwork mode=allow ssid='Pogonip' key='As665201314'")

#检测是否有网,如果有,则不执行后续操作,如果没有,则执行校园网连接
putout = str(os.popen('ping baidu.com | find "请求超时"').readlines())
if '请求超时' not in putout:
    print("有网,无需执行")
else:
#接下来是抓包,我用的是fiddle,发现如下特点:

#先通过一个GET请求,提交wlanuserip,wlanacname,ssid=,nasip,snmpagentip,mact,url,apmac,vid,port,nasportid等信息       也就是 post的data包里的query_string

#其中,我了解到锐捷是有检测多用户机制的,也就是突破两个设备限制,但是目前并没有
#这里我猜测,是通过这个get请求获取用户登录信息,对比白名单,没有的话就拉黑,所以,这里可以直接伪造这些信息,特别是SSID和wlanuserip等
#当然了,如果以后推出了客户端,可能还有心跳包,需要抓包模拟心跳(这里我只给一个思路),悄咪咪的提示一下,皖南医学院的校园网登录客户端可用于佛大的校园网登录
#然后就用post请求,发送账号密码等信息(这里参考了一下其他大佬的思路,感觉不错,就借鉴了一下)

#这里是获得一个临时的cookie,也不知道是干嘛的,可能是为了验证是否是通过10.10.10.4这个界面去登陆的,从而过滤掉直接请求吧(仅仅是一个猜测)
#当然了,后续的post请求中包含了这个临时的cookie
#获取JSESSIONID
    geturl1="http://10.10.10.4/"
    session = requests.session()
    session.get(geturl1)
    html_set_cookie = requests.utils.dict_from_cookiejar(session.cookies)
    send_cookie=session.cookies['JSESSIONID']


#这里应该是跳转到认证服务器上,表明自己的学生身份
    geturl2="http://10.10.10.4/eportal/redirectortosuccess.jsp"
    get2_header={
    "EPORTAL_USER_GROUP":"Student",
    "JSESSIONID":send_cookie
            }
    responseRes = requests.get(geturl2,headers = get2_header)


#然后就会被重定向到http://123.123.123.123/,并且获取当前的AP的各种消息(query_string)

    geturl3="http://123.123.123.123/"
    back=requests.get(geturl3)
    query_string = back.text
    st = query_string.find("index.jsp?") + 10
    end = query_string.find("'</script>")
    query_string = query_string

#接下来就是post登录请求了
    userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54"
    posturl="http://10.10.10.4/eportal/InterFace.do?method=login"

    post_header={
    "Host": "10.10.10.4",
    "Connection": "keep-alive",
    "Content-Length": "926",
   "Origin":"10.10.10.4",
    'User-Agent': userAgent,
      "EPORTAL_COOKIE_USERNAME":user,
      "EPORTAL_COOKIE_PASSWORD":password,
      "EPORTAL_COOKIE_SERVER":"%E7%A7%BB%E5%8A%A8",
      "EPORTAL_COOKIE_SERVER_NAME":"%E7%A7%BB%E5%8A%A8",
      "JSESSIONID":send_cookie,
    "EPORTAL_USER_GROUP":"Student"
   }

    post_data={
       "userId": user,
       "password": password,
#####
#####这个service是指哪个运营商,不同学校的加密方式不一样,我这里是移动
       "service": "%E7%A7%BB%E5%8A%A8",
#####
#####
       "queryString": query_string,
       "operatorPwd": "",
       "operatorUserId": "",
       "validcode": "",
       "passwordEncrypt":"true"
   
   }

    responseRes = requests.post(posturl, data = post_data, headers =post_header)
    responseRes.encoding = "utf-8"
    Thankyou = responseRes.json()
    if Thankyou["result"] == "success":
       print("理论上登录成功了")
    else:
       print("没有登录成功,但没有网络,没办法提醒")

#By 暗夜协奏者
写的比较粗糙;www,我发现大佬写代码都是def几个函数,然后直接主函数跑起来,没接收过系统的学习,不太清楚这么做的目的,所以我这里是没有函数的
互勉!



链接:https://pan.baidu.com/s/1FqHmkO-CQU20xNmltptMWQ
提取码:5201
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V4的分享

xiaoshan2016 发表于 2021-3-17 20:38

BH3UKX 发表于 2021-3-17 20:45

锐捷 不是有一款 openwrt的路由插件么mentohust

lihuiop 发表于 2021-3-17 20:48

这个不错哦,很有心得,学习了

jiang1923 发表于 2021-3-17 20:58

很有心得,学习了.

叶小白 发表于 2021-3-17 21:08

晚上断电解决一切花里胡哨的路由器。。而且24小时自动重置MAC

路边的野花 发表于 2021-3-17 21:12

很实用,值得学习借鉴。

lcl0219 发表于 2021-3-17 21:44

楼主请问您这个python在哪学的呀 可以分享一下嘛 最近想学 十分感谢

zhouss2021 发表于 2021-3-17 21:55

大哥我们学校的网站考试,能获取吗

15214082367 发表于 2021-3-17 22:16

66666666666666666666666
页: [1] 2 3 4
查看完整版本: 锐捷校园网用python实现自动登录(需要有自己的账号)