在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.