電腦玩家Stan
这些萌萌的图片都是女朋友画的嗷(自豪脸)!
思,而不凡

重邮“宽带”路由器自动拨号教程

重邮“宽带”路由器自动拨号教程

导航

说在前面

重邮多年来一直使用NetKeeper这个死妈软件进行“宽带”(指不超过14M)拨号。广告多不说还限制热点分享。天下苦其久矣。

NetKeeper截图
垃圾软件的最后一瞥

不过重邮是什么地儿?南山计院可是人才辈出的地方。miao大神通过反向工程NK手机客户端,破解了的NK的密码算法,使路由器自动拨号联网成为可能。这个拨号脚本曾经的风头一时无两。直到后来利信不得已更换了密码算法,并下架了手机客户端。虽然脚本不能再继续自动拨号了,但是拦截法依旧可以正常使用,因此还是可绕开NK的热点分享限制,实现一号共享。

↓前往膜拜miao大神↓

今年年中,重邮终于放弃了NetKeeper,转用DRcom进行网页认证了。网页认证的好处在于不用再下额外的软件进行拨号了,允许一部手机和一台电脑同时登陆,有路由器的话更是可以连接更多设备……反正就是好处多多。

不过换成网页认证的话,之前写过的客户端自动拨号批处理文件就没啥用了,作为一条懒狗,当然是希望路由器每天自动拨号,不用自己打开网页浪费那几秒钟时间了(懒死得了)


需要什么?

说干就干!先讲清楚需要准备的东西:

  • 一部Linux内核路由器,OpenWrt,LEDE,老毛子什么的都行
  • 一款现代浏览器,Chrome,Firefox,Edge Whatever,手机上的Yandex和IDM浏览器也可
  • 一款SSH软件,比如XShell
  • 愿意折腾的心

什么?你没有Linux内核的路由器?或者你压根没有路由器?看这里

OK,万事俱备了,开搞


获取认证信息

1、首先浏览器打开认证网页,以重邮为例:http://192.168.200.2,先别急着进行登录认证

2、按F12打开调试模式,然后选中Network标签栏

认证页面
调试页面

3、此时再输入账号信息,点击登录,就可以看到登录信息了,如图所示:

认证信息

此时会得到一串网址,形如:http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=%2C0%2C*******%40telecom&user_password=*********&wlan_user_ip=10.16.0.***&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3&v=6065

而这一串网址就包含了进行网页认证需要的所有信息:认证服务器端口、账号、密码、内网IP地址、设备MAC地址。所以,先找个地方把这串网址记下来。当然了,你脑子好使记到脑子里也行

4、接上一条,现在已经知道了网页认证需要什么信息了,咱们就来分析下这些信息。

很明显,你的账号密码、认证服务器的端口和MAC地址是不会变的。但是因为是DHCP动态分配的内网IP,所以如果断电或者重启之后,内网IP地址大概率会改变。而且在网址的最后有一个v=****,据估计这串数字和时间有关,不同时间生成的v不同。但是经过测试,不传递这个v给认证服务器依然可以通过认证,因此唯一需要解决的就是内网IP问题了。

开始写shell脚本。

1、首先确保你的路由器安装了bash、cron和curl。以OpenWrt为例,路由器通常自带基于BusyBox的ash,由于ash无法在脚本内执行循环指令,所以需要手动安装bash。如果你的路由器已经有bash和curl可以跳过,没有的话依次执行以下代码:

opkg update
opkg install curl bash cron -y

其他路由器大同小异,自己安装就行。

2、刚刚说了,内网IP是会变的,尤其是在夜间会断电的学校,IP基本上不可能每天都一样,那么首先第一步就是要让脚本获取到路由器的内网IP。最简单的获取ip地址的方法就是ifconfig

ifconfig -a|grep inet |grep -v 127.0.0.1 |grep -v 192.168.1.1 |grep -v inet6 |awk '{print $2}'|tr -d "addr:"

简单说明下,grep -v 192.168.1.1是为了排除路由器网关地址,你的路由器地址是多少,就把这个IP地址改成多少就好。

获取到IP地址以后,我们可以定义一个变量$ip将其保存起来,同时定义一个变量$url来定义需要向认证服务器传递的认证信息。代码片段如下:

ip=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 192.168.1.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
url="http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=你的账号&user_password=你的密码&wlan_user_ip=""${ip}""&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3"

