123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- var deviceScripts = {
- manualRouter: {
- onPacketReceived: function(device, packet, portNum) {
- var newpkt = JSON.parse(JSON.stringify(packet));
- if (packet.hasOwnProperty("transport") && packet.transport.hasOwnProperty("proto") && packet.transport.proto == "ICMP" && packet.transport.hasOwnProperty("ttl")) {
- if (packet.transport.ttl > 0) {
- newpkt.transport.ttl--;
- } else {
- newpkt.network.srcip = device.id;
- newpkt.network.dstip = packet.network.srcip;
- newpkt.transport.proto = "ICMP_ERROR";
- sendPacket(device.id, portNum, newpkt);
- return;
- }
- }
- if (packet.hasOwnProperty("network") && packet.network.hasOwnProperty("dstip") && packet.network.dstip == device.id &&
- packet.hasOwnProperty("transport") && packet.transport.hasOwnProperty("proto") && packet.transport.proto == "ICMP") {
- newpkt.network.srcip = device.id;
- newpkt.network.dstip = packet.network.srcip;
- sendPacket(device.id, portNum, newpkt);
- return;
- }
- for (var i = 0; i < device.rules.length; i++) {
- if (device.rules[i].dstip == packet.network.dstip) {
- sendPacket(device.id, device.rules[i].portNum, newpkt);
- }
- }
- }
- },
- hub: {
- onPacketReceived: function (device, packet) {
-
- }
- },
-
- proxy: {
- onPacketReceived: function(device, packet, portNum) {
- var newpkt = JSON.parse(JSON.stringify(packet));
- if (packet.network.dstip == "Proxy") {
- newpkt.network.dstip = "Blocked Site";
- }
- sendPacket(device.id, portNum == 0 ? 1 : 0, newpkt);
- }
- },
- ping: {
- onPacketReceived: function(device, packet) {
- if(packet.hasOwnProperty("transport") && packet["transport"].hasOwnProperty("proto")){
- var proto = packet.transport.proto.trim().toLowerCase();
- if (proto == "icmp" || proto == "example") {
- var new_packet = {
- network: {
- srcip: packet.network.dstip,
- dstip: packet.network.srcip
- },
- transport: {
- proto: packet.transport.proto
- }
- };
- sendPacket(device.id, 0, new_packet);
- }
- }
- }
- },
- modem: {
- onPacketReceived: function(device, packet, portNum) {
- if (!device.hasOwnProperty("rules")) device.rules = {};
- var newpkt = JSON.parse(JSON.stringify(packet));
- if (packet.network.dstip == device.id) {
-
- if (device.rules.hasOwnProperty( packet.transport.proto )) {
- newpkt.network.dstip = device.rules[packet.transport.proto].dstip;
- sendPacket(device.id, device.rules[packet.transport.proto].portNum, newpkt);
- }
- } else {
- if (packet.hasOwnProperty("transport") && packet.transport.hasOwnProperty("proto")) {
- device.rules[packet.transport.proto] = {portNum:portNum, dstip: packet.network.srcip};
- }
- newpkt.network.srcip = device.id;
- sendPacket(device.id, 0, newpkt);
- }
- }
- },
- switch: {
- onPacketReceived: function(device, packet, portNum) {
- var found = false;
- for (var i = 0; (i < device.rules.length) && !found; i++) {
- if (device.rules[i].dstip == packet.network.dstip) {
- sendPacket(device.id, device.rules[i].portNum, packet);
- found = true;
- }
- }
- if(!found){
-
- for(var i=0; i<device.ports.length; i++){
- if(i != portNum){
- sendPacket(device.id, i, packet);
- }
- }
- }
-
- var found = false;
- for (var i = 0; (i < device.rules.length) && !found; i++) {
- if (device.rules[i].dstip == packet.network.srcip) {
- device.rules[i].portNum = portNum;
- found = true;
- }
- }
- if(!found){
- device.rules[device.rules.length] = {
- dstip: packet.network.srcip,
- portNum: portNum
- }
- }
- }
- },
- firewall: {
- onPacketReceived: function(device, packet) {
- function checkRules(rule){
- return rule.srcip == packet.network.srcip;
- }
- if(device.rules.find(checkRules) == undefined){
- sendPacket(device.id, 0, packet);
- }
- }
- },
- broadcast: {
- onPacketReceived: function(device, packet, portNum){
- function checkRules(rule){
- return rule.dstip == packet.network.dstip;
- }
- var rule = device.rules.find(checkRules);
- if (rule != undefined){
- sendPacket(device.id, rule.portNum, packet);
- } else {
- if(packet.network.dstip == "Broadcast"){
- for(var i=0; i<device.ports.length; i++){
- if((i != portNum) && (getPortRecipient(device.id, i) != "Google")){
- newPacket = copyPacket(packet);
- newPacket.network.dstip = getPortRecipient(device.id, i);
- sendPacket(device.id, i, newPacket);
- }
- }
- }
- }
- }
- },
- encryption: {
- onPacketReceived: function(device, packet, portNum) {
- if(packet.hasOwnProperty("transport") && packet["transport"].hasOwnProperty("proto")){
- if(packet.transport.proto == "encryption"){
- if(packet.hasOwnProperty("application") && packet["application"].hasOwnProperty("type")){
- var type = packet.application.type;
- switch(type) {
- case "keyrequest":
- var new_packet = {
- network: {
- srcip: packet.network.dstip,
- dstip: packet.network.srcip
- },
- transport: {
- proto: "encryption"
- },
- application: {
- type: "keyresponse",
- key: "67890"
- }
- }
- sendPacket(device.id, portNum, new_packet);
- break;
- case "keyresponse":
- var new_packet = {
- network: {
- srcip: packet.network.dstip,
- dstip: packet.network.srcip
- },
- transport: {
- proto: "encryption"
- },
- application: {
- type: "message",
- key: packet.application.key
- }
- }
- sendPacket(device.id, portNum, new_packet);
- break;
- default:
- break;
- }
- }
- }
- }
- }
- },
- tappedRouter: {
- onPacketReceived: function(device, packet, portNum) {
- for (var i = 0; i < device.rules.length; i++) {
- if (device.rules[i].dstip == packet.network.dstip) {
- if(portNum == 0){
- sendPacket(device.id, device.rules[i].portNum, packet);
- } else {
- sendPacket(device.id, 0, packet);
- }
- }
- }
- }
- }
-
- }
- function copyPacket (packet) {
- newPacket = {};
- for (var i = 0; i < packetFields.length; i++) {
- if(packet.hasOwnProperty(packetFields[i].layer)){
- newPacket[packetFields[i].layer] = {};
- for (var j = 0; j < packetFields[i].fields.length; j++) {
- if(packet[packetFields[i].layer].hasOwnProperty(packetFields[i].fields[j])){
- newPacket[packetFields[i].layer][ packetFields[i].fields[j] ] = packet[packetFields[i].layer][ packetFields[i].fields[j] ];
- }
- }
- }
- }
- return newPacket;
- }
|