引言
记录我使用 OpenWRT 路由器连接学校网的折腾过程,虽然最后的结果挺 emm?但在这个过程中还是了解到不少东西
起始
通过在浏览器搜索 openwrt 通过深澜认证得到恩山无线论坛帖子回复下的一个开源项目:coffeehat/BIT-srun-login-script,通过项目知道了有支持多平台(包括 openwrt)的 golang 版本,于是开始折腾
这是项目作者的文章:深澜校园网登录的分析与 python 实现 - 北京理工大学版
折腾前
对于 OpenWRT 版本未提供编译后的版本,即 IPK 文件,又因为我水平不行看不懂 README 便请教同学得知为 Linux 的指令,但在实际操作后得知此命令为编译 Linux 内核,便放弃在实体机做开始使用虚拟机搞
参考:Building a custom kernel/zh-cn – Fedora Project Wiki
开始折腾
另朋友发了 configuration – How to fix make error “No rule to make target ‘menuconfig'” when building a kernel for Beagleboard? – Unix & Linux Stack Exchange,于是我便照着此帖子回答尝试
创建虚拟机
因为我使用的 Fedora 自带虚拟机软件盒子,首先尝试装 CentOS8,因为我的镜像文件放到了移动硬盘中,便直接挂载,选择。结果提示创建失败,然后我尝试了 CentOS7,失败,然后 Ubuntun,失败
接连失败,要不是我之前用这软件创建过 Win10 我都快怀疑是不是软件不行了,打开错误日至,果然看不懂,不过我注意到路径有中文,于是把路径改为英文,再次尝试,失败
然后第二天我在想既然是编辑内核,要不使用 kali 吧,于是把 U 盘中 kali 镜像复制到电脑,虽然最后安装失败但成功运行了,难道要把系统放本地才行吗
于是我把 CentOS7 的镜像拷贝到 ~/Documents/
下,安装成功。因想着只是编译 IPK 便只有 root 用户
连接网络
本以为在 Linux 下创建 Linux 虚拟机可以直接共享网络的,于是我直接输入命令 wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.6.tar.xz
,结果就是无法找到 IP 地址,使用命令 ifconfig
发现无 IP
参考文章在虚拟机中设置静态 IP(centos 为例)- yexca|Hiyoung‘Blog 使虚拟机连上网络,不过在最后文件修改只需要将 ONBOOT
后的值改为 yes
然后加俩 DNS 就行
安装 git
连上网后我先装了个 git,使用 yum install git
即可,然后配置姓名与邮箱
git config --global user.name "Name"
git config --global user.email "email@example.com"
传输文件
继续使用 wget
下载 Linux 内核,尝试了三四次,几乎都是在 50% 左右下载失败而且速度很慢
注:使用 wget -c URL
可实现断点续传
然后就是盒子这个软件貌似支持直接拖拽传输,于是我在我的电脑下载好后直接托过去,失败,文件没有被传输过去,考虑到传输后的文件在 ~/Downloads/
下,我使用的是 root 账户,于是我参考 Linux 添加用户和管理员用户 – yexca|Hiyoung‘Blog 创建了一个用户(差点把最后一步删除用户也执行了
使用命令 su username
切换用户,创建文件夹 ~/Downloads/
,再次拖入还是失败
尝试使用盒子的共享功能将电脑的 ~/Public
共享,但我怎么操作也不能在虚拟机里看到
想必这软件只适配了 RHEL 和 Fedora 吧
SSH 传输
然后我想到了通过 SSH 传输(因为我输入 ftp 发现没这个命令,懒得装了
本地开启 SSH 连接,然后通过 scp
命令以使用 SSH 传输文件
scp username@servername:/path/filename ~/Downloads/
首先是确定 IP,在虚拟机中输入命令 ip route
得知 IP 为 10.0.2.2
然后使用 scp 命令传输
解压文件
使用 tar
命令解压文件
tar -xzvf filename.tar.xz
emm,非 gzip 压缩文件,那我不知道怎么解压啊
SSH 传输
还是使用 SSH 传输吧,在 scp
命令加上 -r
即可传输文件夹
开始尝试
按照步骤将解压后的文件放到 /usr/src/
下,把 /boot
下的 config 放到 /usr/src/linux-5.19.6/.config
,结果无论是把配置文件放到.config/
下还是放到.config
都无法运行 make menuconfig
命令
总结
折腾失败,下次再来
不过在我编写此文章时注意到原帖尝试直接在 OpenWRT 运行 Python,有时间尝试一下
再次尝试
然后我咨询了一位过了认证校园网的朋友 (虽然他是普通路由器),他将路由器的 MAC 地址改为自己电脑的,结果插上网线认证页面会自动转发到电脑,然后认证后就有网了,不过是锐捷网页认证
然后考虑到深澜使用的是 Portal 认证也就是 Web 页面认证,既然是 Web 那想必就是使用 HTTP 了,我是否可以通过编辑 HTTP 报文的方式通过认证呢?那么 Linux 有命令可以发送 HTTP 报文吗,我搜了一下,发现 curl
与 wget
命令可以模拟 get
和 post
请求
于是我打开 Fiddler 开始抓包,企图还原验证过程
才怪,我用路由器连接上学校网,电脑插上网线连上路由器,输入认证页面 IP,认证完成,路由器有网了
Linux 命令模拟 Http 的 get 或 post 请求
虽然没用到,不过既然看到了那就记录一下吧
- GET 请求
- curl
## 如果这里的URL指向的是一个文件可以直接下载到本地 curl URL ## 显示全部信息 curl -i URL ## 只显示头部信息 curl -l URL ## 显示get请求全过程解析 curl -v URL
- wget
wget URL
- POST 请求
- curl
## 通过-d参数,把访问的参数放在里面 curl -d "param1=value1¶m2=value2" "URL" curl -d'param1=value1¶m2=value2' -X POST URL curl -d 'param1=value1' -d 'param2=value2' -X POST URL
- wget
## 通过--post-data参数实现 wget --post-data 'user=name&passwd=passwd' URL
再次总结
有时候不能把某件事想的太复杂,往往很简单的事只思考而没实践就否认这种可能性是错误的,这次就是我一开始就把最后再次尝试部分否决才闹了这么一大圈(要不是流量卡的不行我才不会去试
写到这时我想到了两句名言
- 学而不思则罔,思而不学则殆
- 实践得真知
所以有些时候还是应该大胆去尝试,不要因为过多的思考而限制了自己!
参考文章
求助深澜校园网 Portal 认证应该怎么刷固件?- 小米无线路由器以及小米无线相关的设备 - 恩山无线论坛
在虚拟机中设置静态 IP(centos 为例) yexca|Hiyoung‘Blog
Linux 添加用户和管理员用户 – yexca|Hiyoung‘Blog
linux 系统下如何进行用户之间的切换_M 李丽的博客 - CSDN 博客_linux 切换系统
Linux 命令发送 Http 的 get 或 post 请求 (curl 和 wget 两种方法)_cyl937 的博客 - CSDN 博客