예제 #1
0
        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();
            }
        }
예제 #2
0
        // 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;
            }
        }