前言

  • 相信大家在上大学的时候都有过对校园网的各种问题而烦恼过,本篇文章主要解决校园网需要手动登录的问题。
  • 因为校园网通过手动网页登陆的,而Openwrt不能这样操作,所以我决定写一个自动进行登录的脚本(也是为后面反多设备检测而准备)。

抓包

  • 利用Wireshark抓包工具捕获校园网Web端登录的POST请求信息

  • 选择物理上连接校园网的端口
    245cbec37eb048db875e7c37008b828a.png

  • 然后在确保未连接校园网的情况下(可以先下线)点击到登录端口并输入好账号和密码
    7cc5e2a76ca74dbd97e5336d1342b150.png

  • 然后开启wireshark抓包后立马点击登录,登录成功后立马停止抓包。紧接着找到这么一个报文
    82290ad6548948e990c39d3ee4bd4b60.png

  • 就是很明显的浏览器通过POST将登录信息传递给校园网服务器地报文,我们双击打开
    e2a63af5469b4806a753b4c863aeec01.png

  • 报文信息解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 校园网的账号密码
    “username”: userName
    “pwd”: password

    // 跳过验证码
    “validCodeFlag”: “false

    // 不清楚但很重要
    “nasip”: nasip,
    “wlanuserip”: wlanuserip
  • 值得注意的是以上信息也可以在跳转登录的网址中找到

编写脚本

  • 由于我要在Openwrt上运行,所以我选择编写Shell脚本

  • 新建文件login.sh,然后复制粘贴以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #!/bin/sh

    # 用户名和密码以及登录所需的其他参数
    # 用户名(一般为学号)
    user=***
    # 密码
    pwd=***
    # 以下数据的nasip和wlanuserip需要自行斟酌,在抓包工具中的POST请求data中查阅
    wlanuserip=***
    nasip=***
    # 登录网址(此为我校园网的网址)
    login_url="http://10.0.1.2:9090/zportal/login/do"
    # 最大尝试次数
    max_attempts=5
    attempt=0

    # 构造登录数据
    login_data="username=$user&pwd=$pwd&validCodeFlag=false&wlanuserip=$wlanuserip&nasip=$nasip"

    # 循环检查网络连接,直到连接成功或达到最大尝试次数
    while [ $attempt -lt $max_attempts ]; do
    # 检查外部网络连接是否正常
    if ping -c 1 223.6.6.6 > /dev/null 2>&1; then
    echo "Internet OK"
    break
    else
    # 尝试登录并记录输出到文件
    curl -s -d "$login_data" -o log.txt $login_url

    # 给服务器一些时间来建立连接
    sleep 10
    let attempt++
    fi
    done

    if [ $attempt -ge $max_attempts ]; then
    echo "Failed to connect to the Internet after $max_attempts attempts."
    fi

文件上传

  • 下载WinSCP

  • 连接Openwrt,将编写的Shell脚本上传到/root/目录,并给权限777
    屏幕截图 2024-09-17 183247.png
    屏幕截图 2024-09-17 183622.png

  • 登录Openwrt
    屏幕截图 2024-09-17 230314.png

  • 系统 ——> 计划任务 ——> 添加 ——> 提交
    屏幕截图 2024-09-17 230502.png

    1
    */1 * * * * /root/login.sh
  • 解析

    1
    2
    3
    4
    5
    6
    7
    8
    *     *    *   *   *  command
    分  时  日  月  周  命令
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令

参考文章