Ultima attività 10 months ago

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

timmy ha revisionato questo gist 10 months ago. Vai alla revisione

Nessuna modifica

timmy ha revisionato questo gist 10 months ago. Vai alla revisione

1 file changed, 50 insertions

wake_on_lan.py(file creato)

@@ -0,0 +1,50 @@
1 + import socket
2 +
3 +
4 + class 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 +
49 + mac = "FC-AA-14-B4-4C-18"
50 + foo = WakeOnLan(mac)
Più nuovi Più vecchi