import socket

def send_magic_packet(mac_address, ip_address):
    # 构建魔术包数据
    #mac_hex = mac_address.replace(':', '').decode('hex')   PY2写法
    mac_hex = bytes.fromhex(mac_address.replace(':', ''))  #PY3写法
    magic_packet = b'\xff' * 6 + mac_hex * 16

    # 创建UDP套接字
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

    # 发送魔术包 端口号9
    sock.sendto(magic_packet, (ip_address, 9))

    # 关闭套接字
    sock.close()

mac_address = '11:22:22:56:15:77'
ip_address = '192.168.1.38'
send_magic_packet(mac_address, ip_address)
MagicPacket 数据包格式

6字节0xFF + 16次MAC地址

以 6 个 0xFF 字节开始,然后重复 16 次 MAC 地址

WakeOnLAN简称WOL,是一种电源管理功能。WakeOnLAN的实现,主要是向目标主机发送特定格式的数据包,而这个数据包被称作魔术包(MagicPacket),MagicPacket格式是由AMD公司开发推广的技术,受到网卡厂商的支持,现在的网卡基本都支持这个功能。