小记——GTMD校园网
前言
学校一年前开通了校园网,然鹅信号未覆盖我们住的公寓,又多忍受了一年的小破宽带(10M带宽,100块300个小时)
上个星期,架设了一年的校园网终于通了,然后我们发现——校园网69元一个月,一个用户只能同时登陆两个终端,带宽是无线4M,有线20M(套餐不同带宽不同)。
好的,我不生气。
GTMD
GTMD
GTMD
校园网!!!

嗯,那么接下来,让我们来背刺校园网吧~
(本文最早写于刚架设校园网时,然而由于本人较懒和本着闷声发大财的原则,在大四即将毕业之际放出,造福四方)
本文并非小白手把手教学文章,适合有一定linux基础或有一定钻研能力的童鞋,我相信在金钱与网络面前,人的潜力是无限的(你们觉得上门装配,路由器刷系统¥150,网络配置¥50 有没有可行性?)
郑重声明:本人写此教程为技术分享,它人使用本文提及的技术造成的一切问题,本人不负任何责任
背刺校园网有风险,使用不当可能造成封号等问题,请慎重使用
简介
我们想要实现的目标有如下两个:
1、可以使用路由器连接校园网,达到一人办网全寝可用的目的
2、实现校园网多拨,可在一台路由器上使用多账号登录,带宽叠加
大致的实施流程如下:
1、使用一个工具,模拟锐捷网络协议,实现校园网登录认证
2、对设备进行配置,实现校园网转发(此时能够实现目标1)
3、配置多个虚拟网卡,实现多拨(达成目标2)
前期准备
1、一个能刷openwrt(或其他基于openwrt系统)的路由器(如果手上没有这样的路由器,可以上网上搜一下相关推荐,在这里就不多介绍了)
2、把路由器刷上openwrt(烦请自行搜索,此处省略一万字)
3、浏览器输入192.168.1.1进入控制台,用户名是root,默认密码是admin(自己设置了其他密码就用你设置的那个)

4、查看系统信息,记录一下内核版本(本人路由器使用系统是潘多拉,一个基于openwrt的发行版)

5、自行设置路由器,保证在非校园网环境下可以正常使用(随便在哪拽根能上网的网线,插路由器上设置一下看看有没有wifi能不能上网)。
确认可用之后我们就可以关闭控制台了
认证工具
要背刺校园网,我们首先需要一款认证工具,本校使用的是锐捷认证(802.1X),在github上可以找到两款替代工具,一个是mentohust,还有一个是minieap
从软件工程角度来说,两款工具比较起来明显是minieap设计更加优雅
然而,我懒
所以本文中使用mentohust认证,对minieap感兴趣的同学可以自行学习使用
本节后面的内容需要一定linux基础,如果你实在不会搞,百度mentohust说不定能找到别人编好的二进制文件,注意他们的系统内核版本和你的是否一致(未知来源的二进制文件可能有安全风险,请谨慎使用)
发现有的openwrt版本控制台自带mentohust软件,这样的用户可以跳过本节甚至本教程(想要多拨的童鞋不要使用控制台配置mentohust,参照后面的方法远程连接后配置。只想单账号使用的话可以尝试使用控制台配置,不好使再参考本教程)
我们可以从github上获得mentohust源码。
https://github.com/hyrathb/mentohust
需要注意的是,我们上文给出的mentohust是hyrathb 修改后的版本(添加了新版锐捷v4支持),想要阅读源码了解mentohust工作流程的童鞋可以参考该项目的早期版本
获得源码以后,我们需要将其编译为二进制文件,放到路由器上。
过程大体如下:
1、在本地搭建交叉编译环境
2、根据你实际的系统内核,编译mentohust,得到二进制文件(这里附上一个mentohust交叉编译教程,请根据实际情况参考使用)。
3、使用scp工具(windows下可以用winscp)将二进制文件上传到路由器的/bin/文件夹下(或其他文件夹)
4、运行二进制文件,此处先不必做配置,仅查看程序能否运行,然后关闭程序,进行路由器相关配置
编译成功后交叉编译环境不要删除,后面可能还需要用到
设置网卡
(此处系统版本不同可能有较大差异,如果看不懂,可自行上网寻找配置方法)
锐捷认证使用DHCP,需要设置网卡(入户线接哪个网口就设置哪个)
打开192.168.1.1,找到接口选项(这个地方不同系统版本界面可能不同),选择你要使用的网卡,点“修改”

找到协议选项,选择DHCP,确认保存

锐捷认证
网卡设置完成后,接下来就可以设置mentohust客户端了
随意使用一个ssh工具(没有的话就下个putty,体积小、不用配置),连接ip:192.168.1.1,port:23(不确定是不是所有发行版都是23端口……不是的话就自己查怎么连吧)

用户名密码为192.168.1.1里使用的用户名密码(不同发行版登录信息不同,登陆后和我截图不一样是正常的)

登陆之后,命令行输入mentohust -h获取帮助

按照帮助填写你自己的信息,不同学校需要的参数不同。大多选项有默认值,请按照实际情况修改(可参考WIKI)
HRBUST同学可参考我的方案:
仅配置用户名,密码,网卡名,组播方式和DHCP方式,即-u -p -n -a -d(-a和-d两个选项hrbust均设置为1)
配置完成后,前台运行mentohust,查看是否认证成功,连接路由器WIFI,查看是否可以连接外网(如果认证有问题或wifi连不上请自行更改设置调试)
如果前台运行成功,实际使用时在启动命令中加上-b1选项,让其后台运行,不保留输出
开机运行
如果你成功进行过了上面的全部步骤,那么恭喜你已经实现了目标1,可以使用路由器登录校园网。
最简单的开机运行方式:在/etc/rc.local中添加运行脚本
只需要将你的运行命令写入/etc/rc.local,便可实现开机运行(啥?你不会用VIM???)
注意:
1、/etc/rc.local中使用绝对路径。
2、最好在该命令前加个延迟,防止因路由设备初始化导致认证失败
sleep #延迟180秒(180秒长了点,没事插拔路由器试个合适延时就完事了)
/bin/mentohust -uxxxxx -pxxxxx -nxxxxx -a1 -d1 -b1 #启动命令(路径视实际情况而定)
多拨
请详细阅读完此章节(最好是本文章全文)后再进行操作
如果你有一个正在后台运行的mentohust,再次启动一个mentohust进程,它会提示你MentoHUST已经运行,并给出PID
正常情况下,进程锁可以保证进程的唯一性,防止资源冲突。但是当我们想要使用多拨时,这道保护措施就会成为我们的阻碍。
所以,实现多拨的第一步便是:搞掉进程锁
我们简单看一下它的运行机制:
在源码中找到src/myconfig.c,打开
可以看到在第88行定义了一个checkRunning函数:

查看其实现:

