/// <summary> /// Reads a stream and returns the raw blocks in the order they were written /// </summary> /// <param name="stream">Stream in pcap-next-generation format</param> /// <returns></returns> public static IEnumerable <Block> ReadForward(Stream stream) { var interfaces = new List <InterfaceDescriptionBlock>(); using (var reader = new BinaryReader(stream)) { while (true) { if (stream.Position == stream.Length) { yield break; } BlockType type = (BlockType)reader.ReadUInt32(); UInt32 length = reader.ReadUInt32(); switch (type) { case BlockType.SectionHeaderBlock: yield return(new SectionHeaderBlock(type, length, reader)); break; case BlockType.InterfaceDescriptionBlock: var interfacceDesc = new InterfaceDescriptionBlock(type, length, reader); interfaces.Add(interfacceDesc); yield return(interfacceDesc); break; case BlockType.EnhancedPacketBlock: yield return(new EnhancedPacketBlock(type, length, reader, interfaces)); break; default: yield return(new GenericBlock(type, length, reader)); break; } } } }
/// <summary> /// Reads a stream and returns the raw blocks in the order they were written /// </summary> /// <param name="stream">Stream in pcap-next-generation format</param> /// <returns></returns> public static IEnumerable<Block> ReadForward(Stream stream) { var interfaces = new List<InterfaceDescriptionBlock>(); using (var reader = new BinaryReader(stream)) { while (true) { if (stream.Position == stream.Length) yield break; BlockType type = (BlockType)reader.ReadUInt32(); UInt32 length = reader.ReadUInt32(); switch (type) { case BlockType.SectionHeaderBlock: yield return new SectionHeaderBlock(type, length, reader); break; case BlockType.InterfaceDescriptionBlock: var interfacceDesc = new InterfaceDescriptionBlock(type, length, reader); interfaces.Add(interfacceDesc); yield return interfacceDesc; break; case BlockType.EnhancedPacketBlock: yield return new EnhancedPacketBlock(type, length, reader, interfaces); break; default: yield return new GenericBlock(type, length, reader); break; } } } }