EmptyPage.jp > Gadgets > wol.py
2007年11月18日公開 2011年6月15日更新
Wake on LAN のマジックパケットを送出する Python スクリプトです。リモートからコンピュータの電源をオンにできます。
#!/usr/bin/env python import binascii import socket PORT_DEFAULT = 9 IPADDR_DEFAULT = '' _USAGE = """Usage: python wol.py [options] ... Options: -p, --port Default port is 9 -a, --address Default IP address is '' -h, --help Show this help. """ def sendmagickpacket(macs, ipaddr=IPADDR_DEFAULT, port=PORT_DEFAULT): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) for mac in macs: for sep in ':-': if sep in mac: mac = ''.join([x.rjust(2, '0') for x in mac.split(sep)]) break mac = mac.rjust(12, '0') p = '\xff' * 6 + binascii.unhexlify(mac) * 16 s.sendto(p, (ipaddr, port)) s.close() def main(): import getopt import sys try: opt, args = getopt.getopt(sys.argv[1:], 'hp:a:', ['help', 'port=', 'address=']) except getopt.GetoptError: print _USAGE sys.exit(2) if not args: print _USAGE sys.exit(2) port = PORT_DEFAULT ipaddr = IPADDR_DEFAULT for k, v in opt: if k in ('-h', '--help'): print _USAGE sys.exit() if k in ('-p', '--port'): port = int(v) if k in ('-a', '--address'): ipaddr = v sendmagickpacket(args, ipaddr, port) if __name__ == '__main__': main()
python wol.py [options] MAC_address...
MAC アドレスは 16 進数で表記します(例、001122aabbcc)。00:11:22:aa:bb:cc や 00-11-22-aa-bb-cc のように区切って記述することもできます。複数指定できます。
パブリックドメインです。好きに使ってください。
なお、このスクリプトを使って生じた損害等についての責任は負いかねますのであしからず。