[Python] problemi con stringa esadecimale Wake On Lan

Daniele Varrazzo piro a develer.com
Ven 19 Ott 2012 17:46:10 CEST


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.

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python