Esempio n. 1
0
        /// <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;
                    }
                }
            }
        }
Esempio n. 2
0
        /// <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;
                    }
                }
            }
        }