Esempio n. 1
0
        /// <summary>
        /// Closes this adapter
        /// </summary>
        public virtual void Close()
        {
            if (PcapHandle == IntPtr.Zero)
            {
                return;
            }

            if (Started)
            {
                StopCapture();
            }
            SafeNativeMethods.pcap_close(PcapHandle);
            PcapHandle = IntPtr.Zero;

            //Remove event handlers
            if (OnPacketArrival != null)
            {
                foreach (Pcap.PacketArrivalEvent pa in OnPacketArrival.GetInvocationList())
                {
                    OnPacketArrival -= pa;
                }
            }
            if (OnPcapStatistics != null)
            {
                foreach (Pcap.PcapStatisticsEvent pse in OnPcapStatistics.GetInvocationList())
                {
                    OnPcapStatistics -= pse;
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Closes this adapter
        /// </summary>
        public virtual void Close()
        {
            if (PcapHandle == IntPtr.Zero)
            {
                return;
            }

            if (Started)
            {
                try
                {
                    StopCapture();
                }
                catch (Exception) { }
            }
            LibPcapSafeNativeMethods.pcap_close(PcapHandle);
            PcapHandle = IntPtr.Zero;

            //Remove event handlers
            if (OnPacketArrival != null)
            {
                foreach (PacketArrivalEventHandler pa in OnPacketArrival.GetInvocationList())
                {
                    OnPacketArrival -= pa;
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// </summary>
        /// <returns>0 for no data present, 1 if a packet was read, negative upon error</returns>
        private GetPacketStatus SendPacketArrivalEvent()
        {
            PacketCapture e;
            var           retval = GetNextPacket(out e);

            if (retval == GetPacketStatus.PacketRead)
            {
                OnPacketArrival?.Invoke(this, e);
            }

            return(retval);
        }
Esempio n. 4
0
 protected void CaptureThread(CancellationToken cancellationToken)
 {
     try
     {
         while (!cancellationToken.IsCancellationRequested)
         {
             var packet = GetNextPacket();
             if (packet == null)
             {
                 break;
             }
             OnPacketArrival?.Invoke(this, new CaptureEventArgs(packet, this));
         }
         OnCaptureStopped?.Invoke(this, CaptureStoppedEventStatus.CompletedWithoutError);
     }
     catch (Exception ex)
     {
         LastError = ex.Message;
         OnCaptureStopped?.Invoke(this, CaptureStoppedEventStatus.ErrorWhileCapturing);
     }
 }
Esempio n. 5
0
 protected void CaptureThread(CancellationToken cancellationToken)
 {
     try
     {
         while (!cancellationToken.IsCancellationRequested)
         {
             var packets = new List <PacketRecord>(WINDIVERT_BATCH_MAX);
             var retval  = GetNextPackets(packets, WINDIVERT_BATCH_MAX);
             if (retval == GetPacketStatus.PacketRead)
             {
                 foreach (var p in packets)
                 {
                     OnPacketArrival?.Invoke(this, p.GetPacketCapture(this));
                 }
             }
         }
         OnCaptureStopped?.Invoke(this, CaptureStoppedEventStatus.CompletedWithoutError);
     }
     catch (Exception ex)
     {
         LastError = ex.Message;
         OnCaptureStopped?.Invoke(this, CaptureStoppedEventStatus.ErrorWhileCapturing);
     }
 }
Esempio n. 6
0
 /// <summary>
 /// Notify the OnPacketArrival delegates about a newly captured packet
 /// </summary>
 /// <param name="p">
 /// A <see cref="RawCapture"/>
 /// </param>
 protected virtual void SendPacketArrivalEvent(RawCapture p)
 {
     OnPacketArrival?.Invoke(this, new CaptureEventArgs(p, this));
 }
Esempio n. 7
0
 /// <summary>
 /// Notify the OnPacketArrival delegates about a newly captured packet
 /// </summary>
 /// <param name="header"></param>
 /// <param name="data"></param>
 protected virtual void SendPacketArrivalEvent(PcapHeader header, Span <byte> data)
 {
     OnPacketArrival?.Invoke(this, new PacketCapture(this, header, data));
 }