2016-09-24 7 views
0

Я пытаюсь запустить скрипт python для отправки волшебного пакета на компьютеры в моей сети. Он работает на других компьютерах, но когда я пытаюсь запустить скрипт с собственным MAC-адресом, я получаю сообщение об ошибке.WOL MAC-адрес не работает

Это мой питон скрипт

#!/usr/bin/env python 
#Wake-On-LAN 
# 
# Copyright (C) 2002 by Micro Systems Marc Balmer 
# Written by Marc Balmer, [email protected], http://www.msys.ch/ 
# This code is free software under the GPL 

import struct, socket 

def WakeOnLan(ethernet_address): 

    # Construct a six-byte hardware address 

    addr_byte = ethernet_address.split(':') 
    hw_addr = struct.pack('BBBBBB', int(addr_byte[0], 16), 
    int(addr_byte[1], 16), 
    int(addr_byte[2], 16), 
    int(addr_byte[3], 16), 
    int(addr_byte[4], 16), 
    int(addr_byte[5], 16)) 

    # Build the Wake-On-LAN "Magic Packet"... 

    msg = b'\xff' * 6 + hw_addr * 16 

    # ...and send it to the broadcast address using UDP 

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
    s.sendto(msg, ('10.0.0.129', 9)) 
    s.sendto(msg, ('10.0.0.129', 7)) 
    s.close() 

# Example use 
WakeOnLan('30-5A-3A-03-82-AE') 

С 10.0.0.129 быть моим локальным адресом и 30-5A-3A-03-82-AE является моим физическим адресом.

Когда я пытаюсь запустить сценарий, я получаю эту ошибку

Traceback (most recent call last): 
    File "C:\xampp\htdocs\wol\wolme.py", line 35, in <module> 
    WakeOnLan('30-5A-3A-03-82-AE') 
    File "C:\xampp\htdocs\wol\wolme.py", line 15, in WakeOnLan 
    hw_addr = struct.pack('BBBBBB', int(addr_byte[0], 16), 
ValueError: invalid literal for int() with base 16: '30-5A-3A-03-82-AE' 

Опять же, никакой другой компьютер не имеет эту проблему. Любая помощь оценивается.

ответ

0

он не будет работать на любой адрес, разделенные «-», из-за этой линии:

addr_byte = ethernet_address.split(':') 

просто изменить WakeOnLan('30-5A-3A-03-82-AE') с WakeOnLan('30:5A:3A:03:82:AE') и он будет работать, или вместо того, чтобы изменить строку, которая говорит:

addr_byte = ethernet_address.split(':') 

с

addr_byte = ethernet_address.split('-') 

, если вы хотите использовать "-" как separa TORs.

Надеюсь, это поможет!

+0

О, боже мой. Я так глуп. Как я не видел этого. СПАСИБО! –