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'
python实现远程唤醒windows
最新推荐文章于 2024-02-28 11:50:03 发布