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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a