Skip to content

Instantly share code, notes, and snippets.

@stypr
Created February 13, 2018 07:12
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stypr/97a25600ef2f30f14792213d2807a260 to your computer and use it in GitHub Desktop.
Save stypr/97a25600ef2f30f14792213d2807a260 to your computer and use it in GitHub Desktop.
iptime WOL in python
#!/usr/bin/python -u
#-*- coding: utf-8 -*-
# Developer: Harold Kim(root@stypr.com)
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')
@junorouse
Copy link

super thx

@anaclumos
Copy link

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