Sending Wake-on-LAN packets to a Windows 11 laptop or MacBook requires generating and transmitting a specific "magic packet" containing the target device's MAC address. This Python script leverages standard network libraries to broadcast this packet over UDP, allowing remote systems to power on compatible hardware from a sleeping state.
Understanding the Magic Packet
The core mechanism behind Wake-on-LAN (WOL) is the magic packet. This is a specific frame sent over the network that contains the target device's Media Access Control (MAC) address repeated six times within a payload. The NIC (Network Interface Card) listens for this pattern even when the computer is in a low-power sleep state, provided WOL is enabled in the BIOS/UEFI and operating system settings.
For Windows 11 laptops, the process involves ensuring the network adapter is configured to allow wake triggers. Similarly, macOS devices require specific configurations in System Settings to accept these packets. The Python script acts as the initiator, constructing the binary data required for transmission.
Prerequisites for Windows 11
Before running the script, you must configure the Windows 11 machine correctly. Open the Device Manager and locate your Network Adapter. Under the Power Management tab, ensure that "Allow this device to wake the computer" and "Only allow a magic packet to wake the computer" are checked. Additionally, disable Fast Startup in the Control Panel under Power Options, as this feature can sometimes prevent the NIC from entering the correct low-power listening state.
Prerequisites for MacBook
On macOS, the configuration is handled through System Settings. Navigate to Energy Saver or Battery settings depending on the model year. Enable "Wake for Network Access." It is also crucial to note that many modern MacBooks require a wired Ethernet connection to respond to WOL packets; Wi-Fi WOL support varies by model and may not be reliable without additional software like
wakeonlan installed locally.
Python Script Implementation
The following Python code creates a simple client to send the magic packet. Ensure you have Python 3 installed. The script uses the
socket library to create a UDP socket and broadcasts the packet to the local subnet.
import socket
import struct
def send_wol_packet(mac_address):
# Validate MAC address format
if len(mac_address.replace("-", "").replace(":", "")) != 12:
raise ValueError("Invalid MAC address")
# Convert MAC address to bytes
mac_bytes = bytes.fromhex(mac_address.replace("-", "").replace(":", ""))
# Create the magic packet: 6 bytes of FF followed by 16 repetitions of MAC
header = b'\xff' * 6
payload = mac_bytes * 16
magic_packet = header + payload
# Broadcast the packet
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(magic_packet, ('', 9))
print(f"WOL packet sent to {mac_address}")
# Example usage
# send_wol_packet("00-1A-2B-3C-4D-5E")
This script constructs the necessary binary structure and sends it via UDP port 9. You can modify the destination IP or port if your network requires specific routing. For more complex networking scenarios involving routers, see
Troubleshooting Wake On LAN Over Internet with DDNS.
Running the Script
Save the code to a file named
wol_sender.py. Run it from the terminal with administrative privileges if necessary, especially on Linux or macOS. Pass the target MAC address as an argument or modify the function call directly. If the script executes successfully, you should hear the fans spin up on the target device within a few seconds.
Troubleshooting Common Issues
If the device does not wake, verify the following:
- Firewall Settings: Ensure no firewall is blocking outgoing UDP port 9 traffic.
- Router Configuration: Some routers block broadcast packets. Check if "Multicast/Broadcast Filtering" is enabled.
- Network Segment: WOL typically works only within the same subnet. Crossing VLANs or subnets requires router assistance.
For setups involving multiple routers, such as connecting a second router behind another, refer to
Setting Up a Second Router Behind a Different Router to ensure proper network segmentation and packet forwarding rules are in place.
Frequently Asked Questions
Can I send a WOL packet over the internet?
Yes, but it requires port forwarding on your router and often a Dynamic DNS service to resolve changing IP addresses. Standard WOL relies on broadcast addresses which do not route across the public internet.
Does Wake-on-LAN work over Wi-Fi?
It depends on the device. Many older NICs and some mobile devices do not support WOL over Wi-Fi due to power-saving protocols that shut down the wireless radio completely during sleep.
Why is my Python script failing to send the packet?
Check if you are running the script with sufficient permissions. On Linux and macOS, broadcasting usually requires root access. Also, verify that the MAC address format is correct and matches the target device.
How do I find the MAC address of my laptop?
On Windows, open Command Prompt and run
ipconfig /all. Look for the Physical Address under your active network adapter. On macOS, go to System Settings > Network and view the details of your interface.
Is it safe to use Wake-on-LAN?
WOL is generally safe but exposes your device to potential unauthorized wake attempts if exposed to untrusted networks. Ensure your home network is secured and consider using static IPs or MAC filtering on your router for added security.