timmy 已修改 10 months ago. 還原成這個修訂版本
沒有任何變更
timmy 已修改 10 months ago. 還原成這個修訂版本
1 file changed, 50 insertions
wake_on_lan.py(檔案已創建)
| @@ -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) | |
上一頁
下一頁