Last active
March 3, 2019 01:08
-
-
Save td00/1e9a4c34173228c7b9bd9ea97a6853cd to your computer and use it in GitHub Desktop.
wifionice
This file contains hidden or 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
import urllib.request | |
import subprocess | |
import psutil | |
import time | |
import socket | |
class BahnWifi: | |
def __init__(self): | |
self.loginUrl = 'http://www.wifionice.de/?login' | |
self.logoutUrl = 'http://www.wifionice.de/?logout' | |
self.headers ={ | |
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36', | |
'Referer' : 'http://www.wifionice.de/', | |
'Connection' : 'keep-alive', | |
'Accept-Encoding' : 'gzip, deflate, sdch' | |
} | |
def request(self, url): | |
req = urllib.request.Request( | |
url, | |
data=None, | |
headers=self.headers | |
) | |
fp = urllib.request.urlopen(req) | |
data = fp.read() | |
fp.close() | |
def login(self): | |
self.changeMac() | |
self.request(self.loginUrl) | |
if self.networkconnectionEstablished == False: | |
print("Login fehlgeschlagen") | |
self.login() | |
else: | |
print("Login erfolgreich") | |
def logout(self): | |
self.request(self.logoutUrl) | |
print("Logout abgeschlossen") | |
def changeMac(self): | |
interfaces = self.getInterfaces() | |
for interface in interfaces: | |
subprocess.call('sudo macchanger -a ' +interface, shell=True) | |
def getInterfaces(self): | |
realInterfaces = [] | |
interfaces = str(subprocess.check_output('ls /sys/class/net', shell=True)) | |
interfaces = interfaces.split("'")[1].split('\\n') | |
for interface in interfaces: | |
if len(interface) > 0 and interface != 'lo' and interface.find('vmnet') == -1: | |
realInterfaces.append(interface) | |
return realInterfaces | |
def getNetworkusage(self): | |
networkusage = 0.0 | |
interfaces = self.getInterfaces() | |
for interface in interfaces: | |
networkusage = networkusage + float(str(psutil.net_io_counters(pernic=True)[interface]).split("=")[1].split(",")[0]) | |
networkusage = networkusage + float(str(psutil.net_io_counters(pernic=True)[interface]).split("=")[2].split(",")[0]) | |
print("Networkusage: " + str(networkusage)) | |
return networkusage | |
def networkconnectionEstablished(self, host="8.8.8.8", port=53, timeout=3): | |
try: | |
socket.setdefaulttimeout(timeout) | |
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port)) | |
return True | |
except Exception as ex: | |
print(ex) | |
return False | |
def run(self): | |
networkusageBegin = self.getNetworkusage() | |
self.login() | |
while True: | |
if networkusageBegin + (199 * 1000 * 1000) <= self.getNetworkusage(): | |
self.logout() | |
networkusageBegin = self.getNetworkusage() | |
self.login() | |
print("Sleep") | |
time.sleep(5) | |
bahnwifi = BahnWifi() | |
print("Networkconnecion established: " + str(bahnwifi.networkconnectionEstablished())) | |
bahnwifi.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment