【发布时间】: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 中的校验和验证已关闭,并且它能够接收数据包。