diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs
index aaa2d67..6ccd272 100644
--- a/EduNetworkBuilder/NB.cs
+++ b/EduNetworkBuilder/NB.cs
@@ -89,7 +89,7 @@ namespace EduNetworkBuilder
public enum DebugPausePoint { none=0, packet_create=1, packet_kill=2,
packet_in=4, packet_out=8, packet_duplicate=16, all=63,
dump=256, pause=512}
- public enum TraversalTechnology { gateway, static_route, vlan, ethernet, wireless, firewall,
+ public enum TraversalTechnology { any, none, gateway, static_route, vlan, ethernet, wireless, firewall,
vpn, vpn_encryption, vpn_decryption, ip_address, masquerade, forward, arrived}
public enum HowToBreak { PowerOff, EthernetBreak, EthernetCorrupt, LockOutSwitch,
WirelessBreakSSID, WirelessBreakKey, DeviceChangeIP, DeviceChangeGW, StaticRouteClear,
@@ -1137,5 +1137,73 @@ namespace EduNetworkBuilder
return dest;
}
+ ///
+ /// return a list of ways to break a given technology
+ ///
+ ///
+ ///
+ public static List WaysToBreakATechnology(TraversalTechnology What)
+ {
+ switch(What)
+ {
+ case TraversalTechnology.ethernet:
+ return new List() { HowToBreak.EthernetBreak, HowToBreak.EthernetCorrupt };
+ case TraversalTechnology.forward:
+ return new List() { HowToBreak.PowerOff, HowToBreak.LockOutSwitch };
+ case TraversalTechnology.gateway:
+ return new List() { HowToBreak.DeviceChangeGW };
+ case TraversalTechnology.firewall:
+ return new List() { };
+ case TraversalTechnology.ip_address:
+ return new List() { HowToBreak.DeviceChangeIP };
+ case TraversalTechnology.masquerade:
+ return new List() { };
+ case TraversalTechnology.static_route:
+ return new List() { HowToBreak.StaticRouteClear, HowToBreak.StaticRouteCorrupt };
+ case TraversalTechnology.vlan:
+ return new List() { HowToBreak.VLANChange};
+ case TraversalTechnology.vpn:
+ return new List() { HowToBreak.VPNChangeEndpoint, HowToBreak.VPNChangeKey };
+ case TraversalTechnology.vpn_decryption:
+ return new List() { HowToBreak.VPNChangeKey };
+ case TraversalTechnology.vpn_encryption:
+ return new List() { HowToBreak.VPNChangeKey };
+ case TraversalTechnology.wireless:
+ return new List() { HowToBreak.WirelessBreakKey, HowToBreak.WirelessBreakSSID };
+ }
+ return new List(); //An empty list
+ }
+
+ public static TraversalTechnology TechnologyNeededToBreak(HowToBreak How)
+ {
+ switch(How)
+ {
+ case HowToBreak.DeviceChangeGW:
+ return TraversalTechnology.gateway;
+ case HowToBreak.DeviceChangeIP:
+ return TraversalTechnology.ip_address;
+ case HowToBreak.EthernetBreak:
+ case HowToBreak.EthernetCorrupt:
+ return TraversalTechnology.ethernet;
+ case HowToBreak.LockOutSwitch:
+ return TraversalTechnology.forward; //we can only lock ourselves out of switchs and hubs
+ case HowToBreak.PowerOff:
+ return TraversalTechnology.any; //Any will only return devices
+ case HowToBreak.StaticRouteClear:
+ case HowToBreak.StaticRouteCorrupt:
+ return TraversalTechnology.static_route;
+ case HowToBreak.VLANChange:
+ return TraversalTechnology.vlan;
+ case HowToBreak.VPNChangeEndpoint:
+ return TraversalTechnology.vpn;
+ case HowToBreak.VPNChangeKey:
+ return TraversalTechnology.vpn;
+ case HowToBreak.WirelessBreakKey:
+ case HowToBreak.WirelessBreakSSID:
+ return TraversalTechnology.wireless;
+ }
+ return TraversalTechnology.none;
+ }
+
}
}
diff --git a/EduNetworkBuilder/Network.cs b/EduNetworkBuilder/Network.cs
index 739f68c..c737b59 100644
--- a/EduNetworkBuilder/Network.cs
+++ b/EduNetworkBuilder/Network.cs
@@ -1908,6 +1908,62 @@ namespace EduNetworkBuilder
counter++;
}
}
+
+ bool BreakNetComponent(NetworkComponent What, HowToBreak How)
+ {
+ bool didit = false;
+ NetworkDevice tDevice = null;
+ NetworkLink tLink = null;
+ if (What is NetworkDevice) tDevice = (NetworkDevice)What;
+ if (What is NetworkLink) tLink = (NetworkLink)What;
+ switch(How)
+ {
+ case HowToBreak.PowerOff:
+ tDevice.PowerOff = true;
+ didit = true;
+ break;
+ case HowToBreak.DeviceChangeGW:
+ break;
+ case HowToBreak.DeviceChangeIP:
+ break;
+ case HowToBreak.EthernetBreak:
+ tLink.theLinkType = LinkType.broken;
+ didit = true;
+ break;
+ case HowToBreak.EthernetCorrupt:
+ break;
+ case HowToBreak.LockOutSwitch:
+ //Lock it out
+ break;
+ case HowToBreak.StaticRouteClear:
+ break;
+ case HowToBreak.StaticRouteCorrupt:
+ break;
+ case HowToBreak.VLANChange:
+ break;
+ case HowToBreak.VPNChangeEndpoint:
+ break;
+ case HowToBreak.VPNChangeKey:
+ break;
+ case HowToBreak.WirelessBreakKey:
+ break;
+ case HowToBreak.WirelessBreakSSID:
+ break;
+ }
+ return didit;
+ }
+
+ bool BreakNetworkPath(TraversalClass ThePath, HowToBreak How)
+ {
+ //find the device name it belongs to
+ //try to break it. If it fails, try a different device.
+ //Fail if we cannot do it
+ int count = 0;
+ while(count < 3)
+ {
+ string host = ThePath.HostnameFromTechnology();
+ }
+ }
}
}