first commit
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
import socket
|
||||
|
||||
|
||||
MAC_RE = re.compile(r"^[0-9A-Fa-f]{2}(?::[0-9A-Fa-f]{2}){5}$")
|
||||
|
||||
|
||||
def normalize_mac(mac: str) -> str:
|
||||
value = mac.strip().replace("-", ":")
|
||||
if not MAC_RE.match(value):
|
||||
raise ValueError(f"Adresse MAC invalide : {mac}")
|
||||
return value.upper()
|
||||
|
||||
|
||||
def send_magic_packet(mac: str, broadcast: str = "255.255.255.255", port: int = 9) -> None:
|
||||
normalized = normalize_mac(mac)
|
||||
raw_mac = bytes.fromhex(normalized.replace(":", ""))
|
||||
packet = b"\xff" * 6 + raw_mac * 16
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
sock.sendto(packet, (broadcast, port))
|
||||
Reference in New Issue
Block a user