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\xa7\xe6\x00\x000\x06\x1ax\x98B\xf8\xb5h\xec\xce\x81\xf0\x92\x00\x16\xd4}\x9fd\x18\xe8y\x94\x80\x10\x7f\xfe*\xfa\x00\x00\x01\x01\x08\nT\xb2\xa9ZC\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中被替换,所以应该忽略这项工作