最後活躍 10 months ago

這段 Python 程式碼 用於 實現 Wake-on-LAN (WOL),它能透過 網路廣播 (UDP) 發送 Magic Packet,來喚醒遠端電腦(如伺服器或 NAS)。

修訂 e173a74e1ebfcaea534d211cdf64a20d373a29f0

wake_on_lan.py 原始檔案
1import socket
2
3
4class WakeOnLan:
5 """
6 WOL(Wake on LAN)
7 """
8
9 def __init__(self, macaddress):
10 try:
11 self.macaddress = self.validate_macaddress(macaddress)
12 self.packet = self.create_magic_packet()
13 self.broadcast_address = self.get_broadcast_ip()
14 self.send_magic_packet()
15 except Exception as e:
16 print(e)
17
18 def validate_macaddress(self, macaddress):
19 import re
20
21 macaddress_validate_pattern = "^(?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2})$"
22 if re.match(macaddress_validate_pattern, macaddress):
23 return macaddress
24 else:
25 raise ValueError("Incorrect Mac address")
26
27 def create_magic_packet(self):
28 sep = self.macaddress[2]
29 macaddress_str = self.macaddress.replace(sep, "")
30 return bytes.fromhex("F" * 12 + macaddress_str * 20)
31
32 def get_broadcast_ip(self):
33 import ipaddress
34
35 local_ip = socket.gethostbyname(socket.gethostname())
36 mask = "255.255.255.0"
37 broadcast_address = ipaddress.IPv4Network(
38 local_ip + "/" + mask, False
39 ).broadcast_address
40 return str(broadcast_address)
41
42 def send_magic_packet(self):
43 with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
44 sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
45 sock.sendto(self.packet, (self.broadcast_address, 7))
46 # sock.sendto(self.packet, ("255.255.255.255", 7))
47
48
49mac = "FC-AA-14-B4-4C-18"
50foo = WakeOnLan(mac)
51