致敬mentohust,路由器使用Socket认证华科校园网
致敬mentohust,路由器使用Socket认证华科校园网
前言:
上一篇文章中,为了解决ESP32华科无线网认证的问题,我成功把网页认证机制用Python+Socket复现。但痛点依然存在,无线网连接数量有限、公用路由可操作性低、有线网口少这些问题只有通过引入路由器才能解决。
我手上有两台洋垃圾网件R6300v2,均刷有梅林固件380.70。折腾它们是为了实现路由器自动校园网认证并提供稳定的网络,为越来越多的联网设备以及后面的项目做准备。
前后两篇文章都是对mentohust开发前辈的致敬,虽然技术层次远不及前辈大佬,只是希望能传递一些精神。本文所用到的一些程序以及华科校园网认证的具体情况在登录华科校园网,我用Socket里有详细描述。不熟悉mentohust软件的朋友可以先浏览文末致敬部分。
目录:
条件分析
有线认证
首先要了解的就是校园网有线认证的可能途径,才好有的放矢。下面是学校网络中心官网截图:
可以看出,在学生区的有线网络仅允许使用认证程序,也就是锐捷认证客户端进行认证。于是在理论准备的时候,我的想法是把mentohust部署到R6300v2上进行锐捷认证,也在网上找到了几篇来自哈工大、浙江理工的同学的文章,甚至联系到一位华科研究生学长,他几个月前将mentohust部署到了小米AC1200路由器上,充分证明了方案的可行性。
在实际使用中我发现,接入有线网络后竟然也会弹出Web认证页面,也就是说虽然在上图中没有标出,但Web认证在学生区是完全可行的。后来,我也通过电话向学校网络中心确认了这种方式将会长期存在。
如上图所示结构,当PC1
连接到路由器时,自动弹出认证网页。认证完成后,会显示有路由器
和PC1
两个设备占用了校园网在线名额。此时其他设备比如PC2
再连接到路由器也可以获得网络连接,并且不会占用校园网名额。
问题在于,如果PC1
断开连接或者主动下线,路由器也随之下线,其他设备自然失去网络连接。所以,进行认证的设备必须时刻在线,而且要具有重连功能以应对突发情况。
路由器平台
如上图,两台R6300v2都已经刷入梅林380.70,右边的一台加装了散热风扇。本次仅用到一台路由器,至于为什么会有两台,那就是另一个有趣的故事了。
R6300v2主要参数如下:
CPU:博通BCM4708 双核800MHz Cortex-A9
内存:256MB
系统:梅林380.70 Linux 2.6
可以说是可玩性非常高了,在网上看到有人为R6300v2编译了Python 2,这样一来之前写的Python版本认证不就可以直接拿来用了吗?但是出于稳定与效率的考虑,并没有继续使用Python。
方案选取
综合有线网络认证与路由器的软硬件情况,思前想后有这么几种方案:
- 额外的设备连接到路由器负责登录,这个设备要保持随时在线,比如ESP32,还有树莓派、香橙派等SBC。要具备网络接口能力。
- 路由器运行mentohust进行锐捷认证,也是大多数教程的做法。
- 将之前的Socket认证程序移植到路由器端,通过Socket进行认证。
不难得出,方案一是曲线救国的下策。对比二和三,方案三由于Socket登录完全自主,会比方案二使用mentohust更加易于调试。但方案三需要把之前Python程序改写成C并为路由器交叉编译,然而这款十年前的32位处理器,资料相当少,交叉编译环境搭建十分费力,具体在后面也会提到。
综上,方案二三我都进行了尝试。部署mentohust之后无法找到认证服务器,我没有在这上面花费太长时间,毕竟mentohust由于认证的复杂程度高所以很难满足稳定这一要求,我就将重点放到方案三上去,也就是:
使用C语言重写Socket认证程序,并为R6300v2平台编译
方案实施
交叉编译工具链与环境
虽然BCM4708本身性能已经与不少单板计算机(树莓派)相差无几,但由于系统缺失了许多构建工具,一般选用上位机交叉编译的方法为其产生可执行程序。交叉编译就需要用到BCM4708这款芯片的工具链以及相应环境,困难在于这款芯片比较古老,需要的工具链和环境在2021年算是比较少见,可考资料寥寥,加之我经验浅薄,在环境搭建上花了不少时间。
我使用的工具链来自:https://github.com/RMerl/am-toolchains,其中的BCM-SDK
版本适合于BCM4708。
拿到工具链,我先是在搭载 Ubuntu 20.04 64位的云服务器上尝试使用未果。由于需要32位的运行库,于是在虚拟机中安装了Ubuntu 12.04 32位版,然而12.04发行版的各种支持都已经结束。只能又换为Ubuntu最后一个支持32位的长期维护版16.04。
上位机系统找好,添加了工具链及其动态链接库后,运行arm-linux-gcc hello_world.c
得到了a.out
,用scp放到路由器上运行,成功打印出了hello world
。证明交叉编译环境搭建成功。
认证程序的C语言实现与调试
上一篇文章登录华科校园网,我用Socket中,咱们用Python控制Socket模拟浏览器进行认证,这一次只需要用C完全复现即可。不得不说,还是Python好用。同样这次的代码也并入了之前的GitHub仓库。
编码的过程并不让人享受,在Windows下编辑,在CentOS虚拟机下编译测试,Ubuntu虚拟机下交叉编译,再传输到目标机。期间使用GitHub进行同步需要使用全局代理加速,测试为了连接校内认证服务器又需要关闭代理。总而言之,折腾。
实际部署
有了登录的可执行文件,只需要在上电开机以及固定时间自动执行即可。
梅林固件虽然是基于Linux,仍有非常多与常用发行版不一样的地方,下面是我的一种部署方法:
使用crontab
定时调用,以及开机自动执行的脚本/jffs/scripts/nat-start
。
#在/jffs/下建立一个文件夹,我起名叫login_by_socket,把编译好的程序(a.out)放到login_by_socket下
#并在login_by_socket下建立一个文本文件crontab_table,内容为:
#*/30 * * * * date >> /jffs/login_by_socket/log;/jffs/login_by_socket/a.out >> /jffs/login_by_socket/log
#意为每隔30分钟自动尝试认证
#再向/jffs/scripts/nat-start添加两句话:
#/jffs/login_by_socket/a.out
#crontab /jffs/login_by_socket/crontab_table
#总结为如下:
chmod a+w /jffs
mkdir /jffs/login_by_socket
#需要手动将a.out放到这里来
echo '*/30 * * * * date >> /jffs/login_by_socket/log;/jffs/login_by_socket/a.out >> /jffs/login_by_socket/log' > /jffs/crontab_table
echo '/jffs/login_by_socket/a.out' >> /jffs/scripts/nat-start
echo 'crontab /jffs/login_by_socket/crontab_table' >> /jffs/scripts/nat-start
#以上这些只需要执行一次,所有的日志可以在/jffs/login_by_socket/log中找到
显然还可以进一步优化,来提高认证的精准度,比如可以主动判断是否连接来尽量减少掉线时间。
致敬mentohust
十多年前,华科的几位前辈开发了一个开源项目,它可以模拟锐捷认证客户端进行上网认证,叫做mentohust。由于其开放源码特性,故可以被编译到各种平台上运行(路由器)。锐捷认证是华科也是很多高校选用的认证方式,因此mentohust也被无数学校的学生进行移植,修改,运用,直到今天。
我探索校园网的认证途径,除了自己的需求以外,也是被前辈这样的精神感召。虽然在技术难度上远不及前辈,亦是想尽一份力,发一点光,正如图片中mentohust化用的华科校训:人到华中大,有甜亦有辣。明德厚学地,求实创新家。
后记
返校后开始着手去做,由于水平一般,实打实地肝了两天才把所有都弄完,又用了一天时间来写这篇文章。其中向学校网络中心咨询时那边的老师问了我的学号,我心里咯噔一下想这怕不是要办我,后来老师叫我不要多想。过程中交叉编译等环境的描述也没能非常详细,毕竟还在用这样古老平台的人的确不多。
代码GitHub地址:https://github.com/HuXioAn/HUST_Wireless_login_by_socket 如果需要文中编译工具链相关具体环境可以公众号直接联系我,发现文中有错误或者其他意见也请一定指出。技术新人,还望各位前辈多指教。
上一篇文章也可以在公众号里找到,来和我聊聊天吧:
欢迎转载!请注明作者与原文地址。
作者:胡小安
原文地址:https://www.cnblogs.com/huxiaoan/p/15235849.html
致敬mentohust,路由器使用Socket认证华科校园网的更多相关文章
- 登录华科校园网,我用Socket
登录华科校园网,我用Socket 导语: 找一个华科学生问一问,学校的网络怎么样?得到的大多数是负面回答.其实不论是从覆盖区域.网络稳定性.还是速度来说,华科做的都还是可以的(24:00断网除外).可 ...
- Xubuntu下Mentohust认证(校园网用户)
对于路由器上网到用户来说,自动分配IP上网。 对于校园网用户,首先下载mentohust_0.3.4-1_i386.deb,双击安装程序 然后在命令窗口中输入sudo -s 密码:user来获得roo ...
- 华为HG255D路由器使用OH3C进行中大校园网认证
之前用的上海贝尔RG100A-AA路由器,被我无情地摧残了,电源按钮挂了,只能换个路由器.由于在校内,使用OP还是比较方便的,网上淘了这款华为HG255D,店主已刷好OP,无线速率300M,想想也是值 ...
- socket认证客户端链接合法性
服务器端: #_*_coding:utf-8_*_ __author__ = 'Linhaifeng' from socket import * import hmac,os secret_key=b ...
- Windows7 + Ubuntu双系统安装过程记录
本文为在已安装Windows7系统的前提下安装Ubuntu Kylin 14.10系统的过程以及期间出现的各种问题的记录. Ubuntu系统下载 Ubuntu Kylin中文官方网站:http://w ...
- 小记——GTMD校园网
前言 学校一年前开通了校园网,然鹅信号未覆盖我们住的公寓,又多忍受了一年的小破宽带(10M带宽,100块300个小时) 上个星期,架设了一年的校园网终于通了,然后我们发现——校园网69元一个月,一个用 ...
- 基于HTTP 协议认证介绍与实现
导言 一直对http 的头认证有兴趣,就是路由器的那种弹出对话框输入账号密码怎么实现一直不明白,最近,翻了一下http 协议,发现这是一个RFC 2617的实现,所以写篇文章介绍一下吧. Http基本 ...
- HttpClient三种不同的服务器认证客户端方案
http://blog.csdn.net/i_lovefish/article/details/9816783 HttpClient三种不同的认证方案: Basic, Digest and NTLM. ...
- 西南大学网络实现路由器WIFI共享方案(一号多用户共享)
背景: 学校更换网页认证,限制多台设备的登录,后台记录发现会将账号封30min禁止登陆,于是想办法冲破这个限制.看到马丁大神的博客知道了学校的检测机制,只需要定时对账号进行认证下线即可实现,不被学校检 ...
随机推荐
- 开源基于docker的任务调度器pipeline,比`quartzs` 更强大的分布式任务调度器
pipeline 分布式任务调度器 目标: 基于docker的布式任务调度器, 比quartzs,xxl-job 更强大的分布式任务调度器. 可以将要执行的任务打包为docker镜像,或者选择已有镜像 ...
- Linux从头学05-系统启动过程中的几个神秘地址,你知道是什么意思吗?
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- C函数调用(2)
1 //函数调用 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <math.h> 6 //根据传入 ...
- Maven 基础标签之版本管理和冲突解决
前言 我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线 maven基础 Maven 是一个项目管理工具,主要用于项目构建,依赖管理, ...
- Python爬虫学习——1.爬虫入门
HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...
- 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...
- Java的几种创建实例方法的性能对比(二)
上一篇里对几种书写方式进行了简单的测试,得出了一些初步的结论.这次简单了解Lambda原理后,对测试做了一些调整,发现得到不一样的结果,而这个调整,明显更契合实际开发的场景. 暂时还没有亲自去验证,主 ...
- Build a Beautiful oh-my-zsh Themes
Selection Criteria double line; provide username, hostname, current directory; provide information o ...
- CAS 5.3服务器搭建
一.本例环境说明 JDK 1.8 CAS 5.3 apache-maven-3.6.0 二.CAS安装步骤 2.1 提前安装好JDK和Maven环境 安装步骤略 2.2 CAS环境搭建 2.2.1 C ...
- VBA·Function的基础使用
阅文时长 | 0.27分钟 字数统计 | 440字符 主要内容 | 1.引言&背景 2.基本结构 3.Demo示例 4.声明与参考资料 『VBA·Function的基础使用』 编写人 | SC ...