2012-03-29 40 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() 

とにかく私は不正な形式のUDPパケットを受け取ることができますか?

+0

チェックサムが間違っている理由をご存知ですか?つまり、それはUDPクライアントによって処理されると考えられます。あなたが投稿したコードは、チェックサムが間違っているため、その問題を解決するため、下線のネットワークデバイスによって破棄される可能性があるため、パケットは表示されません。 –

+1

チェックサムが間違っていることをどのように知っていますか? _sending_システム上で実行されているWiresharkは、チェックサム計算がアダプターにオフロードされ、ドライバーがチェックサムを実行するのを邪魔しないため、(ほとんどの場合、今日は)悪質なチェックサムを報告することがよくあります。これはよく知られている擬似問題です。しかし、_receiving_システムでチェックサムが悪い場合は、別の問題です。 –

+0

実際にチェックサムが悪い場合は、両システム間のパスの両端と物理ハードウェアの特性を知る必要があります。 –

答えて

0

解決策が見つかりました。

dpktと組み合わせてpycapライブラリを使用しました。 pycapモジュールはPythonの古いバージョンでは古くなっていますが、誰かが更新されたバイナリを投稿した "Issues"にあります。

関連する問題