Created
February 13, 2018 07:12
-
-
Save stypr/97a25600ef2f30f14792213d2807a260 to your computer and use it in GitHub Desktop.
iptime WOL in python
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
#!/usr/bin/python -u | |
#-*- coding: utf-8 -*- | |
# Developer: Harold Kim([email protected]) | |
import os | |
import sys | |
import re | |
import requests | |
class iptime: | |
''' iptime(A8004NS-M) class | |
session(dict): cookie for requests | |
host, username, password: required for iptime management | |
''' | |
session = {} | |
host = '' | |
username = '' | |
password = '' | |
def __init__(self, host): | |
# check if connections are stable | |
self.host = host | |
r = requests.get(host+'sess-bin/login_session.cgi') | |
assert "A8004NS-M" in r.text | |
def login(self, id, pw): | |
''' typical login method ''' | |
d = {'init_status': 1, 'captcha_on': 0, 'captcha_file': '', | |
'username': id, 'passwd': pw, 'default_passwd': '', | |
'captcha_code': ''} | |
h = {'Referer': self.host + 'sess-bin/login_session.cgi', | |
'User-Agent': 'Mozilla/5.0'} | |
r = requests.post(self.host + '/sess-bin/login_handler.cgi', d, h) | |
r = r.text | |
if 'efm_session_id' in r: | |
sess = r.split("setCookie('")[1].split("')")[0] | |
self.session['efm_session_id'] = sess | |
return True | |
else: | |
raise Exception('Incorrect Credentials!') | |
def list(self): | |
''' list wol ''' | |
if not self.session['efm_session_id']: | |
raise Exception('Not Authenticated') | |
r = requests.get(self.host + 'sess-bin/timepro.cgi?tmenu=iframe' + | |
'&smenu=expertconfwollist', cookies=self.session) | |
r = r.text | |
r = r.split('name="remotepc_wollist" style="padding:0; margin:0;"')[1] | |
r = r.split('<tr ')[1:] | |
# clean up useless stuff | |
clean_tag = re.compile('<.*?>') | |
for i in xrange(len(r)): | |
r[i] = r[i].split("<td ") | |
for j in xrange(len(r[i])): | |
r[i][j] = re.sub(clean_tag, '', '<td ' + r[i][j]).strip() | |
if len(r[i]) <= 2: | |
r[i] = [] | |
r[i] = [k for k in r[i] if k] | |
r = r[1:] | |
r = [k for k in r if k] | |
# return format: [[no, mac, id], ...] | |
return r | |
def wake(self, mac): | |
''' wake wol ''' | |
if not self.session['efm_session_id']: | |
raise Exception('Not Authenticated') | |
d = {'tmenu': 'iframe', 'smenu': 'expertconfwollist', 'nomore': '0', | |
'wakeupchk': mac, 'act': 'wake'} | |
r = requests.post(self.host + 'sess-bin/timepro.cgi', | |
d, cookies=self.session) | |
assert mac in r.text | |
return True | |
if __name__ == "__main__": | |
i = iptime('http://192.168.0.1/') | |
i.login('stypr', 'stypr') | |
wol_list = i.list() | |
print(wol_list) | |
print i.wake('12-34-56-78-AA-BB') |
There were bugs that made me to make some modifications, but it works. Super Thx!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
super thx