遇到1A字节时,dpkt会错误地读取错误的字节数为

时间:2018-06-26 00:22:48

标签: python tcp network-analysis dpkt

我目前正在使用一个名为CAPTCP的工具,该工具使用dpkt python库进行TCP分析。尝试一次处理pcap文件中的数据包时,我100%遇到了问题。我真的不确定如何继续前进,因此在这里寻求经验丰富的程序员的帮助。

以下是发生问题的时间表:

  1. 所有数据包均已正确处理并解码,直到在数据包内部遇到字节“ 1A”为止。

  2. 当遇到“ 1A”字节时,以下代码行将停止读取进一步包括字节“ 1A”的数据包。例如,如果原始数据包的长度为1500字节,并且在第41个字节位置遇到“ 1A”字节,则PCAP读取器仅将40个字节读取到标识符“ buf”中。

  3. 此后,它会尝试以单个数据包的形式读取近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

0 个答案:

没有答案