python实现远程唤醒windows

class RemoteWake(object):
    def __init__(self):
        pass

    def format_mac0(self,mac):
        if len(mac) == 12:
            pass
        elif len(mac) == 17:
            if mac.count(':') == 5 or mac.count('-') == 5:
                sep = mac[2]
                mac = mac.replace(sep, '')
            else:
                raise ValueError('Incorrect MAC format')
        else:
            raise ValueError('Incorrect MAC format')
        return mac

    def format_mac(self,mac):
        mac_re = re.compile(r'''
        (^([0-9A-F]{1,2}[-]){5}([0-9A-F]{1,2})$
        |^([0-9A-F]{1,2}[:]){5}([0-9A-F]{1,2})$
        |^([0-9A-F]{1,2}[.]){5}([0-9A-F]{1,2})$
        )''', re.VERBOSE | re.IGNORECASE)
        # print(re.match(mac_re, mac))
        if re.match(mac_re, mac):
            if mac.count(':') == 5 or mac.count('-') == 5 or mac.count('.'):
                sep = mac[2]
                mac_fm = mac.replace(sep, '')
                return mac_fm
        else:
            raise ValueError('Incorrect MAC format')

    # 方法一:将989096C1FECB格式的mac地址创建唤醒包
    def create_magic_packet0(self,mac):
        data = b'FF' * 6 + (mac * 16).encode()
        print data
        print type(data)
        send_data = b''
        for i in range(0, len(data), 2):
            send_data = send_data + struct.pack(b'B', int(data[i: i + 2], 16))  # int(data[i: i+2], 16) 把16进制转换成整数
        print type(send_data)
        return send_data


    # 方法二:将989096C1FECB格式的mac地址创建唤醒包,使用binascii.unhexlify()方法
    def create_magic_packet(self,mac):
        data = 'FF' * 6 + str(mac) * 16
        # print(data)
        # print(type(data))
        send_data = binascii.unhexlify(data)
        # print(type(send_data))
        return send_data


    def send_magic_packet(self,send_data):
        # broadcast_address = '192.168.255.255'
        broadcast_address = '255.255.255.255'
        port = 9
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        s.sendto(send_data, (broadcast_address, port))


    def boot_computer(self, mac_address):
        try:
            print '正在向 ', mac_address, ' 发送魔法唤醒包!'
            # mac = '98:90:96:C1:FE:CB'
            # 拼接mac地址
            mac = self.format_mac(mac_address)
            # 创建唤醒包
            send_data = self.create_magic_packet(mac)
            # 发送唤醒包
            self.send_magic_packet(send_data)
            return '成功向' + mac_address + '发送唤醒包!'
        except ValueError:
            print '未收到传入的参数\n获取帮助:python3 main_boot_computer.py -h'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值