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); }
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); }