校园网账号防抢占 python脚本编写思路分析

校园网账号防抢占 python脚本编写思路分析

前几天室友跟我说,总是有人在挤他的CDTU账号,感觉特别不爽。所以自己就写了一个专门防抢占校园网的python脚本,当运行这个脚本的时候,别人是无法将你挤下线的。

PS:CDTU是我们校园网的简称

首先,我直接把我写的源码放上来。

# -*- coding: UTF-8 -*-
import requests
import sys
import time
import socket
 
__doc__='该脚本基于python3编写且需要依赖第三方requests库,请打开cmd输入 pip install requests 安装运行即可'
__author__='zgao'
 
print('='*80)
print('运行该脚本之前,请先连接上CDTU且不要认证!然后就再没有人能挤你的网了^*_*^!')
print ('如果你觉得脚本好用的话,欢迎关注我的博客:http://www.zgao.top')
print('='*80+'\n')
 
username =input('请输入你想要登录的账号:')
mima=input('请输入密码(为空则默认123456):')
if len(mima) == 0:
     mima =  '123456'
print('输入的账号为:'+username+' 密码为:'+mima)
 
def str_to_hex(s):
    return ''.join([hex(ord(c)).replace('0x', '') for c in s])          #定义字符串转16进制函数
 
 
def get_host_ip():                          #获取本机内网ip函数
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip
 
host_ip=get_host_ip()
 
string='62336634626235643635656437366236643936393530616332626530303135615f'
url='http://10.110.6.11/eportal/webGateModeV2.do'
info={'method':'login','nasip':'b3f4bb5d65ed76b6d96950ac2be0015a','t':'wireless-v2','username':username,'pwd':mima}
logoutinfo={'method':'logout',
            'userIndex':string+str_to_hex(host_ip)+'5f'+str_to_hex(username)}
login=requests.get(url,params=info,allow_redirects=False)
 
if login.headers['Auth-Result'] == 'success':
    print('已登录 '+ username +' 账号成功!')
else:
    print('登录失败,请检查账号密码并重新运行脚本!\n')
    logout = requests.get(url, params=logoutinfo)
    sys.exit()
 
while True:
    login = requests.get(url, params=info, allow_redirects=False)
    if login.headers['Auth-Result'] == 'success':
        print('已登录 ' + username + ' 账号成功!')
        time.sleep(8)
    logout=requests.get(url,params=logoutinfo)
    if int(logout.headers['Content-Length'] ) == 569:
        print('账号 '+username+' 下线成功!')

这个python脚本是完全根据burpsuite抓包请求和返回的数据来编写的。
先进入上网认证的web界面,以我自己的账号为例,开始抓包。

用burp拦截认证时发送给认证服务器的数据包


然后就是观察认证服务器返回的数据包,因为是否认证成功,都包含在
返回的数据中。为了演示方便,我就把数据包放到了repeater中。

所以我在写脚本的时候也是根据header中的Auth-Result这个字段来
判断是否登录成功的。

不过我认为这其中最重要的还是分析userindex这个字符串!!!
将我的这个16进制的字符串拿去转换为str。


基本的分析思路就是这样了。
这个脚本的利用的原理就是,在登录校园网后的10秒钟之内,是不允许被抢占的。而脚本就是利用这个10秒的间隙,先登录这个上网账号,在上线后的第9秒将账号下线掉,在下线的瞬间又立马上线。进入一个循环的过程,别人想登录你的账号却发现你始终在一个刚上线10秒内的状态,从而达到账号无法被挤下线的目的。
而且这也不影响你的正常上网,可能对打游戏会有一定影响,因为下线只是一瞬间的过程,所以基本不会感觉出网络变化。

这个脚本过程我做了视频演示的,可以在我的qq空间里看到。

zgao

如果有什么技术上的问题,可以加我的qq 1761321396 一起交流。