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