Browse Source

went over the levels to incorporate sarah, n, and twitterer feedback

Erinn 8 years ago
parent
commit
80d30352ed

+ 26 - 6
js/devicescripts.js

@@ -18,14 +18,15 @@ var deviceScripts = {
     ping: {
 		onPacketReceived: function(device, packet) {
                     if(packet.hasOwnProperty("transport") && packet["transport"].hasOwnProperty("proto")){
-                        if(packet.transport.proto == "ICMP"){
+                        var proto = packet.transport.proto.trim().toLowerCase();
+			if (proto == "icmp" || proto == "example") { // did this to make basics5 a little more clear
                             var new_packet = {
                                 network: {
                                     srcip: packet.network.dstip,
                                     dstip: packet.network.srcip
                                 },
                                 transport: {
-                                    proto: "ICMP"
+                                    proto: packet.transport.proto
                                 }
                             };
                             sendPacket(device.id, 0, new_packet);
@@ -33,9 +34,28 @@ var deviceScripts = {
                     }
 		}
     },
-    modem: {
-        onPacketReceived: function(device, packet) {
-            if(packet.network.dstip == device.id){//look up ip in NAT table
+	modem: {
+		onPacketReceived: function(device, packet, portNum) {
+			if (!device.hasOwnProperty("rules")) device.rules = {};
+
+			if (packet.network.dstip == device.id) {
+				// TODO: use something other than proto for NAT table
+				if (device.rules.hasOwnProperty( packet.transport.proto )) {
+					packet.network.dstip = device.rules[packet.transport.proto].dstip;
+					sendPacket(device.id, device.rules[packet.transport.proto].portNum, packet);
+				}
+			} else {
+				if (packet.hasOwnProperty("transport") && packet.transport.hasOwnProperty("proto")) {
+					device.rules[packet.transport.proto] = {portNum:portNum, dstip: packet.network.srcip};
+					console.log(device.rules);
+				}
+				packet.network.srcip = device.id;
+				sendPacket(device.id, 0, packet);
+			}
+		}
+	},
+
+/*            if(packet.network.dstip == device.id){//look up ip in NAT table
                 var new_packet = {};
                 for (var i = 0; i < packetFields.length; i++) {
                     if(packet.hasOwnProperty(packetFields[i].layer)){
@@ -66,7 +86,7 @@ var deviceScripts = {
             }
 
         }
-    },
+    },*/
     switch: {
         onPacketReceived: function(device, packet, portNum) {
             var found = false;

+ 2 - 1
levels/01 Basics/level03.json

@@ -39,7 +39,8 @@
 			type:"packet",
 			device:"Alice",
 			payload:{
-				network:{srcip:"Google", dstip:"Alice"}
+				network:{srcip:"Google", dstip:"Alice"},
+				transport:{proto:"ICMP"}
 			},
 			times:5
                 }

+ 5 - 5
levels/01 Basics/level04.json

@@ -98,7 +98,7 @@
 			at:50,
 			from:"Alice",
 			payload:{
-				network:{dstip:"Bob"}
+				network:{dstip:"Bob",srcip:"Alice"}
 			}
 		},
 		{
@@ -106,7 +106,7 @@
 			at:150,
 			from:"Bob",
 			payload:{
-				network:{dstip:"Alice"}
+				network:{dstip:"Alice",srcip:"Bob"}
 			}
 		},
 		{
@@ -114,7 +114,7 @@
 			at:210,
 			from:"Alice",
 			payload:{
-				network:{dstip:"Carol"}
+				network:{dstip:"Carol",srcip:"Alice"}
 			}
 		},
 		{
@@ -122,7 +122,7 @@
 			at:270,
 			from:"Carol",
 			payload:{
-				network:{dstip:"Bob"}
+				network:{dstip:"Bob",srcip:"Carol"}
 			}
 		}
 	],
@@ -135,5 +135,5 @@
 			}
 		}
 	],
-	nextLevel:"01 Basics/level05.json"
+	nextLevel:5
 }

+ 17 - 5
levels/01 Basics/level05.json

@@ -15,10 +15,17 @@
 			y:0.4,
                         script: deviceScripts.ping
 		},
+		{
+			id:"Bob",
+			ports:1,
+			x:0.2,
+			y:0.2,
+			image:"macbook"
+		},
 		{
 			id:"Home",
 			image:"router",
-			ports:2,
+			ports:3,
 			x:0.4,
 			y:0.4,
                         script: deviceScripts.modem
@@ -27,10 +34,14 @@
 	links:[
 		{
 			src:"Alice", srcport:0,
-			dst:"Home", dstport:0
+			dst:"Home", dstport:1
+		},
+		{
+			src:"Bob", srcport:0,
+			dst:"Home", dstport:2
 		},
 		{
-			src:"Home", srcport:1,
+			src:"Home", srcport:0,
 			dst:"Google", dstport:0
 		}
 	],
@@ -46,9 +57,10 @@
 		{
 			type:"packet",
 			at:1000,
-			from:"Google",
+			from:"Bob",
 			payload:{
-				network:{srcip: "Google", dstip:"Home"}
+				network:{srcip: "Bob", dstip:"Google"},
+				transport:{proto:"example"}
 			}
 		}
 	],

+ 4 - 7
phaser.inc.php

@@ -161,11 +161,10 @@ function donePacket() {
 	var youWin = true;
 
 	for (var i = 0; i < level.triggers.length; i++) {
-		// todo: need to check properties, device name here
-		if (level.triggers[i].hasOwnProperty("times")) level.triggers[i].times--;
-
 		if (satisfiesTrigger(this, level.triggers[i])) {
-			level.triggers[i].completed = true;
+			if (level.triggers[i].hasOwnProperty("times")) {
+				if (--level.triggers[i].times <= 0) level.triggers[i].completed = true;
+			} else level.triggers[i].completed = true;
 		}
 
 		if (!level.triggers[i].hasOwnProperty("completed")) youWin = false;
@@ -199,12 +198,10 @@ function satisfiesTrigger(pkt, t) {
 		var fields = Object.keys(t.payload[ layers[i] ]);
 		for (var j = 0; j < fields.length; j++) {
 			if (!pkt.payload[ layers[i] ].hasOwnProperty(fields[j])) return false;
-			if (pkt.payload[ layers[i] ][ fields[j] ] != t.payload[ layers[i] ][ fields[j] ]) return false;
+			if (pkt.payload[ layers[i] ][ fields[j] ].trim().toLowerCase() != t.payload[ layers[i] ][ fields[j] ].trim().toLowerCase()) return false;
 		}
 	}
 
-	if (t.hasOwnProperty("times") && t.times > 0) return false;
-
 	return true;
 }