Exemple #1
0
 public void AddModule(NDISModule fm)
 {
     lock (padlock)
     {
         modules.Add(fm);
         ProcessingIndex.Add(modules.Count - 1);
         enabled.Add(false);
     }
 }
Exemple #2
0
        /// <summary>
        /// Set the labels as the user flips through them.  If the Help window is being
        /// called externally (i.e. from the module's frame), they can pass the module's object
        /// into a constructor and automatically set the selected module when it's drawn.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void modBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            // if we need to initialize the window to a specific module
            if (selectedItem != null)
            {
                // set the idx to the selected item
                modBox.SelectedIndex = modBox.Items.IndexOf(this.selectedItem.ToString());
                // set it back to null
                selectedItem = null;
            }

            // valid idx...
            if (modBox.SelectedIndex >= 0)
            {
                NDISModule temp = list.GetModule(modBox.SelectedIndex);

                modData.Text             = temp.MetaData.GetMeta().Name;
                modAuthorField.Text      = temp.MetaData.GetMeta().Author;
                modContactField.Text     = temp.MetaData.GetMeta().Contact;
                modVersionField.Text     = temp.MetaData.GetMeta().Version;
                modDescriptionField.Text = temp.MetaData.GetMeta().Description;
                modHelpBox.Text          = temp.MetaData.GetMeta().Help;
            }
        }
Exemple #3
0
 public LogEvent(string message, NDISModule module)
 {
     Module  = module;
     Message = message;
     time    = DateTime.Now;
 }
Exemple #4
0
 public LogEvent(string message, NDISModule module)
 {
     Module = module;
     Message = message;
     time = DateTime.Now;
 }
Exemple #5
0
        public unsafe void ProcessLoop()
        {
            // Allocate and initialize packet structures
            ETH_REQUEST         Request      = new ETH_REQUEST();
            INTERMEDIATE_BUFFER PacketBuffer = new INTERMEDIATE_BUFFER();

            IntPtr PacketBufferIntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(PacketBuffer));

            try
            {
                win32api.ZeroMemory(PacketBufferIntPtr, Marshal.SizeOf(PacketBuffer));

                Request.hAdapterHandle   = adapterHandle;
                Request.EthPacket.Buffer = PacketBufferIntPtr;

                Modules = new ModuleList(this);

                Modules.LoadExternalModules();

                Modules.UpdateModuleOrder();

                string folder = Configuration.ConfigurationManagement.Instance.ConfigurationPath;
                folder = folder + System.IO.Path.DirectorySeparatorChar + "pcapLogs";
                if (!System.IO.Directory.Exists(folder))
                {
                    System.IO.Directory.CreateDirectory(folder);
                }
                string f = folder + System.IO.Path.DirectorySeparatorChar + "blocked-" + inter.Name + "-" + DateTime.Now.ToBinary() + ".pcap";
                pcaplog = new PcapFileWriter(f);

                INTERMEDIATE_BUFFER *PacketPointer;

                while (true)
                {
                    hEvent.WaitOne();
                    while (Ndisapi.ReadPacket(hNdisapi, ref Request))
                    {
                        PacketPointer = (INTERMEDIATE_BUFFER *)PacketBufferIntPtr;
                        Packet pkt = new EthPacket(PacketPointer).MakeNextLayerPacket();

                        if (pkt.Outbound)
                        {
                            inter.DataOut.AddBits(pkt.Length());
                        }
                        else
                        {
                            inter.DataIn.AddBits(pkt.Length());
                        }

                        bool drop = false;
                        bool log  = false;

                        if (this.Filtering)
                        {
                            for (int x = 0; x < Modules.Count; x++)
                            {
                                NDISModule fm  = Modules.GetModule(x);
                                int        pmr = fm.PacketMain(ref pkt);
                                if (pmr == null)
                                {
                                    continue;
                                }
                                if ((pmr & (int)PacketMainReturnType.LogPacket) == (int)PacketMainReturnType.LogPacket)
                                {
                                    log = true;
                                }
                                if ((pmr & (int)PacketMainReturnType.Drop) == (int)PacketMainReturnType.Drop)
                                {
                                    drop = true;
                                    break;
                                }
                            }
                        }

                        if (!drop && !DropAll)
                        {
                            if (pkt.Outbound)
                            {
                                Ndisapi.SendPacketToAdapter(hNdisapi, ref Request);
                            }
                            else
                            {
                                Ndisapi.SendPacketToMstcp(hNdisapi, ref Request);
                            }
                        }
                        if (log)
                        {
                            pcaplog.AddPacket(pkt.Data(), (int)pkt.Length());
                        }
                    }

                    //OM NOM NOM PASTA!
                    while (processQueue.Count != 0)
                    {
                        Packet pkt = processQueue.Dequeue().MakeNextLayerPacket();

                        if (pkt.Outbound)
                        {
                            inter.DataOut.AddBits(pkt.Length());
                        }
                        else
                        {
                            inter.DataIn.AddBits(pkt.Length());
                        }

                        bool drop = false;
                        bool log  = false;

                        if (this.Filtering)
                        {
                            for (int x = 0; x < Modules.Count; x++)
                            {
                                NDISModule fm  = Modules.GetModule(x);
                                int        pmr = fm.PacketMain(ref pkt);
                                if (pmr == 0)
                                {
                                    continue;
                                }
                                if ((pmr & (int)PacketMainReturnType.LogPacket) == (int)PacketMainReturnType.LogPacket)
                                {
                                    log = true;
                                }
                                if ((pmr & (int)PacketMainReturnType.Drop) == (int)PacketMainReturnType.Drop)
                                {
                                    drop = true;
                                    break;
                                }
                            }
                        }

                        if (!drop && !DropAll)
                        {
                            if (pkt.Outbound)
                            {
                                Ndisapi.SendPacketToAdapter(hNdisapi, ref Request);
                            }
                            else
                            {
                                Ndisapi.SendPacketToMstcp(hNdisapi, ref Request);
                            }
                        }
                        if (log)
                        {
                            pcaplog.AddPacket(pkt.Data(), (int)pkt.Length());
                        }
                    }
                    hEvent.Reset();
                }
            }
            catch (Exception tae)
            {
                Marshal.FreeHGlobal(PacketBufferIntPtr);
            }
        }