lu:
http://www.netgear-forum.com/forum/index.php?showtopic=62514
import sys, socket, datetime, urllib, time, struct, subprocess
# find rarp & ping imports
# check wake on http://wolpobox.logsm.net (UDP:2222)
# some forged paramters
sandbox="./" # used to change working folder
ip="" # not using rarp/ip
start_timeout=10 # seconds to wait before ping
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',7))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
print " watch http://wolpobox.logsm.net and wol 7 (frapper ^C pour abandonner)\n"
while 1:
time.sleep(10)
urllib.urlretrieve("http://wolpobox.logsm.net/index.php?action=get&id=zorglub",sandbox+"ici.txt");
with open("ici.txt") as f:
answer=f.readline()
f.close
print answer;
# find IP, allows ping
start=answer.find("ip:")+3
end=0
#ip
ip=""
if (start >=3) :
end=answer.find(";",start)
ip=answer[start:end]
token=""
start=answer.find("token:")+6
if (start >=6) :
end=answer.find(";",start)
token=answer[start:end]
# Check macaddress format and try to compensate.
macadress=""
start=answer.find("mac:",end)+4
if (start >=4 ) :
end=answer.find(";",start)
macaddress=answer[start:end-1]
# Pad the synchronization stream.
# magic packet contains 20 times mac address
data = ''.join(['FFFFFFFFFFFF', macaddress * 20])
send_data = ''
# Split up the hex values and pack.
for i in range(0, len(data), 2):
send_data = ''.join([send_data,
struct.pack('B', int(data[i: i + 2], 16))])
# Broadcast it to the LAN.
next="http://wolpobox.logsm.net/index.php?action=del&id=zorglub&mac="+macaddress+"&token="+token
print datetime.datetime.now() , "awake mac=" , macaddress , " ip=" , ip
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 7 legacy awake port
sock.sendto(send_data, ('<broadcast>', 7))
if (len(ip)>0):
# wait starting
time.sleep(start_timeout)
ping_response=subprocess.Popen(["/bin/ping","-c1","-w100",ip],stdout=subprocess.PIPE).stdout.read()
print ping_response
# got 1 response packet ?
if (ping_response.find("1 received")>=0) :
urllib.urlretrieve("http://wolpobox.logsm.net/index.php?action=log&id=zorglub&mac="+macaddress+"&token="+token,sandbox+"log.txt")
print ip , " is alive"
print "nxt " , next
urllib.urlretrieve(next,sandbox+"la.txt")
en cours avec ping par Ip fixe
import sys, socket, datetime, urllib, time, struct, subprocess
# find rarp & ping imports
# check wake on http://wolpobox.logsm.net (UDP:2222)
# some forged paramters
sandbox="./" # used to change working folder
ip="192.168.0.253" # not using rarp/ip
start_timeout=10 # seconds to wait before ping
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('',7))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
print " watch http://wolpobox.logsm.net and wol 7 (frapper ^C pour abandonner)\n"
while 1:
time.sleep(10)
urllib.urlretrieve("http://wolpobox.logsm.net/index.php?action=get&id=zorglub",sandbox+"ici.txt");
with open("ici.txt") as f:
macaddress=f.readline()
f.close
# Check macaddress format and try to compensate.
start=macaddress.find("mac:")+4
if (start <4) or (macaddress.find("mac:*")>=0) :
print datetime.datetime.now() , " " , start , "-NO--",macaddress , "--- " , len(macaddress)
else:
macaddress=macaddress[start:start+12]
print datetime.datetime.now() , start , "-OK--",macaddress , "--- " , len(macaddress)
# Pad the synchronization stream.
# magic packet contains 20 times mac address
data = ''.join(['FFFFFFFFFFFF', macaddress * 20])
send_data = ''
# Split up the hex values and pack.
for i in range(0, len(data), 2):
send_data = ''.join([send_data,
struct.pack('B', int(data[i: i + 2], 16))])
# Broadcast it to the LAN.
next="http://wolpobox.logsm.net/index.php?action=del&id=zorglub&mac="+macaddress
print datetime.datetime.now() , "awake " , macaddress
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 7 legacy awake port
sock.sendto(send_data, ('<broadcast>', 7))
# wait starting
time.sleep(start_timeout)
ping_response=subprocess.Popen(["/bin/ping","-c1","-w100",ip],stdout=subprocess.PIPE).stdout.read()
print ping_response
# got 1 response packet ?
if (ping_response.find("1 received")>=0) :
urllib.urlretrieve("http://wolpobox.logsm.net/index.php?action=log&id=zorglub&mac="+macaddress,sandbox+"log.txt")
print ip , " is alive"
print "nxt " , next
urllib.urlretrieve(next,sandbox+"la.txt")s
la preuve par l'image:
1) en haut à gauche: demande de Wake par le web
2) à droite: en haut: le programme en python
3) en bas à droite retrouyve l'adresse mac à éveiller.