[python] – wakeOnLAN

Computer/Netzwerkgerät im Ruhe-/Sleepmodus mit MAC-Addresse 00:01:03:04:05:06 im Subnetz 192.168.2/24 wird durch senden eines Wake-on-LAN-Datenpakets an die SubNetzbroadcast-IPAdresse ‚aufgeweckt‘.

einfach mit fester MAC-Adresse im Script:

#!/usr/bin/env python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto('\xff'*6 + '\x00\x01\x03\x04\x05\x06'*16, ('255.255.255.255', 9))

dynamisch mit MAC-Adresse als commandline-Argument:

#!/usr/bin/env python
# Dateiname: wakeOnLan.py

import re, socket, struct, sys

def main():
  if len(sys.argv) != 2 or sys.argv[1] == '-h' or sys.argv[1] == '--help':
    print("Syntax:\n\twakeOnLan.py \n")
    print("Die MAC-Adresse kann folgende Ausprägungen haben:")
    print("\t00:01:02:03:04:05\n\t00-01-02-03-04-05\n\t000102030405\n")
    sys.exit(1)

  arg = sys.argv[1]
  if len(arg) == 12:
    mac = arg
  elif len(arg) == 17:
    mac = arg.replace(arg[2], '')
  else:
    print("FEHLER: MAC-Adresse hat nicht die korrekte Länge")
    sys.exit(1)

  if not re.search('[0-9a-fA-F]{12}', mac):
    print("FEHLER: ungültige MAC-Addresse")
    sys.exit(1)

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

  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  s.sendto(send_data, ("255.255.255.255", 9))

  # quit python script
  sys.exit(0)

if __name__ == '__main__':
  main()

0 0 vote
Article Rating
Share
Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x