可以发现,这里进程锁的原理是:
在程序运行时,生成一个PID文件,将其加锁。再次有进程开启时,读取锁状态,如果有锁,读取加锁进程PID,打印到控制台并返回
知道了进程锁原理,想要搞掉它便有了两种方案:
1、从源码下手,注释相关代码并重新编译
2、不修改源码,每次运行后手动删除生成的PID文件(小白/懒人福音)
方案一:
想要使用第一种方案,需要注释掉checkRunning内和锁文件相关的代码,然后使用上面的交叉编译环境,重新编译二进制文件,放入路由器
checkRunning里面功能主要有三部分:
一、文件锁相关
二、-k参数相关(关闭重启等操作)
三、开启守护进程相关
在这里我们主要是想去除文件锁的部分,但是软件关闭重启等操作是基于文件锁的,简单去除文件锁会导致-k参数的功能不可用,这里并不想浪费时间修改代码来维护这一功能,所以最后我们直接删除前两部分的代码,只保留下守护进程相关操作
将checkRunning多余代码删除,留下以下代码:
static void checkRunning(int exitFlag, int daemonMode)
{
if (daemonMode) {
printf(_(">> 进入后台运行模式,使用参数-k可退出认证。\n"));
if (daemon(, (daemonMode+)%))
perror(_("!! 后台运行失败"));
else if (daemonMode == ) {
freopen(LOG_FILE, "w", stdout);
setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
freopen(LOG_FILE, "a", stderr);
}
}
return;
}
方案二:
想要使用第二种方案,需要在每次运行mentohust之后,执行以下命令,删掉PID文件(rm -f牛逼!!!)
rm /var/run/mentohust.pid -f
使用两种方法都可以绕过进程锁,开启多个mentohust进程
注意:去除进程锁后,可能会引起一些问题:
1、程序进入后台运行后,你不再可以直接使用-k参数来关闭程序,而是需要手动ps出全部进程并手动kill掉mentohust
2、多个mentohust进程可能造成资源冲突(为了避免此现象,每个mentohust进程使用的网卡不可重复,用户名不可重复,后台运行时不要保留输出)。
可以多开进程以后,实现多拨只需开启多个进程,分别使用不同的账号并绑定不同的网卡即可(哦,对了,你没有多个网卡)
开启多个虚拟网卡
一般来说,入户插到路由器上只有一条线,所以也就只会使用一个网卡。那么,如何才能实现一根线使用多个网卡呢?
这里我们使用了openwrt的macvlan和mwan3两个软件(这两个一般是自带的并且可以直接在控制台配置)
macvlan可以创建多个虚拟网卡链接到eth0,也是就WAN口,然后可以在这些虚拟网卡上创建多个虚拟WAN口,每个虚拟WAN口拨一个账号,这样便可以实现一个单线多拨功能。
mwan3的作用,就是把你路由器的流量,做路由表级别的负载均衡,按照设置的优先级和权重分配到不同的WAN口上,从而起到网速叠加作用。
如果你的openwrt没有这两个软件,可以使用下面的命令安装(安装的都是自带控制台界面的版本)
opkg update
opkg install kmod-macvlan mwan3 luci-app-mwan3
(我叒懒了)配置方法可自行百度 openwrt多拨 或者参考此教程(也是我百度的)
开启多个网卡,配置好负载均衡,并且将需要使用的网卡配置为DHCP后,就可以多拨啦:
1、先测试你能不能用一个账号认证联网(前台操作)
2、ctrl+c停掉上一个进程,记录下来账号和网卡的对应关系。换一个账号和网卡,继续尝试(记录对应关系是因为每个虚拟网卡有自己的MAC地址,如果你换了虚拟网卡,对锐捷来说相当于你使用了一台新机器登录)
3、循环12步骤,直到你测试成功所有你想要使用的账号,注意每个账号绑定的网卡要不同
4、打开多个进程,都使用后台运行
5、进入192.168.1.1控制台,找到“负载均衡”,查看是否所有你使用了的网卡均为绿色(下面的图是盗的,它使用了两个网卡)

6、下载一些东西,让网络运行一段时间,并有一定的流量产生
7、打开控制台的“接口”页面,看使用的接口流量是否相近,如果相近则表示成功(盗的图)

