protected IEnumerable <Frame> GetFramesFromPcapAndDefragment(Uri pcapUri) { var ipv4DefragmentationEngine = new Ipv4DefragmentationEngine(this._services.GetService <ILoggerFactory>().CreateLogger <Ipv4DefragmentationEngine>()); var frames = new List <Frame>(); var pcapLoader = this._services.GetService <IPcapLoader>(); using (pcapLoader) { RawCapture rawCapture; pcapLoader.Open(pcapUri); while ((rawCapture = pcapLoader.GetNextPacket()) != null) { Frame frame; var parsedPacket = Packet.ParsePacket(pcapLoader.LinkType, rawCapture.Data); if (!(parsedPacket.PayloadPacket is IPPacket ipPacket)) { continue; ; } if (ipPacket is IPv4Packet ipv4Packet && Ipv4Helpers.Ipv4PacketIsFragmented(ipv4Packet)) { var(isDefragmentationSuccessful, firstTimeStamp, defragmentedIpv4Packet) = ipv4DefragmentationEngine.TryDefragmentFragments( FrameFactory.CreateFromIpPacket(ipv4Packet, rawCapture.Timeval.Date.Ticks)); if (!isDefragmentationSuccessful) { continue; } frame = FrameFactory.CreateFromIpPacket(defragmentedIpv4Packet, firstTimeStamp); }
protected IEnumerable <Frame> GetFramesFromPcapAndDefragment(String pcapFileName) { var ipv4DefragmentationEngine = new Ipv4DefragmentationEngine(this._services.GetService <ILoggerFactory>().CreateLogger <Ipv4DefragmentationEngine>()); var frames = new List <Frame>(); foreach (var(packet, timestampTicks) in this.GetPacketsFromPcap(pcapFileName)) { Frame frame; if (!(packet.PayloadPacket is IPPacket ipPacket)) { continue; } if (ipPacket is IPv4Packet ipv4Packet && Ipv4Helpers.Ipv4PacketIsFragmented(ipv4Packet)) { var(isDefragmentationSuccessful, defragmentedIpv4Packet, fragments) = ipv4DefragmentationEngine.TryDefragmentFragments(FrameFactory.CreateFromIpPacket(ipv4Packet, timestampTicks)); if (!isDefragmentationSuccessful) { continue; } frame = FrameFactory.CreateFromDefragmentedIpPacket(defragmentedIpv4Packet, fragments); }
private IEnumerable <Frame> GetFramesFromPcap(Uri pcapUri) { var ipv4DefragmentationEngine = new Ipv4DefragmentationEngine(this._loggerFactory.CreateLogger <Ipv4DefragmentationEngine>()); foreach (var(packet, timestampTicks) in this.GetPacketsFromPcap(pcapUri)) { Frame frame; if (!(packet.PayloadPacket is IPPacket ipPacket)) { continue; } if (ipPacket is IPv4Packet ipv4Packet && Ipv4Helpers.Ipv4PacketIsFragmented(ipv4Packet)) { var(isDefragmentationSuccessful, defragmentedIpv4Packet, fragments) = ipv4DefragmentationEngine.TryDefragmentFragments(FrameFactory.CreateFromIpPacket(ipv4Packet, timestampTicks)); if (!isDefragmentationSuccessful) { continue; } frame = FrameFactory.CreateFromDefragmentedIpPacket(defragmentedIpv4Packet, fragments); }