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