小记——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人生元编程》
一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...
随机推荐
- 57.部门职位管理 ExtJs 展示
1.jobInfo.jsp <%@ page language="java" pageEncoding="UTF-8"%> <script t ...
- E20171011-hm
Rendering engine 渲染引擎; 引擎; 绘图引擎; interactive adj. 互动的; 互相作用的,相互影响的; [计] 交互式的; defer vt. 使推迟; 使延 ...
- 2243: [SDOI2011]染色(树链剖分+线段树)
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 8400 Solved: 3150[Submit][Status ...
- poj3264Balanced Lineup(倍增ST表)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 52328 Accepted: 24551 ...
- thinkphp自带的验证码出现的问题
thinkphp3.1.2版本中今天做验证码时出现了一个小问题. 在后台我引入过了一次验证也就是 import('ORG.Util.Image'); Image::buildImageVerify() ...
- UNIX环境高级编程--9. 进程控制
进程关系 当子进程终止时,父进程得到通知并能取得子进程的退出状态. 终端登录: 早起UNIX系统通过哑终端登录,本地的终端 or 远程的终端 .主机上链接的终端设备是固定的,所以同时登录数 ...
- 涨知识 --- VI
1.空类所占空间大小 空类所占空间为1,单一继承的空类空间也为1,多继承的空类空间还是1.但是虚继承涉及虚表(虚指针),所以sizeof(C)的大小为4. 2.内联函数与宏定义 Ans:内联函数和普通 ...
- Elasticsearch之CURL命令的DSL查询
它是Domain Specific Language领域特定语言. https://www.elastic.co/guide/en/elasticsearch/reference/current/in ...
- scala函数用法
直接上代码. package com.test.scala.test object Function { def main(args: Array[String]): Unit = { println ...
- Emoji过滤
private static boolean isNotEmojiCharacter(char codePoint) { return (codePoint == 0x0) || (codePoint ...