在WOL介绍里说过WOL数据包的最简格式是由6个字节的255和目标计算机的48位MAC地址,重复16次组成,并且这个数据包可以包含在任何协议中,最常见的是包含在UDP中。 登录后复制 import socket import struct class WOL_SEND(): def __init__(self,wake_ip,wake_mac): self.wake_ip = wake_ip self.wake_mac = wake_mac def create_wol_package(self): wake_mac_list = self.wake_mac.split("-") print(wake_mac_list) mac = struct.pack("BBBBBB", *[int(wake_mac_list[i],16) for i in range(6)]) # 将mac地址转二进制 broadcast_mac = b"\xff"*6 # 生成6字节的FF wol = broadcast_mac+mac*16 #将6字节FF与目标mac的16次进行合并得到wol幻数据包 return wol def send_wol_package(self): sockets = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sockets.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1) #设置广播 sockets.sendto(self.create_wol_package(), (self.wake_ip, 8)) def main(): # wake_ip =input("请输入唤醒设备的局域网IP地址:") wake_ip = "192.168.1.112" # wake_mac = input("请输入即将发送wol远程唤醒数据包,请输入唤醒设备mac地址:") wake_mac = "D4-5D-64-08-16-81" # B4.2E.99.C3.DD.EC ws = WOL_SEND(wake_ip, wake_mac) #创建对象,传入MAC地址与IP地址 ws.send_wol_package() print(ws.create_wol_package()) print("[+]已发送远程指令") if __name__ == "__main__": main() 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38. 原创作者: u_15642578 转载于: https://blog.51cto.com/u_15642578/11722068