认证信息拼接完成了,记得把上面的“你的账号”和“你的密码”改成自己的!此时只要利用curl把这串信息发送给认证服务器,理论上你的路由器就已经可以完成认证联网了,因此最简单的shell脚本就可以写成:

#!/bin/bash
ip=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 192.168.1.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
url="http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=你的账号&user_password=你的密码&wlan_user_ip=""${ip}""&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3"
curl -s -o /dev/null  "${url}"

注解:curl -s -o是指静默执行,且不输出任何信息。如果想要debug信息,建议看到最后。

3、把脚本命名为任意名称,放在路由器内任意位置,并赋予权限就可以。以我为例,在/root下新建一个autoportal.sh的文件,写入上面的代码并保存。然后chmod 755 autoportal.sh赋予权限。


设置定时任务

最后,因为重邮非节假日是早上六点多开启上网认证的,所以我们设定一个cron任务,让路由器每天早上6:05的时候执行一次脚本(也可以提前或者延后,根据实际情况来),这样就可以每天自动联网了

首先输入crontab -e,会默认以编辑器打开一个文件,输入i或者按下insert键,在新的一行输入:

5 6 * * * bash /root/autoportal.sh

这段代码表示每天的6:05分bash执行放在/root目录下的autoportal.sh文件,根据你文件放置的位置自行修改即可。写入完成后依次esc→shift+;→wq→回车退出编辑器,然后重启cron即可

service crond restart

或:

systemctl restart crond.service

OK,至此,大功告成。


玩点有逼格的

但是作为一个有逼格的人,怎么能轻易满足呢对不对?万一今天夜里没断网,就不用认证了呀;万一脚本执行了,还是没连上网,我得知道是哪里出问题了呀……

所以,我削微地优化了一下脚本,它最终长这个样子:

#!/bin/bash
netstat=`curl -I -m 1 -o /dev/null -s -w %{http_code} www.baidu.com`
#判断访问百毒的返回码,-m 1表示最多只等一秒就要结果,对于百毒来说一秒足够了
if [ $netstat = 200 ];then
	echo Network Already Connected, Nothing To Do
        #判断返回码是否是200,如果是,结束认证,告知用户网络已连接。如果不是进行下一步
else
	ip=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v 192.168.1.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
        #获取内网IP地址
	if [ $ip = "" ];then
		echo Can Not Get UR IP Address, Process Terminated
                #如果获取不到IP,说明DHCP服务器或者WAN口网线有问题,结束认证进程,告知原因
	else
		url="http://192.168.200.2:801/eportal/?c=Portal&a=login&callback=dr1003&login_method=1&user_account=你的账号&user_password=你的密码&wlan_user_ip=""${ip}""&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.3.3"
                #生成认证信息
		for ((i=1; i<=3; i++));
		do
			curl -s -o /dev/null  "${url}"
			netstat=`curl -I -m 1 -o /dev/null -s -w %{http_code} www.baidu.com`
			if [ $netstat = 200 ];then
				break
			else
				continue
			fi
		done
                #进行最多三次认证,每认证一次就判断一下是否成功,如果成功停止认证,失败则继续尝试
		if [ $netstat = 200 ];then
			echo Network Connected Successfully
		else
			echo Network Connect Failed After 3 Attempts, Process Terminated
		fi
                #认证过程结束后判断是否认证成功,并告知用户结果
	fi
fi

同样的,cron任务也可以修改为:

5 6 * * * bash /root/autoportal.sh  > /tmp/portal.log 2>&1

这样如果当天路由器没有成功联网,就可以在路由器/tmp目录下查询portal.log文件了解失败原因,方便排障。

因为懒得截图,几种输出信息各位有兴趣自己探索去吧。


写到最后

如果你只有普通路由器,也是可以通过电脑执行批处理来完成登录认证的,只不过我没有需求所以没写。如果有人对此有需求,可以留言告诉我,我抽空补一下,没有的话就算了


终于完工了,就酱吧,有用自取,无用别B,Peace

#
首页      胡乱搞      重邮“宽带”路由器自动拨号教程

发表回复

textsms
account_circle
email

思,而不凡

重邮“宽带”路由器自动拨号教程
导航 前言(废话)准备工作获取需要的信息编写shell脚本设置定时任务进阶玩法写到最后 说在前面 重邮多年来一直使用NetKeeper这个死妈软件进行“宽带”(指不超过14M)拨号。广告…
扫描二维码继续阅读
2020-11-11