Пример #1
0
        public Simulator(Deployment deployment, NetworkTopology topology, SQLiteUtility sql, string version)
        {
            if (topology.Nodes.Count == 0)
            {
                throw new Exception("Run() Fail: There are 0 nodes in the network.");
            }

            this.sql        = sql;
            this.topology   = topology;
            this.deployment = deployment;
            this.version    = version;

            attackNode = topology.Nodes.Where(node => node.Type == NetworkTopology.NodeType.Attacker).ToList();

            //sql.LogDeploymentResult(topology, deployment);
        }
Пример #2
0
        void bg_DoWork(object sender, DoWorkEventArgs e)
        {
            //try
            //{
            foreach (string filename in filenames)
            {
                string dbName = string.Format("{0}_T{1}M{2}F{3}_A{4}V{5}_Pkt{6}_{7}", Path.GetFileNameWithoutExtension(filename),
                                              TunnelingTracer.Text,
                                              MarkingTracer.Text,
                                              FilteringTracer.Text,
                                              AttackNodes.Text,
                                              VictimNodes.Text,
                                              TotalPacket.Text,
                                              PercentageOfAttackPacket.Text);

                SQLiteUtility sql = new SQLiteUtility(ref dbName);
                postfixIndex = Convert.ToInt32(Path.GetFileNameWithoutExtension(dbName).Split('_').Last());

                // Read network topology and initialize the attackers, normal users and victim.
                NetworkTopology networkTopology = new NetworkTopology(Convert.ToDouble(AttackNodes.Text), Convert.ToInt32(VictimNodes.Text));
                networkTopology.ReadBriteFile(filename);

                //// Doesn't use any deployment method.
                NoneDeployment noneDeply = new NoneDeployment(0, 0, 0);
                sql.CreateTable(noneDeply.ToString());
                noneDeply.Deploy(networkTopology);
                Simulator noneSimulator = new Simulator(noneDeply, networkTopology, sql, "None");
                noneSimulator.onReportOccur += delegate(object obj, Simulator.ReportArgument ra)
                {
                    bg.ReportProgress(ra.CurrentPacket * 100 / ra.TotalPacket, new ProgressReportArg()
                    {
                        KEY = filename, ST = StatusType.NoneDeploymentStatus
                    });
                };
                noneSimulator.Run(Convert.ToInt32(AttackPacketPerSec.Text), Convert.ToInt32(NormalPacketPerSec.Text), Convert.ToInt32(TotalPacket.Text), Convert.ToInt32(PercentageOfAttackPacket.Text), Convert.ToDouble(ProbibilityOfPacketTunneling.Text), Convert.ToDouble(ProbibilityOfPacketMarking.Text), Convert.ToDouble(StartFiltering.Text), Convert.ToInt32(InitTimeOfAttackPacket.Text), DynamicProbability.Checked, ConsiderDistance.Checked);

                bg.ReportProgress((filenames.IndexOf(filename) * 4 + 1) * 100 / (filenames.Count * 4), new ProgressReportArg()
                {
                    ST = StatusType.TotalProgress
                });

                //// Using randomly depolyment method.
                RandomDeployment randomDeploy = new RandomDeployment(Convert.ToDouble(TunnelingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(MarkingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(FilteringTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100);
                sql.CreateTable(randomDeploy.ToString());
                randomDeploy.Deploy(networkTopology);
                Simulator randomSimulator = new Simulator(randomDeploy, networkTopology, sql, "Random");
                randomSimulator.onReportOccur += delegate(object obj, Simulator.ReportArgument ra)
                {
                    bg.ReportProgress(ra.CurrentPacket * 100 / ra.TotalPacket, new ProgressReportArg()
                    {
                        KEY = filename, ST = StatusType.RandomDeploymentStatus
                    });
                };
                randomSimulator.Run(Convert.ToInt32(AttackPacketPerSec.Text), Convert.ToInt32(NormalPacketPerSec.Text), Convert.ToInt32(TotalPacket.Text), Convert.ToInt32(PercentageOfAttackPacket.Text), Convert.ToDouble(ProbibilityOfPacketTunneling.Text), Convert.ToDouble(ProbibilityOfPacketMarking.Text), Convert.ToDouble(StartFiltering.Text), Convert.ToInt32(InitTimeOfAttackPacket.Text), DynamicProbability.Checked, ConsiderDistance.Checked);

                bg.ReportProgress((filenames.IndexOf(filename) * 4 + 2) * 100 / (filenames.Count * 4), new ProgressReportArg()
                {
                    ST = StatusType.TotalProgress
                });

                // Using KCut deployment method.
                KCutDeployment kCutDeploy = new KCutDeployment(Convert.ToDouble(TunnelingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(MarkingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(FilteringTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, typeof(KCutStartWithSideNodeConsiderCoefficient));
                sql.CreateTable("KCutDeployV1");
                kCutDeploy.Deploy(networkTopology);
                Simulator kCutSimulator = new Simulator(kCutDeploy.Deployment, networkTopology, sql, "V1");
                kCutSimulator.onReportOccur += delegate(object obj, Simulator.ReportArgument ra)
                {
                    bg.ReportProgress(ra.CurrentPacket * 100 / ra.TotalPacket, new ProgressReportArg()
                    {
                        KEY = filename, ST = StatusType.KCutDeploymentStatus
                    });
                };
                kCutSimulator.Run(Convert.ToInt32(AttackPacketPerSec.Text), Convert.ToInt32(NormalPacketPerSec.Text), Convert.ToInt32(TotalPacket.Text), Convert.ToInt32(PercentageOfAttackPacket.Text), Convert.ToDouble(ProbibilityOfPacketTunneling.Text), Convert.ToDouble(ProbibilityOfPacketMarking.Text), Convert.ToDouble(StartFiltering.Text), Convert.ToInt32(InitTimeOfAttackPacket.Text), DynamicProbability.Checked, ConsiderDistance.Checked);

                bg.ReportProgress((filenames.IndexOf(filename) * 4 + 3) * 100 / (filenames.Count * 4), new ProgressReportArg()
                {
                    ST = StatusType.TotalProgress
                });

                // Using KCutV2 deployment method.
                KCutDeploymentV2 kCut2Deploy = new KCutDeploymentV2(Convert.ToDouble(TunnelingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(MarkingTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, Convert.ToDouble(FilteringTracer.Text) * Convert.ToDouble(PercentageOfTracer.Text) / 100, typeof(KCutStartWithSideNodeConsiderCoefficient));
                sql.CreateTable("KCutDeployV2");
                kCut2Deploy.Deploy(networkTopology);
                Simulator kCut2Simulator = new Simulator(kCut2Deploy.Deployment, networkTopology, sql, "V2");
                kCut2Simulator.onReportOccur += delegate(object obj, Simulator.ReportArgument ra)
                {
                    bg.ReportProgress(ra.CurrentPacket * 100 / ra.TotalPacket, new ProgressReportArg()
                    {
                        KEY = filename, ST = StatusType.KCut2DeploymentStatus
                    });
                };
                kCut2Simulator.Run(Convert.ToInt32(AttackPacketPerSec.Text), Convert.ToInt32(NormalPacketPerSec.Text), Convert.ToInt32(TotalPacket.Text), Convert.ToInt32(PercentageOfAttackPacket.Text), Convert.ToDouble(ProbibilityOfPacketTunneling.Text), Convert.ToDouble(ProbibilityOfPacketMarking.Text), Convert.ToDouble(StartFiltering.Text), Convert.ToInt32(InitTimeOfAttackPacket.Text), DynamicProbability.Checked, ConsiderDistance.Checked);

                bg.ReportProgress((filenames.IndexOf(filename) * 4 + 4) * 100 / (filenames.Count * 4), new ProgressReportArg()
                {
                    ST = StatusType.TotalProgress
                });
            }

            File.WriteAllLines(Path.Combine(Environment.CurrentDirectory, "Log", "ARGS.txt"), new string[] {
                "Percentage of Attack node:" + AttackNodes.Text,
                "Number of Victim:" + VictimNodes.Text,
                "Percentage of Tracer:" + PercentageOfTracer.Text,
                "Percentage of Tunneling Tracer:" + TunnelingTracer.Text,
                "Percentage of Marking Tracer:" + MarkingTracer.Text,
                "Percentage of Filtering Tracer:" + FilteringTracer.Text,
                "Percentage of Marking receive, then begin filtering:" + StartFiltering.Text,
                "Attack packet per second:" + AttackPacketPerSec.Text,
                "Normal packet per second:" + NormalPacketPerSec.Text,
                "Total Packet:" + TotalPacket.Text,
                "Percentage of Attack Packet:" + PercentageOfAttackPacket.Text,
                "Initial Time of Attack Packet:" + InitTimeOfAttackPacket.Text,
                "Probability of Packet Tunneling:" + ProbibilityOfPacketTunneling.Text,
                "Probability of Packet Marking:" + ProbibilityOfPacketMarking.Text
            });
            //}
            //catch (Exception exception)
            //{
            //    Console.WriteLine(exception.Message);
            //    //MessageBox.Show(exception.Message);
            //}
        }