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公司开发推广的技术,受到网卡厂商的支持,现在的网卡基本都支持这个功能。