一次用路由器自动登录校园网的折腾纪实

This article was last updated days ago, some of the information may be outdated.

前言

暑假通过一番朋友交易住进了同学的宿舍,闲聊之中他跟我抱怨校园网的事儿,之前看到 GitHub 上有他们学校的 Python 版登录程序,就顺手帮他整上了。

配置思路

网络环境

他们学校的网络还算不错吧,24h 不断网,只是登录时间达到了 3600min 后需要手动注销重新登录,价格也比我校的便宜很多(🍋)

校园网的登录是在内网服务器上,使用 web 认证登录

现有设备

老旧的 Netgear WNDR4300 路由器一台 系统为 OpenWrt 17.01

配置过程

先照常更新一下软件包

opkg update && opkg upgrade

安装 Python 和 pip

opkg install python3 python3-pip

安装依赖库

pip3 install requests
pip3 install bs4
pip3 install html5lib

总之就是缺什么装什么(

下载程序

我是在 win 机器上测试能连上之后直接用 U 盘拷过去的,也可以直接从 GitHub 下载

curl -OL https://github.com/bfdyanshe/onekeySchoolNetwork/raw/master/byRequsts.py

运行测试

直接 python3 byRequsts.py ,不出意外的报错了

/bin/sh: ipconfig: not found
Traceback (most recent call last):
  File "1.py", line 179, in <module>
    ACLogout(info[0], info[1], info[2])
  File "1.py", line 138, in ACLogout
    ip = getIpandMac()[0]
  File "1.py", line 129, in getIpandMac
    ip = re.findall(r"d+\.d+\.\d+.\d+", ipmac)[0]
IndexError: list index out of range

看了下报错这段函数的源码

...

def getIpandMac():                                                               
    ipmac = os.popen("ipconfig /all").read()                                     
    ip = re.findall(r"d+\.d+\.\d+.\d+", ipmac)[0]                                
    mac =  re.findall(r"\w+-\w+-\w+-\w+-+\w+-\w+", ipmac)[0]                     
    dmac = ""                                                                    
    for a in mac.split("-"):                                                                                                         
        dmac += a                                                                                                                    
    return (ip, dmac,)  

...

发现是登录程序的作者写程序的时候并没有考虑到 Linux 系统下的使用,用的 ipconfig 命令获取本机 ip ,所以说我只要把它换成 ifconfig 就行了…吧?

答案是否定的,ifconfig 的输出格式和 ipconfig 的有区别,会导致这个函数读不到本机 ip ,由于 ip 是内网地址,且为 10.32. 开头 ,所以我直接把用于匹配的正则表达式改为 10\.32\.\d+\.\d+ 就能匹配到正确的 ip 了。

至于 mac 地址嘛,我的解决办法是直接把路由器的 mac 地址作为字符串写进去了,毕竟路由器的 mac 又不会随便变(

修改后

def getIpandMac():                                                               
    ipmac = os.popen("ifconfig").read()                                     
    ip = re.findall(r"10\.32\.\d+.\d+", ipmac)[0]                                
    mac =  "YOUR_MAC_ADDRESS"                   
    dmac = ""                                                                    
    for a in mac.split("-"):                                                                                                         
        dmac += a                                                                                                                    
    return (ip, dmac,) 

再运行一遍,能跑了,后台查看在线时间也确实被重置了

配置定时任务

在 Openwrt 的后台管理页找到 系统 - 定时任务

加入如下两行,实现每天凌晨和下午两点重连

0 14 * * * cd /root && python3 byRequsts.py
0 2 * * * cd /root && python3 byRequsts.py

(记得在最后一行加上回车)

一个“小”插曲

你可能也注意到了,前面我写的文件名一直是 byRequsts.py 而不是 byRequests.py

那是因为…原作者的 typo 啊淦

由于在 Terminal 内测试时一直用自动补全,没有打完整的文件名,也就没有发现这个 typo

结果后来设置定时任务的时候,在校园网登录页查看在线时间发现并没有重新登录,找了我好半天才发现是这个原因🤬

改名:

mv byRequsts.py byRequests.py

嗯 又水了一篇(

Author: ZnS

Permalink: https://zns.moe/articles/login-to-school-network-using-a-router/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

Comments

Unable to load Disqus, please make sure your network can access.