2017-11-01 8 views
0

ををstrには「バイト」オブジェクトを変換できません、私はパッケージからのデータを解析するために見つけたコードの断片です。私はコードを実行するとエラーを上回ります。誰かがこの理由を説明できますか?これは、小さなネットワークスニッフィングプログラムの風景です。Pythonのソケットデータ:以下は、暗黙的に

if protocol == 6 : 
     t = iph_length + eth_length 
     tcp_header = packet[t:t+20] 
     tcph = unpack('!HHLLBBHHH' , tcp_header) 
     source_port = tcph[0] 
     dest_port = tcph[1] 
     sequence = tcph[2] 
     acknowledgement = tcph[3] 
     doff_reserved = tcph[4] 
     tcph_length = doff_reserved >> 4 

     print ('Source Port : ' + str(source_port) + ' Dest Port : ' + str(dest_port) + ' Sequence Number : ' + str(sequence) + ' Acknowledgement : ' + str(acknowledgement) + ' TCP header length : ' + str(tcph_length)) 

     h_size = eth_length + iph_length + tcph_length * 4 
     data_size = len(packet) - h_size 

     #get data from the packet 
     data = packet[h_size:] 

     print ('Data : ' + data) 
+0

の下に使用しますが、入力データを提供することはできますか? –

+0

残念ながら、 –

答えて

1

をお読みいただきありがとうございましたことは、あなたのコード内の文字列としてバイトオブジェクトを使用しているようです。文字列としてそれを使用する前に、あなたが問題に直面している場合は

>>> b"abcde".decode("utf-8") 
    u'abcde' 
    >>> b"slade".decode("utf-8") 
    u'slade' 
    >>> 

をデコードする<bytesobject>.decode("utf-8")を使用してコード

b'Z\t.\xf0\xdd\xbb\x84\xb5\x9c\xf9\x080\x08\x00E\x00\x004\xa‌​7\xe6\x00\x000\x06\x‌​1ax\x98B\xf8\xb5h\xe‌​c\xce\x81\xf0\x92\x0‌​0\x16\xd4}\x9fd\x18\‌​xe8y\x94\x80\x10\x7f‌​\xfe*\xfa\x00\x00\x0‌​1\x01\x08\nT\xb2\xa9‌​ZC\xdb\xcan'.decode(‌​"utf-8", "ignore") 
+0

バイナリであるため、 : 'utf-8'コーデックは、位置4のバイト0x9eをデコードできません:無効な開始バイト –

+0

UnicodeDecodeError:私はすでにパッケージデータをデコードし、私はUTF-8には、いくつかの位置でバイトをデコードすることができないというエラーを得た応答をありがとう、私は、ネットワーク内のトラフィック分析のために、このフラグメントを使用すると、入力されたデータは明らかに –

+0

エンコードされた文字列は何ですか?それを印刷できますか?また、 'unicode()' –

関連する問題