Tykwol
From TykWiki
Jump to navigationJump to search
#!/usr/local/bin/python #################################################################################### # tykwol.py # This is a wake-on-lan magic packet sender written in python and scapy. I wrote it # because I couldn't find any WOL tools that allows the user to specify interface # on a multi homed box, when broadcasting the WOL magic packet. This script takes a # mac address and an interface as arguments, and sends the magic packet out the # specified interface to wake the machine with the specified mac. It is an extension # of the WOL example in the Scapy documentation. # # This script requires: # - Python - http://www.python.org/ - /usr/ports/lang/python26 on FreeBSD # - Scapy - http://www.secdev.org/projects/scapy/ - /usr/ports/net/scapy on FreeBSD # # /Tykling <tykling@gmail.com> - v1.0 december 2009 #################################################################################### #import needed modules import sys from scapy.all import * #check number of arguments if len(sys.argv) != 3: sys.exit("Usage: " + sys.argv[0] + " em0 1234567890ab - where em0 is the interface and 1234567890ab is the mac address to wake up.") #set variables ifc = sys.argv[1] hexmac = sys.argv[2] #remove colon from the mac hexmac = hexmac.replace(":", "") #remove dot from the mac (thanks cisco) hexmac = hexmac.replace(".", "") #remove dashes from the mac (thanks microsoft) hexmac = hexmac.replace("-", "") #check length of the supplied mac address if len(hexmac) != 12: sys.exit("Mac address must be 12 digits - allowed seperators are colon (:) dash (-) and dot (.)!") #decode the hex mac address to ascii mac = hexmac.decode("hex") #define the FF byte (the magic packet needs six FF bytes as padding in the beginning of the packet) eff = '\xff' #the main procedure def main(): #build and send the magic packet sendp(Ether(dst='ff:ff:ff:ff:ff:ff') /IP(dst='255.255.255.255') /UDP(dport=9) /Raw(eff*6 + mac*16),iface=ifc) #a little output to the user print "Sent magic packet to", hexmac, "on interface", ifc #call the main procedure main()