python - 读取 UDP 数据包

标签 python networking udp

我在解析 UDP 数据包时遇到了一些问题。我正在接收数据包并将数据和发件人地址存储在变量“数据”和“地址”中:

数据,地址 = UDPSock.recvfrom(buf)

这会将数据解析为字符串,我现在无法将其转换为字节。我知道数据报包的结构,总共有 28 个字节,而我要取出的数据是字节 17:28。

我试过这样做:

  mybytes = data[16:19]
  print struct.unpack('>I', mybytes)
  --> struct.error: unpack str size does not match format

还有这个:

  response = (0, 0, data[16], data[17], 6)
  bytes = array('B', response[:-1])
  print struct.unpack('>I', bytes)
  --> TypeError: Type not compatible with array type

还有这个:

  print "\nData byte 17:", str.encode(data[17])
  --> UnicodeEncodeError: 'ascii' codec can't encode character u'\xff' in position 0: ordinal not in range(128)

更具体地说,我想解析我认为是 unsigned int 的东西。现在我不确定接下来要尝试什么。我对 Python 中的套接字和字节转换完全陌生,所以任何建议都会有所帮助:)

谢谢, 托马斯

最佳答案

unsigned int32 的长度为 4 个字节,因此您必须将 4 个字节输入 struct.unpack

替换

mybytes = data[16:19]

mybytes = data[16:20]

(右边的数字是不包括的第一个字节,即 range(16,19) = [16,17,18]),你应该可以开始了。

关于python - 读取 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501882/

相关文章:

c++ - 如何辨别网络流量

python nameerror 名称未定义

python - 使用通过的 Django ManyToManyField 排序

python:对一系列元素的列表列表进行排序

c++ - 非阻塞发送功能

networking - 虚拟盒子 + vagrant centos8 盒子( headless )从互联网访问

python - 无法找到序号 241

c# - 同一台机器上UDP失败的可能性大吗?

c++ - 如何从一个 UDP 套接字处理多个客户端?

C# UDP 广播客户端/服务器不工作