2010-07-13 5 views
1

Je suis expérimenté avec Java, mais je dois intégrer une bibliothèque java dans un code python de collègues. Entrez jython, yay!Envoyer des données hexadécimales brutes dans un paquet udp jython

Nous essayons d'envoyer un paquet UDP avec une section de données très spécifique.

Nous construisons le paquet comme ceci:

version = 0x0001 
referenceNumber = 0x2323 
bookID = byteArray('df82818293819dbafde818ef') 

Pour facile d'explication suppose byteArray prend dans une chaîne de caractères hexadécimaux et retourne un tableau d'octets

Nous construisons le paquet alors:

packet = hex(version) 
packet += hex(referenceNumber) 
packet += bookID 

et l'envoyer sur le socket. Je sais que c'est incorrect, les types de données ne peuvent pas être corrects, donc la concatation ne fera pas le bon choix. Comment pouvons-nous construire ce paquet correctement? La documentation de python indique que s.sendTo() prend une chaîne? Je pense que je veux une alternative à s.sendTo() qui prend un tableau d'octets.

Nous voulons que le paquet pour arriver au serveur avec la section de données udp ressemblant à:

00 01 23 23 df 82 81 82 93 81 9d ba fd e8 18 ef 

Quelle est l'approche appropriée de le faire en python?

Nous utilisons wireshark pour vérifier que le paquet arrive correctement et maintenant la section de données udp semble que python convertit chaque champ en une représentation ASCII. Par exemple, le champ referenceNumber apparaît en tant que valeurs ASCII pour la chaîne littérale '0x2323'. Ce qui est logique car s.sendTo() prend une chaîne.

==================== SOLUTION ========================= =====

Yup, ça marche ... montre à quel point je suis nouveau à python. Pour les curieux, voici le code:

version = '0001' 
referenceNumber = '2323' 

packet = a2b_hex(version) 
packet += a2b_hex(referenceNumber) 

.. etc 

puis juste

s.send(packet) 

Répondre

Questions connexes