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); }
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); //} }