123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- var deviceScripts = {
- manualRouter: {
- onPacketReceived: function(device, packet) {
- for (var i = 0; i < device.rules.length; i++) {
- if (device.rules[i].dstip == packet.network.dstip) {
- sendPacket(device.id, device.rules[i].portNum, packet);
- }
- }
- }
- },
- hub: {
- onPacketReceived: function (device, packet) {
- //.
- }
- },
- ping: {
- onPacketReceived: function(device, packet) {
- if(packet.hasOwnProperty("transport") && packet["transport"].hasOwnProperty("proto")){
- if(packet.transport.proto == "ICMP"){
- var new_packet = {
- network: {
- srcip: packet.network.dstip,
- dstip: packet.network.srcip
- },
- transport: {
- proto: "ICMP"
- }
- };
- sendPacket(device.id, 0, new_packet);
- }
- }
- }
- },
- modem: {
- onPacketReceived: function(device, 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)){
- new_packet[packetFields[i].layer] = {};
- for (var j = 0; j < packetFields[i].fields.length; j++) {
- if(packet[packetFields[i].layer].hasOwnProperty(packetFields[i].fields[j])){
- new_packet[packetFields[i].layer][ packetFields[i].fields[j] ] = packet[packetFields[i].layer][ packetFields[i].fields[j] ];
- }
- }
- }
- }
- new_packet.network.dstip = getPortRecipient(device.id, 0);
- sendPacket(device.id, 0, new_packet);
- } else { //replace src ip with device IP and save in NAT table
- var new_packet = {};
- for (var i = 0; i < packetFields.length; i++) {
- if(packet.hasOwnProperty(packetFields[i].layer)){
- new_packet[packetFields[i].layer] = {};
- for (var j = 0; j < packetFields[i].fields.length; j++) {
- if(packet[packetFields[i].layer].hasOwnProperty(packetFields[i].fields[j])){
- new_packet[packetFields[i].layer][ packetFields[i].fields[j] ] = packet[packetFields[i].layer][ packetFields[i].fields[j] ];
- }
- }
- }
- }
- new_packet.network.srcip = device.id;
- sendPacket(device.id, 1, new_packet);
- }
- }
- },
- switch: {
- onPacketReceived: function(device, packet) {
- 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){
- //broadcast packet to all ports except where it was received
- for(var i=0; i<device.ports; i++){
- sendPacket(device.id, i, packet);
- }
- }
- //update rules with info from this packet
- var found = false;
- for (var i = 0; (i < device.rules.length) && !found; i++) {
- if (device.rules[i].dstip == packet.network.srcip) {
- found = true;
- }
- }
- if(!found){
- device.rules[device.rules.length] = {
- dstip: packet.network.srcip,
- portNum: 3
- }
- }
- }
- }
- }
-
- }
|