本人所在的学校提供了免费的校园网,联通电信移动教育网多线。不爽的是需要手动在Web登录。不过感谢学校没有使用乱七八糟的客户端。计费系统是Dr.COM,也有人称城市热点。
为了优雅的使用校园网,让电脑/路由器开机自动连接,~~顺便还能跑代码搞些有剩余流量的账号。~~正好在学Python,Google看了些别人的实现方法,模仿着自己写了个。为路由器交叉编译了个Python 2.7,放路由器上跑了一个月左右,没有发现什么问题。
主要实现了登录以及账号有效性检测,包括剩余流量检测,随机选取账号进行登录。
以下是代码,由于原理太过简单,~~自以为自己的代码可读性还可以,~~就不做注释了。
其中URL是校园网Web登录页的地址,“account.csv”是逗号分隔符文件,格式为“12位学号,六位密码”,一行一个。
import urllib
import urllib2
import random
URL = "http://Login URL/"
FILE = "account.csv"
def post(url, data=None):
if data:
data = urllib.urlencode(data)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
return response
def check(response):
lineBeChecked = response.readlines()[5]
if lineBeChecked[1] == 's':
return True
elif lineBeChecked[1] == 'S':
return False
else:
print("Unexpected response!")
return False
def login(username, upass):
data = {}
data["DDDDD"] = username
data["upass"] = upass
data["0MKKey"] = ''
return post(URL, data)
def logout():
post(URL+"F.htm")
def flux(response):
lineBeChecked = response.readlines()[6]
indexStart = lineBeChecked.find("flow") + 6
indexEnd = lineBeChecked[indexStart:].find(" ") + indexStart
return int(lineBeChecked[indexStart:indexEnd])
def main():
fp = open(FILE, 'r')
reader = fp.readlines()
while True:
line = random.choice(reader)
username = line[0:12]
password = line[13:19]
try:
if check(login(username, password)):
print("Connected!")
usedFlux = flux(post(URL))
print "Used Flux:", usedFlux
if usedFlux < 4000000:
break
else:
print("Failed! Check username / password!")
except:
print("Network Error!")
continue
fp.close()
if __name__ == '__main__':
main()