在jython udp数据包中发送Raw十六进制数据

时间:2010-07-13 21:17:54

标签: java python sockets jython

我有使用Java的经验,但我必须将java库集成到co-worker python代码中。输入jython,yay!

我们正在尝试发送带有非常特定数据部分的UDP数据包。

我们正在建立这样的数据包:

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

为了便于解释,假设byteArray接受一个十六进制数字字符串并返回一个字节数组

然后我们构建数据包:

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

并将其发送到套接字。

我知道这是不正确的,数据类型不对,所以concat不会做正确的事情。我们如何正确地建立这个数据包? python文档说s.sendTo()接受一个字符串?我想我想要一个s.sendTo()的替代方法,它接受一个字节数组。

我们希望数据包到达服务器,其中udp数据部分如下所示:

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

在python中执行此操作的正确方法是什么?

我们正在使用wireshark来验证数据包是否正确到达,现在udp数据部分看起来好像python将每个字段转换为ascii表示。例如,referenceNumber字段与文字字符串'0x2323'的ascii值相对应。这是有道理的,因为s.sendTo()接受一个字符串。

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

是的,这样做......显示我对python的新意义。对于好奇,这里是代码:

version = '0001'
referenceNumber = '2323'

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

.. etc

然后只是

 s.send(packet)

1 个答案:

答案 0 :(得分:1)

查看binascii模块。