private void mBtnStopMonitor_Click(object sender, EventArgs e) { if (Status == EnumStatus.Idle) { return; } if (Status == EnumStatus.Monitor) { Device.StopCapture(); trdGetPacketFromQueueAct = false; // Thread for GetPacketFromQueue trdUpdateListUIAct = false; Status = EnumStatus.Idle; this.Text = "Packets Monitor "; mStatusMonitor.Text = "Status : Idle "; } else if (Status == EnumStatus.OpenFile) { trdGetPacketFromQueueAct = false; // Thread for GetPacketFromQueue trdUpdateListUIAct = false; PcapFileEOF = false; Status = EnumStatus.Idle; this.Text = "Packets Monitor "; mStatusMonitor.Text = "Status : Idle "; } PcapFileWriter.CloseAll(); if (AllPcapFileWriter != null) { AllPcapFileWriter.Close(); } }
// Received pakcets will be push into queue. ( This is a callback function.) private void PushPacketToQueue(object sender, CaptureEventArgs e) { Packet packet; try { packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data); if (e.Packet.LinkLayerType != LinkLayers.Ethernet) { return; } // Write the packet to pcap file . FileInfo PcapFile_Total = new FileInfo(AllPcapFileWriter.Name); if (PcapFile_Total.Length < PcapFileMaxSizeOfByte) // 200 MB { AllPcapFileWriter.Write(packet.Bytes); } else { AllPcapFileWriter = new CaptureFileWriterDevice(FileStoragePath.GetPath_TotalPackets() + "\\" + DateTime.Now.ToString("tt hh.mm.ss.pcap")); AllPcapFileWriter.Write(packet.Bytes); } // The Packet is too small , it does not be analyzed . if (packet.Bytes.Length <= 60) { return; } lock (PacketQueueLock) { // push the packet to the queue . PacketQueue.Enqueue(e.Packet); } } catch { return; } }