2012-03-29 18 views
0

我在一台从客户端接收UDP数据包的PC上运行服务器应用程序。收到的UDP数据包(在Wireshark中验证),但包含错误的校验和。我无法控制客户端,并需要能够在Python中接收这些数据包。以下代码没有看到数据包:在Python中接收到带有错误校验和的UDP数据包

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数据包?

+0

你知道校验和错误的原因吗?我的意思是假设由UDP客户端处理。您发布的代码看不到数据包,因为它可能被下划线网络设备抛出,因为校验和错误,可以解决该问题。 – 2012-03-29 19:06:00

+1

你怎么知道校验和是错误的?在_sending_系统上运行的Wireshark经常(现在几乎总是)报告错误的校验和,因为校验和计算被卸载到适配器,并且驱动程序不会执行校验和。这是一个众所周知的伪问题。但是,如果您在_receiving_系统上收到错误的校验和,那是另一个问题。 – 2012-03-29 19:35:28

+0

如果你真的得到了错误的校验和,那么我们需要知道两端系统和两个系统之间的物理硬件特性。 – 2012-03-29 19:37:09

回答

0

找到解决方案。

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