summaryrefslogtreecommitdiffstats
path: root/wol
blob: 8f00b9893bce5afbe684add2f58756a5852be339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#! /usr/bin/python
# Wake-On-LAN
#
# Copyright (C) 2002 by Micro Systems Marc Balmer
# Written by Marc Balmer, marc@msys.ch, http://www.msys.ch/
# This code is free software under the GPL

# /usr/sbin/ethtool -s eth0 wol g

import struct, socket
from sys import argv, exit
from os.path import basename

def WakeOnLan(ethernet_address, ip=0):
    # Construct a six-byte hardware address
    addr_byte = ethernet_address.split(':')
    hw_addr = struct.pack('BBBBBB', int(addr_byte[0], 16),
            int(addr_byte[1], 16),
            int(addr_byte[2], 16),
            int(addr_byte[3], 16),
            int(addr_byte[4], 16),
            int(addr_byte[5], 16))
    # Build the Wake-On-LAN "Magic Packet"...
    msg = '\xff' * 6 + hw_addr * 16
    # send it
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    try :
        if ip==0:
            s.sendto(msg, ('<broadcast>', 666))
        else :
            s.sendto(msg, ( ip, 666))
    except:
        s.close()
        print("send error")
        exit(1)
    s.close()

if( len( argv )==1):
    print("usage : "+basename( argv[0] )+" mac_address [distant ip]")
    exit(1)
if( len( argv )>2):
    WakeOnLan(argv[1],argv[2])
else :
    WakeOnLan(argv[1])