[Python] problemi con stringa esadecimale Wake On Lan

Leonardo M. Millefiori mystixx22 a gmail.com
Ven 19 Ott 2012 19:38:52 CEST


Il 19/10/2012 17:46, Daniele Varrazzo ha scritto:
> On 2012-10-19 16:21, Giovanni Vittorio Spina wrote:
>> ciao a tutti ho un problema
>> sto facendo un programmetto che avvia dei pc trmite wke on lan
>> il protocollo da inviare è
>> *s.sendto('\xff'*6+'\x14\xDA\xE9\x11\x15\xC2'*16, 
>> ("255.255.255.255",9))*
>> cioè l'indirizzo broadcast seguito da 16 volte il macaddress e poi la
>> netmask
>> se scrivo in questa forma funziona perfettamente
>>
>> io leggo da un file testo che l'utente riempirà con il suo macaddress una
>> stringa del tipo
>> *macaddress = "14:DA:E9:11:15:C2"*
>> quindi eseguo le operazioni sul testo che ho letto:
>> *macParts = macaddress.split(":")
>> macaddressRightForm=""
>> for part in macParts:
>>          macaddressRightForm +='\x'+part.lower()*
>> *MagicPacket            = macaddressRightForm*16*
>> dopo di che vorrei costruire la stringa da inviare come
>> *s.sendto('\xff'*6+MagicPacket, ("255.255.255.255",9))*
>> e così non ne vuol sapere di funzionare...
>> è come se facesse delle conversioni implicite per il fatto che sono
>> valori
>> esadecimali
>> potete aiutarmi???
>> grazie
>> Vittorio
> 
> quando dici es. s.sendto('\xff') non stai mandando una stringa di 4
> caratteri, ma uno solo: il byte con valore 255. Il formato '\xnn' è come
> la stringa viene "rappresentata", visto che quei caratteri non sono
> stampabili.
> 
> Quindi se hai un macaddress in testo: "14:DA:E9:11:15:C2" penso tu debba
> trasformarlo in bytes. Qualcosa come
> 
> In [1]: macaddr = "14:DA:E9:11:15:C2"
> 
> In [4]: ''.join(chr(int(x, 16)) for x in macaddr.split(':'))
> Out[4]: '\x14\xda\xe9\x11\x15\xc2'
> 
> Questo *dovrebbe* essere il tuo macaddressRightForm.
> 

Potresti anche usare il modulo struct:
[1] http://code.activestate.com/recipes/358449-wake-on-lan/
[2] http://docs.python.org/library/struct.html

LMM



Maggiori informazioni sulla lista Python