Пример #1
0
        private void PeekReader(IReader reader, FileInfo finfo)
        {
            //try
            {
                while (reader.MoveToNextEntry())
                {
                    if (!reader.Entry.IsDirectory)
                    {
                        var readbytes = new byte[4];
                        using (var entryStream = reader.OpenEntryStream())
                        {
                            entryStream.Read(readbytes, 0, 4);

                            var dsource = new DataSource
                            {
                                FileInfo   = finfo,
                                SourceType = SourceType.Zip,
                                ArchiveKey = reader.Entry.Key
                            };


                            if (IsPCAP(readbytes))
                            {
                                var memstream = MemStream(readbytes, entryStream);

                                var pcapreader      = new PCAPReader();
                                var fileReadObjects = pcapreader.ReadStream(memstream);
                                var first           = (PCAPBlock)fileReadObjects.First().ReadObject;
                                var last            = (PCAPBlock)fileReadObjects.Last().ReadObject;
                                dsource.StartTime         = first.DateTime;
                                dsource.EndTime           = last.DateTime;
                                dsource.Packets           = fileReadObjects.Count();
                                dsource.ArchiveSourceType = SourceType.PCAP;
                                UpdateList(dsource);
                            }

                            if (IsPCAPNG(readbytes))
                            {
                                var memstream = MemStream(readbytes, entryStream);

                                var pcapngreader    = new PCAPNGReader();
                                var fileReadObjects = pcapngreader.ReadStream(memstream);
                                var first           = (PCAPNGBlock)fileReadObjects.First().ReadObject;
                                var last            = (PCAPNGBlock)fileReadObjects.Last().ReadObject;
                                dsource.StartTime         = first.Timestamp;
                                dsource.EndTime           = last.Timestamp;
                                dsource.Packets           = fileReadObjects.Count();
                                dsource.ArchiveSourceType = SourceType.PCAPNG;
                                UpdateList(dsource);
                            }
                        }
                    }
                }
            }
            //catch(Exception e)
            {
            }
        }
Пример #2
0
        private void InspectFiles(List <string> fileNames)
        {
            var threads = new List <Thread>();

            foreach (var fileName in fileNames)
            {
                var finfo = new FileInfo(fileName);

                if (pcapReader.CanRead(fileName))
                {
                    var reader          = new PCAPReader();
                    var fileReadObjects = reader.Read(fileName);
                    var first           = (PCAPBlock)fileReadObjects.First().ReadObject;
                    var last            = (PCAPBlock)fileReadObjects.Last().ReadObject;

                    var dsource = new DataSource
                    {
                        FileInfo   = finfo,
                        StartTime  = first.DateTime,
                        EndTime    = last.DateTime,
                        SourceType = SourceType.PCAP,
                        Packets    = fileReadObjects.Count
                    };
                    UpdateList(dsource);
                    continue;
                }
                else if (pcapngReader.CanRead(fileName))
                {
                    var reader          = new PCAPNGReader();
                    var fileReadObjects = reader.Read(fileName);
                    var first           = (PCAPNGBlock)fileReadObjects.First().ReadObject;
                    var last            = (PCAPNGBlock)fileReadObjects.Last().ReadObject;
                    var dsource         = new DataSource
                    {
                        FileInfo   = finfo,
                        StartTime  = first.Timestamp,
                        EndTime    = last.Timestamp,
                        SourceType = SourceType.PCAPNG,
                        Packets    = fileReadObjects.Count
                    };
                    UpdateList(dsource);
                    continue;
                }

                if (SevenZipArchive.IsSevenZipFile(fileName))
                {
                    // because of lousy performance when operating on 7zip, we launch a new thread instead of using tasks
                    var thread = new Thread(() => DoSevenZip(finfo));
                    thread.Start();
                    threads.Add(thread);


                    continue;
                }

                // zip performance is much better and we will not thread
                DoZip(finfo);
            }

            UpdateList("Waiting for all threads to finish");
            foreach (Thread thread in threads)
            {
                thread.Join();
            }

            UpdateList("All threads finished");
        }