add CGI script and sample MAC list config file
This commit is contained in:
commit
c35fc1a7de
77
wol.py
Executable file
77
wol.py
Executable file
@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import re
|
||||
import cgi
|
||||
from subprocess import *
|
||||
|
||||
# Enable these for debugging
|
||||
import cgitb
|
||||
cgitb.enable()
|
||||
|
||||
MAC_FILE = '/etc/wol.macs'
|
||||
REFRESH = 15
|
||||
|
||||
def header():
|
||||
print "Content-Type: text/html\n"
|
||||
|
||||
def printHead(title):
|
||||
print '''<head>
|
||||
<title>%s</title>
|
||||
<meta http-equiv="refresh" content="%s">
|
||||
</head>''' % (title, REFRESH)
|
||||
|
||||
def checkup(hostname):
|
||||
p = Popen(['ping', '-c1', '-W2', hostname], stdout = PIPE, stderr = PIPE)
|
||||
for line in p.communicate()[0].split('\n'):
|
||||
if re.search(r'\sbytes\sfrom\s', line):
|
||||
return True
|
||||
return False
|
||||
|
||||
def getMACs():
|
||||
f = open(MAC_FILE, 'r')
|
||||
macs = {}
|
||||
for line in f.read().split('\n'):
|
||||
m = re.match('(\S+)\s+(\S+)', line)
|
||||
if m is not None:
|
||||
name, mac = m.group(1, 2)
|
||||
macs[name] = mac
|
||||
return macs
|
||||
|
||||
def main():
|
||||
header()
|
||||
print '<html>'
|
||||
printHead('Wake on LAN Interface')
|
||||
print '<body>'
|
||||
print '<h2>%s</h2>' % 'Wake on LAN Interface'
|
||||
macs = getMACs()
|
||||
form = cgi.FieldStorage()
|
||||
if 'name' in form:
|
||||
name = form['name'].value
|
||||
if name in macs:
|
||||
if 'wake' in form:
|
||||
Popen(['wakeonlan', macs[name]], stdout = PIPE, stderr = PIPE)
|
||||
elif 'shutdown' in form:
|
||||
Popen(['ssh', '-i', '/var/www/.ssh/id_rsa',
|
||||
'-l', 'root', name, 'shutdown', '-h', 'now'],
|
||||
stdout = PIPE, stderr = PIPE)
|
||||
print '<ul>'
|
||||
names = macs.keys()
|
||||
names.sort()
|
||||
for name in names:
|
||||
up = checkup(name)
|
||||
print '<li>'
|
||||
print '<form method="post">'
|
||||
print '<span style="color: %s;">' % ('#0C0' if up else '#C00')
|
||||
print name
|
||||
print '</span> '
|
||||
print '<input type="hidden" name="name" value="%s"/>' % name
|
||||
print '<input type="submit" name="wake" value="Wake" />'
|
||||
print ' ';
|
||||
print '<input type="submit" name="shutdown" value="Shutdown" />'
|
||||
print '</form>'
|
||||
print '</li>'
|
||||
print '</ul>'
|
||||
print '</body></html>'
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
x
Reference in New Issue
Block a user