示例#1
0
        internal static WinDivertHandle[] OpenDropHandles(short priority, IList <FilterDefinition> filters)
        {
            byte[] ruleBuffer = new byte[10240];

            WinDivertHandle[] ret = new WinDivertHandle[filters.Count];

            for (int i = 0; i < ret.Length; i++)
            {
                ret[i] = OpenHandle(ruleBuffer, filters[i], WinDivertLayer.Network, priority, WinDivertFlag.Drop);
            }
            return(ret);
        }
示例#2
0
        private void ThreadProc()
        {
            _handle = null;
            BeforeStart();
            bool error = false;

            try
            {
                _handle   = Library.OpenHandle(_filter, WinDivertLayer.Network, _priority, WinDivertFlag.Sniff);
                _isActive = !_handle.IsInvalid;
                byte[]           packet = new byte[1600];
                WinDivertAddress addr;
                int len;
                while (_isActive)
                {
                    if (_handle.Receive(packet, packet.Length, out addr, out len))
                    {
                        // поймали пакет
                        OnPacketCaptured(packet, len, in addr);
                    }
                }
            }
            catch (Exception e)
            {
                error = true;
            }
            finally
            {
                if (null != _handle)
                {
                    _handle.Close();
                    _handle = null;
                }
                AfterStop(error);
            }
        }