【问题标题】:Receiving UDP packets with wrong checksum in Python在 Python 中接收校验和错误的 UDP 数据包
【发布时间】:2012-03-29 18:59:37
【问题描述】:

我在 PC 上运行服务器应用程序,它接收来自客户端的 UDP 数据包。 UDP 数据包被接收(在 WireShark 中验证),但包含错误的校验和。我无法控制客户端,需要能够在 Python 中接收这些数据包。以下代码看不到数据包:

UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)

while 1:
    data,addr = UDPSock.recvfrom(buf)
    if not data:
        print "Client has exited!"
        break
    else:
        print "\nReceived message '", data,"'"

UDPSock.close()

无论如何,在 Python 中我可以接收格式错误的 UDP 数据包?

【问题讨论】:

  • 你知道校验和错误的原因吗?我的意思是这应该由 UDP 客户端处理。您发布的代码看不到数据包,因为它可能被下划线网络设备抛出,因为校验和错误,请解决该问题。
  • 你怎么知道校验和是错误的?在 sending 系统上运行的 Wireshark 经常(现在几乎总是)报告错误的校验和,因为校验和计算被卸载到适配器并且驱动程序不会费心去做校验和。这是一个众所周知的伪问题。但是,如果您在 receiving 系统上收到错误的校验和,那就是另一个问题了。
  • 如果你真的得到了错误的校验和,那么我们将需要了解两端以及两个系统之间路径上的物理硬件特性。
  • 客户端是带有PHY芯片的FPGA。所有 MAC 层都在 FPGA 上完成。我没有 FPGA 的源代码,所以无法控制它。我假设校验和不正确,因为 Wireshark 中的校验和验证已关闭,并且它能够接收数据包。

标签: python udp checksum


【解决方案1】:

找到了解决办法。

我将pycap 库与dpkt 结合使用。对于旧版本的 Python,pycap 模块已经过时,但在“问题”中,有人发布了更新的二进制文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2015-02-23
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多