[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