【问题标题】:Send Raw hex data in jython udp packet在 jython udp 数据包中发送原始十六进制数据
【发布时间】:2010-07-13 21:17:54
【问题描述】:

我有使用 Java 的经验,但我必须将 Java 库集成到同事的 Python 代码中。输入 jython,耶!

我们正在尝试发送带有非常特定数据部分的 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() 需要一个字符串。

====================解决方案========================== ====

是的,就是这样...显示了我对 python 的了解程度。对于好奇,这里是代码:

version = '0001'
referenceNumber = '2323'

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

.. etc

那么就

 s.send(packet)

【问题讨论】:

    标签: java python sockets jython


    【解决方案1】:

    查看binascii 模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多