如何在学校用 Dr.com 网页认证的情况下多设备共享上网

前提是需要一台软路由。

0x01 前提

在经历了两年使用客户端之后,学校终于认识到客户端的垃圾而改用网页认证的方式。这也就意味着软路由使用 Dogcom 验证的时代结束了。在这里就小小的怀念一下吧。

Dogcom 版本为 pppoe(P版),配置文件如下:

server = '172.30.1.160'
pppoe_flag = '\x2a'
keep_alive2_flag = '\xdc'

在知道这一变化之后,肯定是要找方法来继续用路由器的,毕竟只能同时一台设备连接。

0x02 准备工作

因为我用的路由器是 10 年前的东西,打造成软路由后因为安装了 Dogcom 的原因,实在是塞不下其它程序了,所以只能使用外置的东西来充当自动拨号了,这时我的树莓派就发挥了用处。

首先,下载最新的 Ubuntu Server 20.04 然后刷入。在等待一段时间后就大功告成啦!

接下来我们连接到树莓派上。通过开发者控制台,可以看出我们的上网登录窗是使用 POST 方法,遂想到可直接使用 curl 进行登录,写一个 bash 脚本 + cron 任务计划就行了!

这里直接放上前人研究好的 Bash 脚本(详见参考资料第一个连接,作者还加入了 Telegram 推送状态的功能),但是我做了一些小小修改,以实现每分钟执行 12 次重连,每 5 秒一次:

#!/bin/bash
logger "【Dr.COM网页认证】开始定时检测"
for i in {1..12}
do
curl http://172.29.0.2 > drcom.html
check_status=`grep "Dr.COMWebLoginID_0.htm" drcom.html`
if [[ $check_status != "" ]]
then
    #尚未登录
    logger "【Dr.COM网页认证】上网登录窗尚未登录"
    curl -X POST "http://172.29.0.2:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.29.0.2&iTermType=1&wlanacip=null&wlanacname=null&mac=00-00-00-00-00-00&enAdvert=0&queryACIP=0&loginMethod=1" -H "Origin: http://172.29.0.2" -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/85.0.4183.121 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" -H "DNT: 1" -H "Referer: http://172.29.0.2/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=%2C0%2C学号%40运营商&upass=密码&R1=0&R2=0&R3=0&R6=0&para=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=" --tlsv1.3 -o Sxinfo.txt
    logger "【Dr.COM网页认证】上网登录窗未登录,现已登录"
else
    #已经登录
    logger "【Dr.COM网页认证】上网登录窗之前已登录"
fi
logger "【Dr.COM网页认证】结束定时检测"
sleep 5;
done

sh 版:

#!/bin/sh
logger "【Dr.COM网页认证】开始定时检测"
i=1
while [ "$i" -le 12 ]; do
curl http://172.29.0.2 > drcom.html
check_status=$(grep "Dr.COMWebLoginID_0.htm" drcom.html)
if [ "$check_status" != "" ]
then
    #尚未登录
    logger "【Dr.COM网页认证】上网登录窗尚未登录"
    curl -X POST "http://172.29.0.2:801/eportal/?c=ACSetting&a=Login&protocol=http:&hostname=172.29.0.2&iTermType=1&wlanacip=null&wlanacname=null&mac=00-00-00-00-00-00&enAdvert=0&queryACIP=0&loginMethod=1" -H "Origin: http://172.29.0.2" -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/85.0.4183.121 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" -H "DNT: 1" -H "Referer: http://172.29.0.2/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=%2C0%2C学号%40运营商&upass=密码&R1=0&R2=0&R3=0&R6=0&para=00&0MKKey=123456&buttonClicked=&redirect_url=&err_flag=&username=&password=&user=&cmd=&Login=" --tlsv1.3 -o Sxinfo.txt
    logger "【Dr.COM网页认证】上网登录窗未登录,现已登录"
else
    #已经登录
    logger "【Dr.COM网页认证】上网登录窗之前已登录"
fi
logger "【Dr.COM网页认证】结束定时检测"
i=$(( i + 1 ))
sleep 5;
done

crontab 的设置如下:

# 输入 crontab -e 进入设置
# 每天的每天6点到24点的每1分钟,执行一次检测登录指令
*/1 5-23 * * * $HOME/drcom_new.sh

因为我们学校会进行多终端检测,所以不可能直接按照原脚本来。

随后发现我们学校好像禁止了 ntp 流量,而树莓派断电是无法保存时间的,遂只能手动修改时间:

sudo timedatectl set-timezone Asia/Shanghai
# 举个栗子
sudo date -s "Sat Oct 3 12:40:00 UTC 2020"

logger 的内容可以 cat /var/log/syslog 看到。就这样吧。

0x03 参考资料


如果喜欢本文,欢迎点击下方的「鼓掌」按钮!

如果上面没有加载出任何东西,可以点击这里


如果喜欢本文,欢迎点击下方的「鼓掌」按钮!

如果上面没有加载出任何东西,可以点击这里