Good to Know Database

Wake-on-LAN mittels Python


Mit Wake-on-LAN (kurz WOL) kann man einen Rechner über das Netzwerk aufwecken. Voraussetzung dazu ist, dass der jeweilige Rechner eine Netzwerkkarte mit WOL-Support besitzt und Wake-on-LAN im BIOS beziehungsweise im Betriebssystem aktiviert ist. Zum Aufwecken des Rechners wird ein so genanntes Magic Packet über das Netzwerk an die MAC-Adresse des Zielrechners oder als Broadcast-Nachricht gesendet. Das Magic Packet enthält sechsmal in Folge den hexadezimalen Wert 0xFF und unmittelbar danach 16-mal die MAC-Adresse des Systems welches aufgeweckt werden soll. Das folgende Python Skript erstellt aus der übergebenen MAC-Adresse ein Magic Packet und sendet dieses als Broadcast-Nachricht ins Netzwerk.

Für das folgende Python Skript erstellen Sie mit einem Editor die Datei wake-on-lan.py.

pi@raspberrypi ~ $ vi wake-on-lan.py

Fügen Sie in diese Datei den folgenden Python Code ein und speichern die Datei ab.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
# Creation:    30.06.2013
# Last Update: 07.04.2015
#
# Copyright (c) 2013-2015 by Georg Kainzbauer <http://www.gtkdb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#

# import required modules
import re
import socket
import struct
import sys

# main function
def main():
  # check syntax and print usage
  if len(sys.argv) != 2 or sys.argv[1] == '-h' or sys.argv[1] == '--help':
    print("Usage:\n\twake-on-lan.py <mac-address>\n")
    print("The MAC address could be specified in the following formats:")
    print("\t00:11:22:33:44:55\n\t00-11-22-33-44-55\n\t001122334455\n")
    print("(c) 2013 by Georg Kainzbauer <http://www.gtkdb.de>\n")
    sys.exit(1)

  # extract mac address from argument
  arg = sys.argv[1]
  if len(arg) == 12:
    mac = arg
  elif len(arg) == 17:
    mac = arg.replace(arg[2], '')
  else:
    print("ERROR: Invalid length of MAC address")
    sys.exit(1)

  # check specified MAC address
  if not re.search('[0-9a-fA-F]{12}', mac):
    print("ERROR: Invalid MAC address specified")
    sys.exit(1)

  # create magic packet
  magic_packet = ''.join(['FF' * 6, mac * 16])
  send_data = ''
  for i in range(0, len(magic_packet), 2):
    send_data = ''.join([send_data, struct.pack('B', int(magic_packet[i: i + 2], 16))])

  # send magic packet
  dgramSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  dgramSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  dgramSocket.sendto(send_data, ("255.255.255.255", 9))

  # quit python script
  sys.exit(0)

if __name__ == '__main__':
  main()

Nachdem Sie Das Python Skript erstellt haben, ändern Sie die Rechte der Datei.

pi@raspberrypi ~ $ chmod 0755 wake-on-lan.py

Jetzt können Sie mit dem folgenden Befehl ein Magic Packet generieren und senden. Dadurch kann ein WOL-fähiger Rechner aufgeweckt werden.

pi@raspberrypi ~ $ ./wake-on-lan.py 00:11:22:33:44:55


Dieser Eintrag wurde am 30.06.2013 erstellt und zuletzt am 18.02.2017 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_31_2254.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer