Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字数据分析类型错误:无法隐式地将“bytes”对象转换为str_Python_Sockets - Fatal编程技术网

Python套接字数据分析类型错误:无法隐式地将“bytes”对象转换为str

Python套接字数据分析类型错误:无法隐式地将“bytes”对象转换为str,python,sockets,Python,Sockets,下面是我找到的用于解析包中数据的代码片段。当我运行代码时,我得到了上面的错误。有人能解释一下原因吗。这是一个小型网络嗅探程序。谢谢你的阅读 if protocol == 6 : t = iph_length + eth_length tcp_header = packet[t:t+20] tcph = unpack('!HHLLBBHHH' , tcp_header) source_port = tcph[0] d

下面是我找到的用于解析包中数据的代码片段。当我运行代码时,我得到了上面的错误。有人能解释一下原因吗。这是一个小型网络嗅探程序。谢谢你的阅读

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)

似乎您正在代码中使用bytes对象作为字符串。在将其用作字符串之前,请使用.decodeutf-8进行解码

 >>> b"abcde".decode("utf-8")
    u'abcde'
   >>> b"slade".decode("utf-8")
    u'slade'
    >>> 
如果您面临问题,请使用以下代码

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")

你能提供输入数据吗?不幸的是,不能。因为我在网络中使用这个片段进行流量分析,输入数据明显是二进制的。谢谢你的回复,我已经解码了包数据,我得到了一个错误,UTF-8在某些位置无法解码字节:UnicodeDecodeError:“UTF-8”编解码器无法解码位置4中的字节0x9e:无效的起始字节编码字符串是什么?你能打印出来吗?你也试过了吗?它应该是二进制的。我认为unicode适用于2.7版,而不是3版以上的版本。因为它在新版本B'Z\t.\xf0\xdd\xbb\x84\xb5\x9c\xf9\x080\x08\x00E\x00\x004\xa7\xe6\x00\x000\x06\x1ax\x98B\xf8\xb5h\xec\xce\x81\xf0\x92\x00\x16\xd4}\x9fd\x18\x8y\x94\x80\x10\x7f\xAE*\xfa\x700\x001\x02\x02\xC01\xC01\xC01\xC8中被替换,所以应该忽略这项工作