type
status
date
slug
summary
tags
category
icon
password
comment_flag
SLUGS
某日下午,好友请客吃烧烤,吃到肚撑,我便早早“下班”。回宿舍空座无以娱乐,便想到答应“前任”舍友修理路由器的事儿,遂修之,遇麻烦事儿,折折腾腾,完事儿便述之以文,供“后人”阅之。

前言

“上古”时期(具体指哪段时间,懒,没去考证),电脑登录校园网通过drcom认证后是没法分享热点的,会被检测出来。即使路由器连接校园网,似乎drcom认证也会出现问题。具体情况如何,我懒得“考古”了……
那时,已有大佬研究出解决方案:路由器刷过固件后,通过python脚本来认证drcom,然后进行wifi网络共享。
看到大佬们的成功案例后,我也入手了路由器,然后刷上了固件。但我发现很蛋疼的一点是,很多固件不自带Python解释器,所以网上找的脚本没法用啊。而且安装python解释器,针对不同固件,似乎不是简单的事儿。至少对当时的我这种渣渣来说,not easy。
后来,经过不断查阅资料,不知不觉中“柳暗花明”,遇到了大神发布的教程:
这是不需要安装python解释器的一个方法,单纯用c语言写的一个登陆程序,对不同固件都比较友好。为什么是“比较”呢,这又是后世产生的哭笑不得的“孽”了。
 
首先简述下,上面这个教程所提到路由器登录drcom的方式,由于我所在区域是以D版客户端认证的,所以就仅以D版为例。一切的前提是,路由器刷了第三方固件。

校园网C语言版drcom认证

首先去这里下载相关二进制包以及配置文件(点击下载),然后解压,着重将dogcom(这是二进制包)drcom.conf(这是配置文件,建议修改账户、密码后上传,)上传到路由器的/etc/storage(这个目录在重启后不会被清空)下。
我且假设你是“终端”高手,那么接下来的操作很简单:

注意:你大概率和我不同学校,请参照上面的教程进行抓包生成drcom.conf。(展开即是原文中的抓包教程)
1、抓包:在电脑上安装 Wireshark 抓包软件(自行百度下载),电脑用网线直接连接学校网口,不要通过路由器。打开客户端,输入账户和密码,先不要登录,打开Wireshark,点击以太网,再点击Start,然后登录客户端,短暂时间(10~30s)后点击左上角红色按钮,点击File→Save As保存为dr.pcapng
notion image
notion image
上面两图来自路由器Dr.COM通用教程 (shimo.im),原教程中的图加载不出来。
 
2、打开在线配置生成器https://drcoms.github.io/drcom-generic/,打开后页面左上角先选择对应的版本,然后点击Open选择你抓包生成的dr.pcapng文件,等一会,页面下的空白部分会自动出现配置内容(如果一直不显示请检测客户端版本是否选择正确或者重新抓包),然后点击Save下载配置文件drcom.conf,保存备用。p版抓包到此结束,d版还需要用用文本编辑器打开配置文件并在password=’’的引号里面输入你的密码并保存。
D版,P版区分方法:如下图,看到 D 了吗?
notion image

路由器认证drcom就这么简单,没想到吧😀!然而最让人想不到的是,有些固件,在执行/etc/storage/dogcom -m dhcp -c /etc/storage/drcom.conf -d -e时,直接报错can't load library 'libgcc_s.so.1'。 昔我往矣,遇到这个错后,重刷了几次不同的固件,真是备受折磨。
如今帮我舍友路由器认证时,也遇到了这个错。但想到毕竟是“前任”,没必要帮他也辛辛苦苦重刷吧,风险还大,搞坏路由器了,我可赔不起。

can't load library 'libgcc_s.so.1'

原因分析

我猜测该问题的原因,显而易见啊,如题所示,就是缺少gcc库。但是为什么有的固件不缺,有的就缺呢?我给出了一个猜测,路由器是资源相对有限的设备,很多大佬分享的固件,是自己经过精简后的固件,那么缺一点不常用的东西很正常咯。
以前是固件不自带python,需要自己装python。现在固件不自带gcc相关库,难道我要去装gcc 🤔?我真还不想作这种“孽”。毕竟是“前任”,虽然承诺了奶茶。
突然想到:缺这个库,那我就拷过去呗。于是乎,我从我自己路由器上拷贝一份,在舍友路由器上如是操作:
注:拷贝操作比较灵活,“因地制宜”。
然而,mv命令报错:Read-only file system。这又是个麻烦事儿了,本来担心的是这个程序会不会缺其他库呢。现在好了,直接拷贝不了。

屡次尝试

然后,我用百度一顿乱搜,尝试了Linux下出现Read-only file system解决办法_readonly file system_ʚ兔子的先森ɞ的博客-CSDN博客里提到的mount -o rw,remount /,失败了。
接下来看到了mount --bind 的妙用 - 乐在其中 - IT博客 (cnitblog.com)里的方法,我便仿照:
居然不报错了!
  • 好消息有二:(1)只缺libgcc_s.so.1!(2)我学到了一种linux敏感文件被修改的测试方法。要是早会这种方式,我可能会少重装很多次(系统或软件包)。
  • 坏消息是:重启后,临时挂载点内容会被清空,系统恢复原来的挂载点。问题并没有得到解决。
然而,并非如此。

我又想到了一个办法,看看系统检索的库路径有哪些:
返回的值是/lib:/opt/lib,那么我尝试把libgcc_s.so.1拷贝到/opt/lib。确实可行,但路由器重启后,/opt/lib被清空。另外,有的固件$LD_LIBRARY_PATH返回值是空,拷贝到/opt/lib也是无效的做法。真是作孽啊。

最终解决

就在瞪着显示器时,突发奇想,想到了以前常用的,临时指定环境变量的办法。从而想到了执行如下命令:
成功了!
好消息:(1)libgcc_s.so.1/etc/storage目录不会被清除;(2)LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/etc/storage只是临时修改并加上了系统默认的库目录,且不会影响系统LD_LIBRARY_PATH本来的值。
 

写在最后

不太会写博客,经常只是把它当做技术备忘录。但偶尔没事做的时候,随便写一写,挺有意思的。特别是“闲敲棋子落灯花”时,来消遣时光。
 
VS Code安装插件一直installing的解决办法[论文粗读][CVPR22workshop]ViTOL: Vision transformer for weakly supervised object localization
Loading...