python 登录校园网

2021/11/25 python 校园网 脚本 共 2027 字,约 6 分钟

准备工具

  • 连接校园网 KMUST-WEB
  • Fiddle 抓包工具
  • python3
    • python使用到的第三方包requests
      pip install -i http://mirrors.aliyun.com/pypi/simple/ requests  --trusted-host mirrors.aliyun.com
      

总体流程

1、连接校园网, 比如KMUST-WEB, 跳出登录框, 此时会短暂跳出http://www.msftconnecttest.com/redirect, 可以在fiddle中看到这个url的请求和返回值.这个url中的response中包含wlanacnamessid等登陆时需要用到的表单数据.

2、用账号密码登录 用账号密码登录后, fiddle中出现http:/<ip:port>/zportal/login/do的post请求, fiddle中的webForm中有提交的表单信息, raw中有请求头信息, 只需要将 username 和 password修改为自己的用户名密码, 即可模拟表单提交登录.

待处理问题

wlanacnamessid 等字段可能会出现动态刷新的情况, 可以通过http://www.msftconnecttest.com/redirect中的返回值获取

还未实现登出logout功能

实现代码

import requests


def get_url():
    static_url = "http://www.msftconnecttest.com/redirect"
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29"
    }
    static_respose = requests.get(static_url,headers=headers)
    print(static_respose.text)

def login():
    murl = "http://222.197.192.59:9090/zportal/login/do"
    mdata = {
        "qrCodeId":	"请输入编号",
        "username":	"111",
        "pwd": "222",
        "validCode": "验证码",
        "validCodeFlag": "false",
        "serviceId": "",
        "ssid":	"",
        "mac": "",
        "t": "-v2",
        "wlanacname": "",
        "url": "",
        "nasip": "",
        "wlanuserip": ""
    }

    mheaders = {
    "Host": "<ip:port>",
    "Connection": "keep-alive",
    "Content-Length": "464",
    "Accept": "*/*",
    "X-Requested-With": "XMLHttpRequest",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "http://<ip:port>",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    }
    response = requests.post(murl, mdata, headers=mheaders)
    print(response.text)

if __name__ == '__main__':
    get_url()

    # default为默认的账号密码
    # 如果没有-u -p 参数如: python3 ./autoSign.py 则自动登录default 账号密码
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--username', help='input your username', default="111", required=False)
    parser.add_argument('-p', '--password', help='input your password', default="222",required=False)
    args = parser.parse_args()

    login(args.username,args.password)

文档信息

Search

    Table of Contents