【经历杂谈】我也来折腾折腾校园网

前几天突发奇想,想利用上一直被我废弃的有线网络。于是购买了路由器NewWifi 3 With Openwrt,想要搞些事情。虽然在我校使用路由器并不是一件很困难的事情(事实上有一个专门教你配置的群,但是加群需要验证学生卡照片,我觉得太弟弟了),但是除了那个群就没有其他文档了。于是只能自己动手,丰衣足食。整体上而言技术含量不是很大,但是作为一种经历还是可以写出来玩玩的。

第一次折腾

要知道,我校的有线网是需要经过DrCom认证的。这个协议破解起来不是很难。但是因为自己太菜,所以我来到了GitHub上想要找找有没有能用的脚本。
还真找到了,第一个是python写的:DrCOM-Scut,看起来非常简洁。于是SSH连接上路由器,我想最多装个python就可以跑了吧?但是现在路由器没有网络啊!于是我只好采用离线手动安装的方式。由于不知道某个包需要哪些依赖,只好根据opkg的报错到中科大的Openwrt源上手动下载后上传安装。(这里给USTC点个赞,国内只有这个站点的openwrt源可以用)期间过程非常令人自闭,而且耗费耐心。因为最后没有成功,所以具体过程就不放了。但是值得一骂的是,由于脚本里需要使用md5模块(这个模块在完整版本的python中是在hashlib这个包里的),根据micropython文档,他们在uhashlib里实现了同样的md5。但是事实上是,这帮人根本就没有实现这个模块。我在此对在文档上跑火车的作者表示强烈的谴责。
最终我决定放弃使用这个python脚本。

第二次折腾

python不能用那只能用另一个C程序了。但是麻烦就是还得自己编译是不是?想想第一次折腾的过程,于是我决定不在路由器上装gcc了。根据网上其他人的博客,我需要先去拿到Openwrt的交叉编译工具链。我没在USTC的镜像上找到,于是通过谷歌拿到了我的路由器对应架构(mt7621)的工具链。在Ubuntu上的配置比较简单,修改一下环境变量,让它指向编译器对应的目录。值得一提的是,需要设置两个环境变量,一个是STAGING_DIR,另一个是指向bin目录的PATH。之后就可以直接运行mipsel-openwrt-linux-gcc-5.3.0辣!
接着还需要做的最后一步就是稍微改一改它的makefile。由于我不是很懂make的语法,于是只好自己手动把$(CC)全部替换成对应的编译器名。(真丢人
替换后长这个样子:

# UCI option setting
UCI := y
# Linux distro detecting
DISTRO := $(shell cat /etc/*-release | grep -Po "(?<=^ID=).*")
ifeq (($DISTRO),raspbian)
        UCI=N
endif
ifeq (($DISTRO),ubuntu)
        UCI=N
endif
ifneq ($UCI,y)
         CFLAGS += -D NO_UCI
endif

fsn_server: dial.o xprotocol.o dprotocol.o md5.o public.o
    mipsel-openwrt-linux-gcc-5.3.0 $^ -g -o $@ -lpthread

dial.o: dial.c dial.h xprotocol.h public.h md5.h
    mipsel-openwrt-linux-gcc-5.3.0 -c -std=c99  dial.c -o  $@
dprotocol.o: dprotocol.c dprotocol.h public.h
    mipsel-openwrt-linux-gcc-5.3.0 -c -std=c99  dprotocol.c -o  $@
xprotocol.o: xprotocol.c xprotocol.h public.h md5.h
    mipsel-openwrt-linux-gcc-5.3.0 -c xprotocol.c -o $@
md5.o: md5.c md5.h
    mipsel-openwrt-linux-gcc-5.3.0 -c -std=c99 md5.c -o $@
public.o: public.c public.h
    mipsel-openwrt-linux-gcc-5.3.0 -c -std=c99 public.c -o $@
clean:
    rm -rf *.o fsn_server

.PHONY: clean

注意xprotocol的编译不能开C99开关。(毕竟这个代码也是三年前($2016$年)的了,也没人更新……)
然后make就得到了fsn_server的可执行文件。上传到路由器,设置开机启动,配置路由器的WAN口IP,设置账户密码……具体繁琐细节不表。最后记得把无线网和WLAN桥接起来,就可以愉快地玩了。
期间办了几件非常蠢的事。例如手滑把LAN口的接口设置到了无线网上,然后就连接不上路由器了……不过还好OpenWrt重置起来不算是太困难的事,只不过配置需要再来一遍,非常让人自闭。

都快考试了我还在瞎玩什么呢?

12.31 Update

不知道怎么搞得突然路由器就掉线了。重启了路由器后连网关也无法ping通。只好重置。原因未知,待下次复现再看吧(x

后记

还是要多多练习。滚去复习了。

发表评论