2016-09-24 26 views
0

私のネットワーク上のコンピュータに魔法のパケットを送信するためにpythonスクリプトを実行しようとしています。他のコンピュータでも動作しますが、自分のMACアドレスでスクリプトを実行しようとするとエラーが発生します。WOL MACアドレスが動作しません

これは10.0.0.129は私のローカルアドレスと30-5A-3A-03から82-AEは私の物理アドレスであることであることで、私のPythonスクリプト

#!/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') 

です。

私はこのエラーが再び

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')を変更し、それが動作する、またはその代わりという行に変更:

を" - " separaとして使用したい場合は

addr_byte = ethernet_address.split('-') 

addr_byte = ethernet_address.split(':') 

tors。

希望すると便利です。

+0

ああ私の神。私はとても愚かです。どうして私はこれを見ませんでしたか?ありがとうございました! –

関連する問題