起因
浙软的网络认证系统实在是与众不同,好像是自己开发的?
反正就特别不方便,每次连上之后会有一个小窗口,影响观感。 有轻微强迫症的咱怎么能忍这个呢?于是决定自己写一个认证的程序,并挂到路由器上,由于路由器装的是linux,没有GUI,也就看不到这个窗口了。
自动认证
这部分过程其实很简单,很多文章都有介绍方法,比如浙大软院 免登录上网攻略。
受到了浙大python网_Python爬虫学习(8):浙大软院网络登陆保持一文的启发,发现没必要一定用自己的账号登录,并在这篇文章的基础上进行了改写:
import urllib
import urllib.request as urllib2
import re
import os
import time
class PseudoLogin:
def __init__(self):
self.login_url = "http://192.0.0.6/cgi-bin/do_login"
self.status_url = "http://192.0.0.6/cgi-bin/keeplive"
self.logout_url = "http://192.0.0.6/cgi-bin/do_logout"
self.headers = {}
self.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
self.headers["Content-Type"] = "text/html; charset=gb2312"
self.start = 22151001
self.end = 22151300
self.check_time = 5
self.current = self.start
self.uid = ""
def cycle_login(self):
password = '3fdebd70bc927d97'
pattern = re.compile(r"^[\d]+$")
if(self.current >= self.end):
print("将重头再来一次..")
self.current = self.start
for username in range(self.current, self.end + 1):
self.current = username
ret = self.access(str(username), password)
if re.match(pattern, ret):
self.uid = ret
print("已经成功登陆...,可以上网了")
print("当前网号为:" + str(username))
print("uid为:" + ret)
return True
return False
def access(self,username,password):
data = {'username': username, 'password': password, 'drop': 0, 'type': 1, 'n': 100}
data = urllib.parse.urlencode(data).encode(encoding='UTF8')
req = urllib2.Request(self.login_url, data=data, headers=self.headers)
res = urllib2.urlopen(req)
content = res.read().decode('UTF8')
print("the login result: " + content)
return content
def get_status(self):
data = {'uid': self.uid}
data = urllib.parse.urlencode(data).encode(encoding='UTF8')
req = urllib2.Request(self.status_url, data=data, headers=self.headers)
res = urllib2.urlopen(req)
content = res.read().decode('UTF8')
print("the keep-alive result: " + content)
return content
def logout(self):
data = {'uid': self.uid}
data = urllib.parse.urlencode(data).encode(encoding='UTF8')
req = urllib2.Request(self.logout_url, data=data, headers=self.headers)
res = urllib2.urlopen(req)
content = res.read().decode('UTF8')
print("the logout result: " + content)
return content
def suffer(self):
while(not self.cycle_login()):
pass
pattern = re.compile(r"^[\d]+,[\d]+,[\d]+$")
while(True):
time.sleep(self.check_time)
status = self.get_status()
if re.match(pattern,status):
print("it is still online")
else:
print("sorry you are offline")
self.current = self.current + 1
print("下线后需要等一会儿才能再登陆")
time.sleep(30)
break
return False
def enjoy(self):
while(not self.suffer()):
pass
login = PseudoLogin()
login.enjoy()
我主要对那篇文章中的代码格式进行了人工调整,并且把python2给update到了python3。并且由于系统的升级,密码不再是以前的明文传递,改成了md5加密:
运行后:
成功登录,并且连上了网。
挂到路由器
这部分才是这篇博客的难点,我用的路由器是著名的刷固件神器斐讯k2p,用的固件是老毛子Padavan 3.4.3.9-099_20-06-1
进入终端
要进入路由器的终端,首先得开放ssh服务:
然后通过ssh协议连接:
进来之后其实可以看到是个类似Linux系统的shell,是BusyBox的一部分,但是没有lsb_release -a , cat /etc/os-release 等一系列的命令,也没有apt 、yum 、dpkg 、rpm 等软件包管理的工具,在这种情况下应该是没办法安装python的。
从外部安装opkg
没有这些包管理工具,我们就无法安装新的软件,因此需要找一个可用的package management tool。
经过一番搜寻,终于找到了一个方法: 从外部网站下载一个包管理工具——opkg,然后使用这个工具安装python3
由于路由器的file system建立在memory之上,其存储空间是read-only的,所以要先将内存划分一部分空间,挂载到文件系统:
mount -t tmpfs -o size=40M tmpfs /opt/
我这里分配了40M大小的内存,之前其实有尝试过分配10M和20M,但在后续安装python的时候提示了空间不足。
随后从外部网站下载opkg:
wget http://pkg.entware.net/binaries/mipsel/installer/opkg -O /opt/bin/opkg
chmod 755 /opt/bin/opkg
wget http://bin.entware.net/mipselsf-k3.4/installer/opkg.conf -O /opt/etc/opkg.conf
不出意外的话会提示文件夹不存在之类的错误,因为没有手动创建/opt/bin 、opt/etc 等文件夹,这部分mkdir 即可。
进入/opt/bin 目录,对opkg进行一下update,并安装一下ipk:
cd /opt/bin
./opkg update
wget https://archive.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base/opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_ramips_24kec.ipk
opkg install ./opkg_9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7_ramips_24kec.ipk
后台挂自动认证脚本
最后,安装python3:
opkg install python3
即可成功把python安装到路由器的RAM里。通过scp 将python脚本传过来,然后使用nohup命令挂在后台即可:
scp ./keeplive.py admin@192.168.123.1:~/
nohup python3 ./keeplive.py &
后记
这样做还是有缺陷的,因为在RAM里,所以路由器断电重启的话文件会消失,还需要重写安装python并挂上,后续可以自己写一个脚本。
参考链接
[1] 浙大软院 免登录上网攻略 [2] 浙大python网_Python爬虫学习(8):浙大软院网络登陆保持 [3] StackOverflow: How to install a software management tool in Linux? [4] Padavan固件安装软件包,7620老毛子Padavan固件安装openwrt安装额外的软件包 [5] 在Padavan 上使用Entware [6] OPKG 软件包管理
|