Created
April 27, 2014 09:58
-
-
Save jkrajniak/11341945 to your computer and use it in GitHub Desktop.
netlogin script for the KotNET service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Simple auto login program for network on Katholieke Universiteit Leuven | |
# Author: Jakub Krajniak <jkrajniak at gmail dot com> | |
# License: GPLv2 | |
# | |
# Requirements: | |
# - Python >= 2.7 | |
# - mechanize (http://wwwsearch.sourceforge.net/mechanize/) | |
import argparse | |
import mechanize | |
import re | |
import time | |
class Login: | |
"""Class for login into the KU KotNet.""" | |
br = mechanize.Browser() | |
loggedIn = False | |
def __init__(self, login, password, logfile=None): | |
self.username = login | |
self.password = password | |
self.logFile = logfile | |
def login(self): | |
self.br = mechanize.Browser() | |
self.br.open('http://netlogin.kuleuven.be') | |
self.br.select_form(nr=1) | |
self.br.submit() | |
self.br.select_form(nr=1) | |
self.br['uid'] = self.username | |
self.br.form.set_value(self.password, type='password') | |
ret = self.br.submit() | |
## get information about available transfer | |
lines = ret.readlines() | |
## check if loggin failed | |
weblogin = [ l for l in lines if 'rc=100' in l] | |
if len(weblogin) != 0: | |
loggedIn = True | |
self.getTransfer(lines) | |
else: | |
print 'max loggin excessed' | |
loggedIn = False | |
def logout(self): | |
self.br.select_form(nr=1) | |
self.br.submit() | |
self.br.select_form(nr=1) | |
#self.br['uid'] = self.username | |
self.br.form.set_value(self.password, type='password') | |
self.br.submit() | |
self.loggedIn = False | |
def getTransfer(self, lines): | |
avaDownload = [ re.findall('.* = (\d+) of (\d+).*', l) for l in lines if re.match ('.*weblogin.*available.*', l) ] | |
# [[('10321934806', '10737418240')], [('309602042', '1073741824')]] | |
downloadLimit = int(avaDownload[0][0][0]) / 1024 / 1024 | |
uploadLimit = int(avaDownload[1][0][0]) / 1024 / 1024 | |
string = 'Download: %s MB, Upload: %s' % (downloadLimit, uploadLimit) | |
with open(self.logFile, 'a+') as logFile: | |
logFile.writelines(["%s;%s;%s\n" % (time.strftime('%Y-%m-%d %H:%M:%S'), downloadLimit, uploadLimit)]) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('login', help='Login') | |
parser.add_argument('password', help='password') | |
parser.add_argument('--logfile', help='Log file path', default='autologin.log') | |
args = parser.parse_args() | |
c = Login(args.login, args.password, args.logfile) | |
c.login() | |
if c.loggedIn == False: | |
c.logout() | |
c.login() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment