我目前正在使用一个名为CAPTCP的工具,该工具使用dpkt python库进行TCP分析。尝试一次处理pcap文件中的数据包时,我100%遇到了问题。我真的不确定如何继续前进,因此在这里寻求经验丰富的程序员的帮助。
以下是发生问题的时间表:
所有数据包均已正确处理并解码,直到在数据包内部遇到字节“ 1A”为止。
当遇到“ 1A”字节时,以下代码行将停止读取进一步包括字节“ 1A”的数据包。例如,如果原始数据包的长度为1500字节,并且在第41个字节位置遇到“ 1A”字节,则PCAP读取器仅将40个字节读取到标识符“ buf”中。
此后,它会尝试以单个数据包的形式读取近1.5GB以上的数据,然后再运行“ MemoryError”或“ OverflowError:Python int太大而无法转换为C long”。
< / li>以下是在PCAP.py中发现问题的代码行(已添加打印语句以用于调试)
def iter (自己):
while 1:
buf = self.__f.read(PktHdr.__hdr_len__)
#print(len(buf))
#print(" ".join(x.encode('hex') for x in buf))
if not buf:
break
hdr = self.__ph(buf)
#print(hdr.caplen) -> Here length is 1500 bytes
buf = self.__f.read(hdr.caplen) ###Issue occurs here
#print(" ".join(x.encode('hex') for x in buf))
#print(len(buf)) -> Here length is 40 bytes when 1A byte is encountered
yield (hdr.tv_sec + (hdr.tv_usec / self._divisor), buf)
我已经不知所措了,非常感谢能帮助您克服这个基本阅读问题。期待在这里找到解决方案。
谢谢!
P.S。 Python版本是2.7