8、如果不成功,有某个使用了的接口几乎没流量,或者负载均衡里面直接红了,查看你的设置,检查启动方式、网卡配置、负载均衡配置、以及所有我提到过的你设置过得东西。。。(慢慢查吧,帮不了你了)
9、如果成功了,恭喜你,将你的启动命令记录下来,设置成开机启动即可
多拨开机运行
开机运行的方法是一样的,写入/etc/rc.local
两种去进程锁方式的启动脚本略有差别(以开3个进程为例)
使用注释重新编译的童鞋如下:
sleep #延时180S
/bin/mentohust -uaaaaa -paaaaa -naaaaa -a1 -d1 -b1 #启动进程1
sleep #延时60S
/bin/mentohust -ubbbbb -pbbbbb -nbbbbb -a1 -d1 -b1 #启动进程2
sleep #延时60S
/bin/mentohust -uccccc -pccccc -nccccc -a1 -d1 -b1 #启动进程3
没有改源码的童鞋如下:
sleep #延时180S
/bin/mentohust -uaaaaa -paaaaa -naaaaa -a1 -d1 -b1 #启动进程1
sleep #延时60S
rm /var/run/mentohust.pid -f #删了pid文件 /bin/mentohust -ubbbbb -pbbbbb -nbbbbb -a1 -d1 -b1 #启动进程2
sleep #延时60S
rm /var/run/mentohust.pid -f #删了pid文件 /bin/mentohust -uccccc -pccccc -nccccc -a1 -d1 -b1 #启动进程3(最后一个进程删不删无所谓)
启动进程和删除pid文件中间的延时时间可以按实际情况更改,但不建议不加延时。
注意不要使用重复网卡!!!
小记——GTMD校园网的更多相关文章
- 第二周leetcode
4/4 这周莫名得忙,一天是做编译,一天是做模式识别作业,(一天刷魔兽皮肤),周末玩了两天,总的来说还是松懈了,大概只做了两天的leetcode,刷了10道题,羞愧羞愧. 决定每次把代码附上在这个总结 ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- 锐捷linux客户端常用命令(主要用来连接校园网或公司局域网)
锐捷访问校园网,.sh脚本文件rjsu*.sh-u 用户名-P 密码-S 参数1保存密码参数0不保存密码 其实: 直接使用md5认证方式输入用户名密码并且配置好ip之后,重新打开网卡即可有一定 ...
- MySql 小记
MySql 简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...
- 配置VMware虚拟机用绕过校园网达到无线上网配置方法
因为平时要用到Vmware这样的工具上虚拟机上网, 但是本人是学生狗,学生狗在学校就要面对大学毒瘤软件--锐捷,而锐捷是不允许有虚拟网卡的存在的,所以上网只能用wifi上.之前试了很久,反正是怎么开都 ...
- Git小记
Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...
- [机器学习] Ubuntu 软件源更新(校园网)以及问题总结
最近在折腾Linux,在校园网下怎么能够很好的获取软件很是让我头疼啊~~~ 总结一下吧!!! 首先是校园网的源地址: 清华大学:https://mirrors.tuna.tsinghua.edu.cn ...
- 广州PostgreSQL用户会技术交流会小记 2015-9-19
广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...
- 东哥读书小记 之 《MacTalk人生元编程》
一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...
随机推荐
- P3399 丝绸之路(线性二维dp)
P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...
- phpStorm更新后配置svn无法使用
phpStorm迎来新的更新,结果之前配置的svn竟然无法使用啦,快捷键一类也没有作用.各种查找解决方案,最后找到解决方案.点击File找到Settings,找到Plugins这个部分,这个部分是管理 ...
- Python多线程、多进程
1.from multiprocessing import Process ; from threading import Thread 2.进程之间的数据传输 ,一般会使用到pipes, qu ...
- 实现一个类似于收趣APP的功能
近日想做一个类似于收趣APP软件的一个功能,将头条.微信等其他App的文章能够通过分享微信好友的方式分享到自己的平台软件中. 分享的方式有三种: 1.通过微信好友的方式,将文章分享给收趣. 2.复制文 ...
- CentOS6.5下简单的MySQL数据库操作
1.登录成功之后退出的话,直接输入quit或者exit即可.
- React Native 环境搭建踩坑
React Native (web Android)环境搭建踩坑(真的是一个艰辛的过程,大概所有坑都被我踩了 官方文档地址 : https://facebook.github.io/react-nat ...
- fcc 响应式框架Bootstrap 练习2
text-primary 属性值使标题直接变成了红色,text-center使标题直接居中 <h2 class="text-primary text-center"> ...
- 移动web——bootstrap响应式轮播图
基本介绍 1.bootstrap有轮播图的模板,我们只需要改动下就行. 2.这里我们将介绍桌面版本和移动版本最后是综合版本 桌面版本 1.这里的图片设置是有窍门的,不再去添加img标签,而是作为a标签 ...
- JS——tab切换
排它思想: 1.先让所有的元素恢复默认值 2.再让选中的元素赋专有的值 3.干掉所有人,剩下我一个 <!DOCTYPE html> <html> <head lang=& ...
- Linux下的文件结构,及对应文件夹的作用
Linux下的文件结构,及对应文件夹的作用 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比 ...