Skip to content

Instantly share code, notes, and snippets.

@oscarmorrison
Created November 6, 2016 14:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oscarmorrison/6ebd9344e16448121ef4a5cdea1427b4 to your computer and use it in GitHub Desktop.
Save oscarmorrison/6ebd9344e16448121ef4a5cdea1427b4 to your computer and use it in GitHub Desktop.
Kankun plug gist for MacOS (OSX)
#!/usr/bin/python
import os
import socket
import sys
def encode_packet(data):
output = bytearray()
for i in range(0, len(data)):
tmpoutput = bytearray([0, data[i]])
output.extend(tmpoutput)
return output
def get_mac(address, ping=False):
if ping:
os.system("ping -c 1 -W 1 " + address)
os.system("arp -a > ~/.arpcache")
with open(".arpcache", "r") as f:
for line in f:
data = line.split()
ip = data[1].strip('()')
if ip == address:
# print(ip, data[3])
return data[3]
return None
def generate_packet(address, mcmd, scmd):
mac = get_mac(address)
if mac == None:
mac = get_mac(address, ping=True)
macdata = mac.split(":")
payload = bytearray([0x00, 0x00, 0x09, 0xaa, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, int(macdata[0], 16), int(macdata[1], 16), int(macdata[2], 16), int(macdata[3], 16), int(macdata[4], 16), int(macdata[5], 16), 0x00, 0x00, mcmd, scmd])
packet = bytearray([0x00, 0x31, 0x11])
encodedpayload = encode_packet(payload)
packet.extend(encodedpayload)
checksum = 0
for i in range(1, len(packet)):
checksum += packet[i]
checksum = checksum & 0xff
packet.append(checksum)
packet.append(0xff)
return packet
def on(address):
packet = generate_packet(address, 1, 1)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print(address, packet, sock)
sock.sendto(packet, (address, 1025))
def off(address):
packet = generate_packet(address, 1, 2)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(packet, (address, 1025))
if len(sys.argv) != 3:
print "Usage: %s address on|off" % sys.argv[0]
sys.exit(1)
if sys.argv[2] == "on":
on(sys.argv[1])
elif sys.argv[2] == "off":
off(sys.argv[1])
else:
print "Usage: %s address on|off" % sys.argv[0]
sys.exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment