Python WOL/WakeOnLan/網絡喚醒數據包發送工具

按照WOL協議規定,在電腦處於關機而網卡供電狀態下,從網絡上接收到WOL魔法包後會自動加電開機。這種方式能夠很方便的使用在需要進行遠程管理的環境中。此程序實現了網絡喚醒的魔法數據包發送功能,可以實現遠程開機。

 

假設需要被喚醒PC網卡MAC地址爲:01:02:03:04:05:06 則WOL魔法包結構如下:

 

FF FF FF FF FF FF | 01 02 03 04 05 06 ...重複16次... 01 02 03 04 05 06 | 00 00 00 00 00 00

 

前段的6字節0xff 和尾部的 6字節0x00 無需變化照抄即可,數據包總長度:108 字節

 

通過把以上數據包發送到本地子網的廣播地址(代碼中爲:192.168.1.255)的UDP端口9即可喚醒該PC

 

注意:此代碼需要python解釋器運行,Windows/Linux/Mac OS 通用

 

使用方法:

 

1. 保存以下代碼到 wol.py

 

#!/usr/bin/env python
#coding=utf-8

import socket, sys
import struct
def to_hex_int(s):
    return int(s.upper(), 16)
 
dest = ('192.168.1.255', 9)
 
if len(sys.argv) < 2:
 print("usage: %s <MAC Address to wakeup>" % sys.argv[0])
 sys.exit()
 
mac = sys.argv[1]
 
spliter = ""
if mac.count(":") == 5: spliter = ":"
if mac.count("-") == 5: spliter = "-"
 
if spliter == "":
 print("MAC address should be like XX:XX:XX:XX:XX:XX / XX-XX-XX-XX-XX-XX")
 sys.exit()
 
parts = mac.split(spliter)
a1 = to_hex_int(parts[0])
a2 = to_hex_int(parts[1])
a3 = to_hex_int(parts[2])
a4 = to_hex_int(parts[3])
a5 = to_hex_int(parts[4])
a6 = to_hex_int(parts[5])
addr = [a1, a2, a3, a4, a5, a6]
 
packet = chr(255) + chr(255) + chr(255) + chr(255) + chr(255) + chr(255)
 
for n in range(0,16):
 for a in addr:
  packet = packet + chr(a)
 
packet = packet + chr(0) + chr(0) + chr(0) + chr(0) + chr(0) + chr(0)
 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.sendto(packet,dest)
 
print("WOL packet %d bytes sent !" % len(packet))

 

2. 使用方法爲命令行下執行(linux/Mac可以不需要寫命令最開始的python):

 

python ./wol.py 01:02:03:04:05:06

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章