From d3b6abf1e1b473ec46665fba103f64ecd8eb5f48 Mon Sep 17 00:00:00 2001 From: Tim Young Date: Sun, 27 Aug 2017 17:06:58 -0500 Subject: [PATCH] get the random network visible --- EduNetworkBuilder/LinkEditor.cs | 6 ++-- EduNetworkBuilder/Network.cs | 32 ++++++++++++++++++--- EduNetworkBuilder/NetworkBuilder.cs | 43 +++++++++++++++++++++++------ EduNetworkBuilder/NetworkDevice.cs | 20 ++++++++++++++ EduNetworkBuilder/TraversalClass.cs | 16 +++++++++-- 5 files changed, 100 insertions(+), 17 deletions(-) diff --git a/EduNetworkBuilder/LinkEditor.cs b/EduNetworkBuilder/LinkEditor.cs index ff9923d..aeecb2e 100644 --- a/EduNetworkBuilder/LinkEditor.cs +++ b/EduNetworkBuilder/LinkEditor.cs @@ -80,7 +80,7 @@ namespace EduNetworkBuilder { SrcNic = lbSrcNic.SelectedItem.ToString(); int sNicIndex = lbSrcNic.SelectedIndex; - NetworkDevice Src = myNet.ItemFromName(lbSrcHost.SelectedItem.ToString()); + NetworkDevice Src = myNet.DeviceFromName(lbSrcHost.SelectedItem.ToString()); NetworkCard sNic = null; if(Src != null) sNic = Src.NicFromName(lbSrcNic.SelectedItem.ToString()); if(sNic != null) srcNicType = sNic.GetNicType; @@ -196,10 +196,10 @@ namespace EduNetworkBuilder private void btnLink_Click(object sender, EventArgs e) { Network Net = NB.GetNetwork(); - NetworkDevice Src = Net.ItemFromName(lbSrcHost.SelectedItem.ToString()); + NetworkDevice Src = Net.DeviceFromName(lbSrcHost.SelectedItem.ToString()); int sNicIndex = lbSrcNic.SelectedIndex; NetworkCard sNic = Src.NicFromName(lbSrcNic.SelectedItem.ToString()); - NetworkDevice Dst = Net.ItemFromName(lbDstHost.SelectedItem.ToString()); + NetworkDevice Dst = Net.DeviceFromName(lbDstHost.SelectedItem.ToString()); int dNicIndex = lbDstNic.SelectedIndex; NetworkCard dNic = Dst.NicFromName(lbDstNic.SelectedItem.ToString()); LinkType LT = NB.ParseEnum(cbLinkType.SelectedItem.ToString()); diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs index fc8a0bb..03a193c 100644 --- a/EduNetworkBuilder/Network.cs +++ b/EduNetworkBuilder/Network.cs @@ -495,7 +495,8 @@ namespace EduNetworkBuilder } return thelist; } - public NetworkDevice ItemFromName(string hostname) + + public NetworkDevice DeviceFromName(string hostname) { NetworkDevice tDevice; foreach (NetworkComponent tItem in NetComponents) @@ -510,6 +511,16 @@ namespace EduNetworkBuilder return null; } + public NetworkComponent ComponentFromName(string hostname) + { + foreach (NetworkComponent tItem in NetComponents) + { + if (tItem.hostname == hostname) + return tItem; + } + return null; + } + public bool HasItemCalled(string itemname) { NetworkDevice tDevice; @@ -1374,7 +1385,7 @@ namespace EduNetworkBuilder public NetworkDevice GetDeviceFromName(string DeviceName) { - NetworkComponent nc = ItemFromName(DeviceName); + NetworkComponent nc = DeviceFromName(DeviceName); if (nc == null) return null; if (NB.GetComponentType(nc) == GeneralComponentType.device) return (NetworkDevice)nc; @@ -1621,6 +1632,19 @@ namespace EduNetworkBuilder } } + public void DoAllClearDHCP() + { + NetworkDevice nd; + foreach (NetworkComponent nc in NetComponents) + { + if (NB.GetComponentType(nc) == GeneralComponentType.device) + { + nd = (NetworkDevice)nc; + nd.ClearDHCPInfo(); + } + } + } + public bool DoAllVerifyLinks() { NetworkLink nl; @@ -1978,7 +2002,7 @@ namespace EduNetworkBuilder return false; } - int BreakNetworkPath(TraversalClass ThePath, HowToBreak How) + public int BreakNetworkPath(TraversalClass ThePath, HowToBreak How) { //find the device name it belongs to //try to break it. If it fails, try a different device. @@ -1992,7 +2016,7 @@ namespace EduNetworkBuilder if(host != "") { //We have a host, see if we can break it. - NetworkComponent NC = ItemFromName(host); + NetworkComponent NC = ComponentFromName(host); if(NC != null) { int answer = BreakNetComponent(NC, How); diff --git a/EduNetworkBuilder/NetworkBuilder.cs b/EduNetworkBuilder/NetworkBuilder.cs index 152529f..15e537f 100644 --- a/EduNetworkBuilder/NetworkBuilder.cs +++ b/EduNetworkBuilder/NetworkBuilder.cs @@ -2145,10 +2145,13 @@ namespace EduNetworkBuilder LoadSolvedRandomMap(); } - private void LoadSolvedRandomMap() + private void LoadSolvedRandomMap(int difficulty = 5) { //we will prompt for stuff. For now, just use the firewalls network LoadSolvedResource( SolvedNetworkNames.firewalls.ToString()); + myNetwork.StartingHelpLevel = NetTestVerbosity.full; + myNetwork.HintsToDisplay = NetTestVerbosity.full; + myNetwork.NonVisualDoDHCPOnAll(); List TraversalCollection = new List(); @@ -2167,15 +2170,39 @@ namespace EduNetworkBuilder TraversalCollection.Sort((a, b) => b.Count.CompareTo(a.Count)); - for(int i=0; i< TraversalCollection.Count; i++) + List BreakList = new List() { HowToBreak.PowerOff, HowToBreak.EthernetBreak }; + //foreach (HowToBreak one in Enum.GetValues(typeof(HowToBreak))) + // BreakList.Add(one); + count = 0; + int HowHard = 0; + int TraversalIndex = 0; + while (HowHard < difficulty && count < 10) { - Console.WriteLine(i + " " + TraversalCollection[i].Source()); - Console.WriteLine(i + " " + TraversalCollection[i].Destination()); - } - if(TraversalCollection.Count>0) - { - TraversalCollection[0].DumpPath(); + //loop through the traversalinfos + //randomly choose a way to break it + BreakList = NB.Randomize(BreakList); + HowHard += myNetwork.BreakNetworkPath(TraversalCollection[TraversalIndex],BreakList[0]); + count++; + TraversalIndex++; + if (TraversalIndex >= TraversalCollection.Count) + TraversalIndex = 0; //loop back to the beginning } + + //for(int i=0; i< TraversalCollection.Count; i++) + //{ + // Console.WriteLine(i + " " + TraversalCollection[i].Source()); + // Console.WriteLine(i + " " + TraversalCollection[i].Destination()); + //} + //if(TraversalCollection.Count>0) + //{ + // TraversalCollection[0].DumpPath(); + //} + + myNetwork.ClearMessages(); + myNetwork.DoAllClearDHCP(); + + UpdateForm(); + UpdateMessages(); } #endregion Random Map Stuff } diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index 04644f1..765ada7 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -1293,6 +1293,26 @@ namespace EduNetworkBuilder } } + public void ClearDHCPInfo() + { + bool tryit = false; + if (CanUseDHCP) + { + foreach (NetworkCard tnic in NICs) + { + if (tnic.UsesDHCP) + tryit = true; + } + } + if (tryit) + { + foreach (NetworkCard nic in NICs) + { + nic.SetIPForDHCP(); //clear the source IP + } + } + } + public void PingFromHere(IPAddress Destination) { //We need to create a packet diff --git a/EduNetworkBuilder/TraversalClass.cs b/EduNetworkBuilder/TraversalClass.cs index 0f48862..f08e435 100644 --- a/EduNetworkBuilder/TraversalClass.cs +++ b/EduNetworkBuilder/TraversalClass.cs @@ -81,9 +81,21 @@ namespace EduNetworkBuilder { //make a randomized copy of the list, and return the first item that has the technology List tPathTaken= NB.Randomize(PathTaken); - foreach(TraversalRecord one in tPathTaken) + if (What != TraversalTechnology.any) { - if (one.WhatUsed == What) return one.host; + foreach (TraversalRecord one in tPathTaken) + { + if (one.WhatUsed == What) return one.host; + } + } else + { + Network theNet = NB.GetNetwork(); + foreach (TraversalRecord one in tPathTaken) + { + NetworkDevice ND = theNet.GetDeviceFromName(one.host); + if(ND != null && (ND.ForwardsPackets() || ND.RoutesPackets()) ) //get the first hub/switch/router/firewall + return one.host; + } } return ""; }