Пример #1
0
    public static PcapngBlockHeader read(BinaryReader binaryReader)
    {
        PcapngBlockHeader newObj = new PcapngBlockHeader();

        newObj.blockType        = binaryReader.ReadUInt32();
        newObj.blockTotalLength = binaryReader.ReadUInt32();

        uint tsLow       = 0;
        uint capturedLen = 0;

        if (newObj.blockType == 6)
        {
            newObj.interfaceID = binaryReader.ReadUInt32();
            newObj.tsHigh      = binaryReader.ReadUInt32();
            newObj.tsLow       = binaryReader.ReadUInt32();
            newObj.capturedLen = binaryReader.ReadUInt32();
            newObj.packetLen   = binaryReader.ReadUInt32();
        }
        else if (newObj.blockType == 3)
        {
            newObj.packetLen   = binaryReader.ReadUInt32();
            newObj.capturedLen = newObj.blockTotalLength - 16;
        }

        return(newObj);
    }
Пример #2
0
        private static PcapngBlockHeader readPcapngBlockHeader(BinaryReader binaryReader, int curPacket)
        {
            if (binaryReader.BaseStream.Length - binaryReader.BaseStream.Position < 8)
            {
                throw new InvalidDataException("Stream cut short (packet " + curPacket + "), stopping read: " + (binaryReader.BaseStream.Length - binaryReader.BaseStream.Position));
            }

            long blockStartPos = binaryReader.BaseStream.Position;

            PcapngBlockHeader blockHeader = PcapngBlockHeader.read(binaryReader);

            if (blockHeader.capturedLen > 50000)
            {
                throw new InvalidDataException("Enormous packet (packet " + curPacket + "), stopping read: " + blockHeader.capturedLen);
            }

            // Make sure there's enough room for an ethernet header
            if (blockHeader.capturedLen < 14)
            {
                binaryReader.BaseStream.Position += blockHeader.blockTotalLength - (binaryReader.BaseStream.Position - blockStartPos);
                return(null);
            }

            return(blockHeader);
        }