请不要使用本文来牟利。
包括但不限于购买可刷机路由器后,将脚本预先置入系统并再次加价卖给同学的行为。
这种行为在我看来是可耻的,不要脸的。
如果您做了,祝您:NMSL。
仅在我校校园网下测试通过,不代表兼容所有使用 Dr.COM 网页认证的学校,请充分发挥主观能动性,按照实际情况修改相关内容。
说到 Dr.COM……如果你是客户端认证,其实 Github 上已经有挺多方案了。但是我校是网页认证(其实也好……网页认证我觉得更容易模拟登录)
Dr.COM 网页认证的原理就是 POST 登录信息而已……原理上,就是用 curl 发一个 POST。
评论前请注意
评论区的本意是用于探讨问题,在你尝试解决的过程中出现了问题且无法解决时,可以发在评论区大家一起探讨,但并不意味着你能要求别人「手把手教你」。
折腾东西本来就是需要一定的技术门槛,如果你对于较为基础的知识一窍不通,请关闭此页面。
如果你仅仅是准备靠着「我的情况也是一样想请教一下大佬curl怎么填」、「大佬我的也是get命令,请问怎么解决」这种心态来获取帮助,请询问学校老师。
我能(想)告诉你的都已经写在文章里了。
评论基础
提问的智慧 ryanhanwu/How-To-Ask-Questions-The-Smart-Way
别像弱智一样提问 tangx/Stop-Ask-Questions-The-Stupid-Ways
不会被审核通过的评论
符合以下情况的评论不仅不会被审核通过,还可能会被判定为垃圾评论并封禁。
- 什么都不懂上来就问到底要怎么做的。
- 带着 curl 评论的。不仅占据版面还浪费时间,因为各个学校都不相同,我也没办法判断你的到底应该怎么填充到底怎么可用你的登录状态到底是怎样判断的我什么都不知道。
- 没有办法解决问题,另外留下联系方式希望我能与你联系的。
示例
会被通过的评论:
博主您好 问一下我在 drcom 网页验证下打开 XX 会直接网络掉线半小时是什么原理检测的?
楼主这是什么情况呀 ./drcom_cron.sh: line 2: gger: not found
绝对不会被通过甚至可能被封禁的评论:
我们是get,有什么区别?
大佬,校园网那个get请求怎么弄?
给大伙看个典型:
获取 curl
这里直接贴一个我校(湖南科技大学, 其中运营商一项,电信是 telecom
,移动是cmcc
,联通是unicom
,纯校园网出口没有测试 )可用的 curl,你也可以通过抓包来获得(不过我这里自己抓包总是会抓到 10. 开头的内网IP,加上吧,容易因为被别人分配到了我用不了,不加吧,又打不开……)
curl -X POST "http://192.168.254.226:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=192.168.254.226&iTermType=1&wlanacip=null&wlanacname=null&mac=00-00-00-00-00-00&enAdvert=0&queryACIP=0&loginMethod=1" -H "Origin: http://192.168.254.226" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" -H "Upgrade-Insecure-Requests: 1" -H "Content-Type: application/x-www-form-urlencoded" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "DNT: 1" -H "Referer: http://192.168.254.226/a70.htm?wlanacip=null&wlanacname=null&vlanid=0&ssid=null&areaID=null&mac=00-00-00-00-00-00" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh;q=0.9" -b "vlan=0; ssid=null; areaID=null; program=2018050401-hnkj; save_DDDDD=用户名; save_upass=密码; ISP_select=@运营商; md5_login2=|,0,用户名@运营商|密码;" --data "DDDDD=,0,用户名@telecom&upass=密码&R1=0&R2=0&R3=0&R6=0¶=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=" --tlsv1.3 -o Sxinfo.txt
其中,有关内容请自行修改。
请注意,此 curl 并不一定适用于你的学校(按理说挺多地方不行的,需要你自己通过对登陆窗的源码进行分析修改),尤其是 --data
的内容,请根据实际情况自行修改。
修改项
获取IP和端口
192.168.254.226
为我校校园网登陆窗页面 IP,801
为端口。
如果你不确定自己学校的端口,可以自己使用 Chrome DevTools 查看。
在登录页面按下 F12
,在 Network
处找一找应该就能看到。
获取「--data」
对于我校学生,curl 中不需要过多变动,这个小节可以跳过。
适用于我校:用户名
和密码
即为上网登录窗的账号密码,运营商中,电信是telecom
,移动是cmcc
,联通是unicom
,纯校园网出口没有测试,你知道的话可以在评论中告诉我。
对于其他学校的学生,--data
后的内容可以通过 Chrome 开发者工具查看,同样是在登录界面按下F12,按照图中1和2选中后再登录。
在左侧中寻找右侧为 Request Method: POST
的项,如果找到了,那就是上图我们需要的,按照上图3,4,5进行操作,获得暂时的 curl。
为什么是暂时的?因为这里得到的 curl 应该是包含我上面说到的 10. 的内网 IP 的,带上它你也许不能正常登录。
将剪贴板的内容取出,找到--data
,将其后紧跟着的单引号后面的内容,替换到开头给予的 curl 里。
在此,你应该得到了理论能用且永久的 curl。
包票打不起,情况太多了,如果你成功在你校校园网中试验成功,也许可以在评论区里告诉我。
如果你只是需要在电脑启动的时候自动登录,你可以直接将 curl 拿去用了,下面的内容可以不看。
如果你是个gaowan高玩,希望借助路由器玩儿,往下看吧
Padavan 路由器设置
当然,这并不局限于 Padavan,其他允许自定义 crontab 的固件也可以,笔者使用 Padavan,因此以它为例。
sh 文件内容
首先,找个编辑器(你真要记事本也没问题,不过不推荐,最好是 Sublime Text 3 之类的),在其中粘贴以下内容:
(请注意,此代码不包含「Telegram Bot 定时发送连接情况」的部分,因为并不能确定你的路由器是否已经配置了可以正常访问 Telegram 服务的相关设置,如果你只需要登陆而不需要刻意提醒,你可以直接使用下面的代码。如果你需要 Telegram Bot 的提醒,忽略下面的 sh 内容,往下看还有新的。)
#!/bin/bash
logger "【Dr.COM网页认证】开始定时检测"
curl http://192.168.254.226 > drcom.html #①
check_status=`grep "Dr.COMWebLoginID_0.htm" drcom.html` #②
if [[ $check_status != "" ]]
then
#尚未登录
logger "【Dr.COM网页认证】上网登录窗尚未登录"
##此处为你已修改完毕的curl##③
logger "【Dr.COM网页认证】上网登录窗未登录,现已登录"
else
#已经登录
logger "【Dr.COM网页认证】上网登录窗之前已登录"
fi
logger "【Dr.COM网页认证】结束定时检测"
修改相关内容:
- ①处:请修改为你上网登陆窗的IP,此处不需要端口
- ②处:请打开上网登陆窗,查看网页源码,在其中找到特异性内容,即登录状态下上网登陆窗有的,而未登录时却没有的代码。我的代码中,
Dr.COMWebLoginID_0.htm
是登陆窗未登录时拥有的代码,原理即通过 curl 将登陆窗内容存至drcom.html
文件,分析文件文本,如果包含有Dr.COMWebLoginID_0.htm
,就代表此时是「未登录」状态,需要执行登录。 - ③处:你最终修改获得的 curl 文本
不需要保存,我们只是找个地方好好把内容准备好而已。
上传至路由器存储空间
接着,你需要使用 ssh 连接你的路由器以通过 vi 编辑 sh 脚本。如果你已经是 Linux 系统的话,不需要这多余的操作,直接将本地编辑好的 sh 文件传给路由器即可。这里主要说 Windows 下。
为什么 Windows 相对特殊?因为 Win 和 Linux 的空格,回车不同,在某些情况下如果是包含着 Win 空格的 sh 文件,在 Linux 下可能无法执行,但通过 vi 编辑时粘贴进去的内容却没问题。
借助 ssh 工具,例如 Xshell
。
连接的主机为路由器内网 IP,与你登录后台面板是同个 IP。
端口一般为默认,不需要修改,账号密码与后台登录一样。
如果你是 hiboy 版本的 Padavan,那么主机为
192.168.123.1
,账号密码默认均为admin
,其他版本请根据作者介绍自行探索。
在 ssh 工具中成功连接上后,执行以下指令:
cd /etc/storage
vi drcom_cron.sh
vi
后的内容可以随你定义,毕竟什么名字随你。接着按下{i}
会进入编辑模式。
右键,如果是Xshell
的话会有粘贴的选项,如果是putty
的话会直接粘贴,无论如何,根据你使用的软件把内容粘贴进去即可。
按下 ESC 退出编辑模式,直接键盘输入{:wq}
后按下回车保存(注意,此处有一个英文冒号)
再执行以下指令用于获得执行权限:
chmod +x drcom_cron.sh
现在,你的路由器数据文件中应该包含我们需要执行的东西了。
你可以试试退出上网登陆窗登录,然后执行指令,看看是否处于登录状态了。
./drcom_cron.sh
如果没有,有可能是哪个步骤出错了,也有可能你的学校校园网不支持此方法。
无论如何,如果你成功登录了,接着看吧。
使用计划任务保证处于登录状态
进入路由器后后台面板,相关后台IP和账号密码请根据 Padavan 作者的介绍填写(如果你是 hiboy 版本的 Padavan,那么后台地址为 192.168.123.1
,账号密码默认均为admin
)
将 sh 文件保存防止重启丢失
进入:高级设置 → 系统管理 → 恢复/导出/上传设置 → 路由器内部存储[脚本文件] (/etc/storage) → 点击「保存 /etc/storage/ 内容到闪存」的「提交」按钮。
虽然不知道这步是否必要,但是用了总没错。
路由器重启后执行登录操作
进入:高级设置 → 自定义设置 → 脚本 → (以下两处)
「在路由器启动后执行」,「在 WAN 上行/下行启动后执行」在代码末尾添加:
/etc/storage/drcom_cron.sh
保存。
添加计划任务
进入:高级设置 → 系统管理 → 服务 → 其他服务 → 保持「Cron守护程序 (计划任务)」处于开启状态,然后在「计划任务 (Crontab)」中输入:
#每周一到周五的每天6点到24点的每10分钟,执行一次检测登录指令
*/10 6-23 * * 1-5 /etc/storage/drcom_cron.sh
#每周一到周五的每天6点整,重启路由器
0 6 * * 1-5 reboot & #删除开头的#启动命令
当然,如果你的学校并非有 0 点断网之类的,你可以直接去除重启的 cron 任务指令。
请根据自己学校的断网来网情况,结合 crontab.guru 这个网站编辑属于你自己的 cron 指令。
保存。
现在,按理说一切都成功了,你可以明天起床后连接此路由器来测试它是否准确在6点重启并自动登录。
LuCI 设置
其实没什么区别, 简单提一提吧,其实大部分内容可以直接参照 Padavan 版的文本。
不同的是,文件目录可以不需要放在 /etc/storage
了。
即
cd /etc/storage
可以改为cd /etc
接着新建文件,粘贴内容,保存,赋予执行权限,手动执行测试。这些都可以在上面 Padavan 版 中找到。
LuCI 不需要手动点击按钮让其保存到闪存之类的,不过在重启之后,你也许需要手动打开登录框登录,LuCI 似乎并没有提供重启执行指令的功能。
添加计划任务
一样,很简单。
直接进入 系统
→ 计划任务
,添加几乎一样的代码即可。
多说一句,在 LuCI 中配置能支持下面内容的上网服务后,似乎在执行 sh 文件的时候,网络请求并不会通过它,即 LuCI 可能不支持本文所述的 Telegram Bot 通知功能。
(可选)Telegram Bot 定时发送连接情况
嘛,既然标题都说了,那我们就借助 Telegram Bot 来获取连接情况,这个功能主要是用来检测你的校园网登录是否掉了(根据上面计划任务的话,我们就可以知道它在哪个时间段内没有给你发消息,即断网了)(Well……不排除因为某种设施进行日常升级导致你的设备无法正常访问某些 IP 上的某些东西。)
在此之前,确保你的路由器处于可以访问 Telegram API 的情况。(对于 hiboy 版的 Padavan,一般意味着下面打码处的内容你已经配置完毕了。
这里不对你怎么让它能够访问做解释。
创建 Telegram Bot
在 Telegram 中找到 @botfather,向它发送 /newbot
。
根据提示依次给予 Bot名
和 用户名
。请注意按照提示以 bot 结尾。
此时,Bot Father 应该会给你一串 token
,且内容中「You will find it at [t.me/XXXXXXXXXXXXXXXX]().」这里的地址可以直接访问到你的 Bot,请向你的 Bot 至少发送一次 /start
,它不会回复你,无需理会。
这里插播一个内容,hiboy 的 Padavan 是自带 tgbot 功能的(用于检测互联网 IP 变动,给予设备接入提醒,设备上、下线提醒,固件更新提醒),位置在 扩展功能→广告屏蔽功能→tgbot(这个位置可真是……),你可以根据需要顺便把这只 Bot 也用于上面的小功能,此处不再赘述。
获得 curl 内容
这里,我们先整理一下你所需要的用于 Telegram Bot 的 curl 文本,你可以在 XShell 之类的软件中连接 ssh 后执行 curl,然后看看 Telegram 那边你的 Bot 是否给你发了对应内容。如果发了,这里就没问题了~
curl -s "https://api.telegram.org/bot(这里是token)/sendMessage?chat_id=(这里是你的id)" --data-binary "&text=(要发送的消息内容)" &
(不用质疑,文本里的 bot
是直接和 token
连在一起的,比如我的是 bot774……
)
你的 id 可以通过向 @getidsbot 发送
/about
来获得。
包含 Telegram Bot 提醒功能的 sh 内容
重新梳理一下你所需要的 sh 文件,这里提供了一个 DEMO:
#!/bin/bash
#(一)检测是否是登录状态
logger "【Dr.COM网页认证】开始定时检测"
curl http://192.168.254.226 > drcom.html
check_status=`grep "Dr.COMWebLoginID_0.htm" drcom.html`
if [[ $check_status != "" ]]
then
#尚未登录
logger "【Dr.COM网页认证】上网登录窗尚未登录"
# 此处为你已修改完毕的curl
logger "【Dr.COM网页认证】上网登录窗未登录,现已登录"
curl -s "https://api.telegram.org/bot(这里是token)/sendMessage?chat_id=(这里是你的id)" --data-binary "&text=【Padavan联网状态】当前路由器未联网,已执行登录。当前时间 ""`date`" &
logger "【Dr.COM网页认证】已通过 Telegram Bot 发送当前时间"
else
#已经登录
logger "【Dr.COM网页认证】上网登录窗之前已登录"
curl -s "https://api.telegram.org/bot(这里是token)/sendMessage?chat_id=(这里是你的id)" --data-binary "&text=【Padavan联网状态】当前路由器之前已登录,无需执行登录。当前时间 ""`date`" &
logger "【Dr.COM网页认证】已通过 Telegram Bot 发送当前时间"
fi
logger "【Dr.COM网页认证】结束定时检测"
嘛,你自己看看就能知道需要改什么,自己决定吧。
怎么保存……?自己滚回上面看。
预览一下效果:
好了
你现在应该可以享受不受设备限制,断网后来网时自动登录认证,定时发送连接情况的校园网服务了。
如果对你的学校有用,希望你可以在评论区告诉我,我收集一下23333333
有关多设备的检测,可以参考一下「校园网禁止多终端共享上网解决方案」
其他学校
南通大学 ·「水坼北」同学
南通大学的经过多次尝试后已经成功,目前用的是树莓派刷的 openwrt,能定时自动检测登录,并且可以多设备使用,唯一的问题是在设备数量变更或设备太多的时候会被退出登录,有大佬知道怎么解决的可以回复我,有南通大学的需要帮忙的也可以回复我。
天津师范大学 · 「杉木树下」同学
这里贴一下适用于 天津师范大学 的脚本,是帮朋友写的,使用的路由器为Padavan固件的k2,实测正常使用。其他用get提交的学校也可以参考使用。
https://gist.github.com/binsee/4dfddb6b1be2803396250b7772056f1c
Darkpika Chrome 85.0.4183.102
博主您好,我的情况有点特殊,也是web端登录,但是目前的情况是如果正常用硬路由,不管多少台iphone连接wifi都没事,只要安卓大于1,或者电脑大于1,或者安卓+电脑大于1,都会掉线。还有一个就是软路由下运行脚本,Dr.COMWebLoginID_0.htm 会报错:./drcom_cron.sh: line 4: Dr.COMWebLoginID_0.htm: command not found怎么解决呢?十分感谢回答
TigerBeanst Edge Chromium 87.0.644.4
走了路由器还检测出来的估计不是单单看 MAC 了,我没办法解决。command not found 感觉一般是里面存在着 Windows 下的空格回车之类的……
Nuke Chrome 85.0.4183.121
博主您好,我们学校(境外)刚刚更新了1G网络,但是似乎对路由器的使用做了一定限制:
在抓包完成后,powershell格式的命令可以正常在Windows下使用;
路由器模式下,WAN口不能正确被分配到ip,登录窗口也无法正常弹出;
curl格式的命令在路由器中无法使用 显示curl (7) 无法连接主机错误,且无法ping通学校认证的IP;
学校采用的是华为的portal方案,想请教它最有可能是在那些方面进行了限制呢?我猜测是否和设备系统有关
谢谢!
TigerBeanst WordPress Android 15.9-rc-1
妹想到居然有境外的还需要登录认证的……其实这个我也无法确定,有可能是认了MAC地址吗,你尝试把路由器的MAC改成跟手机相差一位看看?
Nuke Chrome 85.0.4183.121
谢谢回复~ 我把路由mac改成和pc相同貌似还是不太行... 想请问如果无法通过路由器打开登录页 或者无法ping通学校认证ip 是否也就意味着不能通过curl方式上网的呢?
TigerBeanst Edge Chromium 87.0.654.0
如果路由器无法访问到认证网关,无论是 curl 还是其他的什么都是没办法连通的。。
Nuke Chrome 90.0.4430.72
谢谢博主之前的解惑,最近这个问题也算是水落石出了... 原来是学校对网络用户的操作系统进行了限制,只有Windows用户可以访问到认证网关进行登录操作,其他基于UNIX的系统,如Linux(Openwrt, Padavan),macOS都无法正常访问认证网关。我一方面使用博主的方法进行自动认证,另一方面使用connectify通过usb网口有线共享给路由器,也算是曲线救国了(最近学校网络解除了这个限制,但是UNIX设备最高速度只有500mpbs,晕)... 再次感谢博主的技术支持!
TigerBeanst WordPress Android 17.1-rc-3
认证网关……模拟一下UA试试?
barry Chrome 86.0.4240.111
有个问题,现在的drcom网页没有post请求了,都是get请求,请问操作一样吗?
TigerBeanst WordPress Android 16.1-rc-1
get 请求不用额外带那么多东西,因为全部在 URL 就能带上,直接 Curl 那个地址就行吧
barry Chrome 86.0.4240.193
我发现我们学校会检测dhcp如果是路由器开了dhcp就会无法登录直接报错,这种有什么好方法吗?或者旁路由能在校园网状态下用科学上网吗?
TigerBeanst WordPress Android 16.1-rc-3
其实很好奇学校怎么检测DHCP……旁路由上网啥的,你的网络环境我也不太清楚,我这边似乎是可以的
barry Chrome 86.0.4240.193
初步推断是跟通讯的端口和检测跟交换机dhcp是否冲突有关,那有设置教程吗?
TigerBeanst WordPress Android 16.1-rc-3
旁路由设置这些的还蛮多的吧,可以看看 OpenClash
barry Chrome 86.0.4240.193
但是教程里还需要设置主路由,我在校园网环境下也不可能设置主路由啊
TigerBeanst WordPress Android 16.1-rc-4
校园网→主路由→旁路由?(我那会折腾的时候就拿k2p和树莓派组成主旁路由……)
Ryosetsu Chrome 86.0.4240.198
博主您好,我的情况有点特殊,我用的路由器是小米的ac2100,刷的老毛子固件,开始参考你的办法使用grep检查字符串,但是发现第一步curl下来的文件是gb2312的,直接打开都是乱码,没办法查找。而且路由器的Linux还没有inconv来转化字符串,就先直接curl登录了。然后一天收了上百条通知,晚上我细细检查了登录前和登录后的文件区别,最后用了一个filesize=`ls -l drcom.html | awk '{ print $5 }'` maxsize=$((1024*10))判断文件大小,成功解决