diff --git a/Python/router.py b/Python/router.py index 780af3e..683b673 100644 --- a/Python/router.py +++ b/Python/router.py @@ -1,10 +1,22 @@ -#Router: This class creates the functionality for the router device within the network. Giving it the ability to receive packets, filter packets, map packets, and send packets +# Router: This class creates the functionality for the +# router device within the network. Giving it the +# ability to receive packets, filter packets, +# map packets, and send packets -import random #need the random library to generate random port numbers +import random # need the random library to generate random port numbers from . import packet + + class router: - def __init__(self, queueBufferSize, dddState, ipAddress, dddFilterDelay, dddMappingDelay, clientConnection, remoteServerConnection, attackServerConnection, attackerConnection, dddController, dddPortMapper, fileGen,queueLimit, bandwidthToClient, bandwidthToNServer, bandwidthToMserver,packetSize, packet_ID_prefix = "R-"): - self.queueSize = queueBufferSize #MB's + def __init__(self, queueBufferSize, dddState, + ipAddress, dddFilterDelay, dddMappingDelay, + clientConnection, remoteServerConnection, + attackServerConnection, attackerConnection, + dddController, dddPortMapper, + fileGen, queueLimit, bandwidthToClient, + bandwidthToNServer, bandwidthToMserver, + packetSize, packet_ID_prefix="R-"): + self.queueSize = queueBufferSize # MB's self.clientConnection = clientConnection self.clientIP = "1.0.0.0" self.remoteServerConnection = remoteServerConnection @@ -27,7 +39,6 @@ def __init__(self, queueBufferSize, dddState, ipAddress, dddFilterDelay, dddMapp self.sendMServer = None self.sendAttacker = None - self.receiveBuffer = [] self.curTime = 0 @@ -36,76 +47,83 @@ def __init__(self, queueBufferSize, dddState, ipAddress, dddFilterDelay, dddMapp self.currentQueueLoadNServer = 0 self.currentQueueLoadMServer = 0 self.currentQueueLoadAttacker = 0 - - #self.sendRate = sendRate #MB per sec self.bandwidthToClient = bandwidthToClient self.bandwidthToNServer = bandwidthToNServer self.bandwidthToMserver = bandwidthToMserver self.bandwidthToAttacker = bandwidthToMserver - self.dddController = dddController self.dddPortMapper = dddPortMapper - self.fileGen = fileGen #File management object + self.fileGen = fileGen # File management object - self.packetsSent = 0 #counter for logging purposes - self.packetsReceived = 0 #counter for logging purposes - self.packetsDropped = 0 #counter for packets dropped - self.packetsGenerated = 0 #Counter for the number of new packets uniquely created. Used for the packet ID (Should never be greater than 0 for the router) - self.packetsInQueue = 0 #Counter for logging purposes - self.packetsDroppedOnConnection = 0 #specifies the number of packets that dropped on the connectionObject due to bandwidth after being sent by the device + # These counters are used for logging purposes + self.packetsSent = 0 + self.packetsReceived = 0 + self.packetsDropped = 0 + self.packetsGenerated = 0 + self.packetsInQueue = 0 + self.packetsDroppedOnConnection = 0 - self.packetIDPrefix = packet_ID_prefix #Used for packet IDs as a prefix so that we're not using the IPs + self.packetIDPrefix = packet_ID_prefix # Used for packet IDs self.timeToNextIterationClient = 1 self.timeToNextIterationNServer = 1 self.timeToNextIterationMServer = 1 self.timeToNextIterationAttacker = 1 - + self.packetSize = packetSize - #Receive packets coming from different connections. Add to receive buffer, drop if receive buffer is full. + # Receive packets coming from different connections. def receivePacket(self, synPacket): if(len(self.receiveBuffer) < self.queueSize): self.receiveBuffer.append(synPacket) self.packetsReceived += 1 - self.fileGen.addToLog(synPacket.packetID, "Received at Router", synPacket.sequenceNumber, synPacket.ackNumber, synPacket.packetType, self.curTime) + self.fileGen.addToLog(synPacket.packetID, "Received at Router", + synPacket.sequenceNumber, synPacket.ackNumber, + synPacket.packetType, self.curTime) else: - #print("Packet is getting Dropped") - self.fileGen.animateDrop(self.packetIDPrefix[0], curPacket.packetType, curPacket.sequenceNumber, curPacket.ackNumber, curPacket.dstPortNumber) + # print("Packet is getting Dropped") + self.fileGen.animateDrop(self.packetIDPrefix[0], + curPacket.packetType, + curPacket.sequenceNumber, + curPacket.ackNumber, + curPacket.dstPortNumber) self.packetsDropped += 1 - self.fileGen.addToLog(synPacket.packetID, "Dropped at Router: No space in receiveBuffer", synPacket.sequenceNumber, synPacket.ackNumber, synPacket.packetType, self.curTime) + self.fileGen.addToLog(synPacket.packetID, + "Dropped at Router: No space in receiveBuffer", + synPacket.sequenceNumber, synPacket.ackNumber, + synPacket.packetType, self.curTime) - #Adds the packets in the receive buffer to their corresponding destination queues. + # Adds the packets in receive buffer to destination queues. def addToQueues(self): for i in self.receiveBuffer: - #Add to remote servers queue + # Add to remote servers queue if(i.dstIP == self.remoteServerIP): self.currentQueueLoadNServer += i.packetSize if(self.currentQueueLoadNServer <= self.queueLimit): self.queueNServer.append(i) else: self.currentQueueLoadNServer -= i.packetSize - #Drop Packet + # Drop Packet self.receiveBuffer.remove(i) - #Add to attack servers queue + # Add to attack servers queue elif(i.dstIP == self.attackServerIP): self.currentQueueLoadMServer += i.packetSize if(self.currentQueueLoadMServer <= self.queueLimit): self.queueMServer.append(i) else: self.currentQueueLoadMServer -= i.packetSize - #Drop Packet + # Drop Packet self.receiveBuffer.remove(i) - #Add to clients queue + # Add to clients queue elif(i.dstIP == self.clientIP): self.currentQueueLoadClient += i.packetSize if(self.currentQueueLoadClient <= self.queueLimit): self.queueClient.append(i) else: self.currentQueueLoadClient -= i.packetSize - #Drop Packet - self.receiveBuffer.remove(i) + # Drop Packet + self.receiveBuffer.remove(i) elif(i.dstIP == self.ipAddress): self.filterPackets(i) self.receiveBuffer.remove(i) @@ -115,126 +133,158 @@ def addToQueues(self): self.queueAttacker.append(i) else: self.currentQueueLoadAttacker -= i.packetSize - #Drop Packet + # Drop Packet self.receiveBuffer.remove(i) - def filterPackets(self, packetT): allow = False for j in self.dddPortMapper.portMappings: if(packetT.dstPortNumber == j[1]): allow = True - if(packetT.packetType == "PING" and allow == True): - #print("Packet is a PING and found an open port: " + str(packetT.dstPortNumber)) - npacket = packet.packet(self.ipAddress,packetT.dstPortNumber,packetT.srcIP, packetT.srcPortNumber, "PONG", random.randint(0, 10000), 0, "R" ,self.packetSize, self.ipAddress) - self.fileGen.addToLog(npacket.packetID, "Generated at Router", npacket.sequenceNumber, npacket.ackNumber, npacket.packetType, self.curTime) + if(packetT.packetType == "PING" and allow is True): + # print("Packet is a PING and found an open port: " + str(packetT.dstPortNumber)) + npacket = packet.packet(self.ipAddress, packetT.dstPortNumber, + packetT.srcIP, packetT.srcPortNumber, + "PONG", random.randint(0, 10000), + 0, "R", self.packetSize, + self.ipAddress) + self.fileGen.addToLog(npacket.packetID, "Generated at Router", + npacket.sequenceNumber, npacket.ackNumber, + npacket.packetType, self.curTime) self.queueAttacker.append(npacket) return False elif(packetT.packetType == "PING"): - #print("Packet is not the right port: " + str(packetT.dstPortNumber)) - npacket = packet.packet(self.ipAddress,packetT.dstPortNumber,packetT.srcIP, packetT.srcPortNumber, "PONG-RST", random.randint(0, 10000), 0, "R" ,self.packetSize, self.ipAddress) - self.fileGen.addToLog(npacket.packetID, "Generated at Router", npacket.sequenceNumber, npacket.ackNumber, npacket.packetType, self.curTime) + # print("Packet is not the right port: " + str(packetT.dstPortNumber)) + npacket = packet.packet(self.ipAddress, packetT.dstPortNumber, + packetT.srcIP, packetT.srcPortNumber, + "PONG-RST", random.randint(0, 10000), + 0, "R", self.packetSize, self.ipAddress) + self.fileGen.addToLog(npacket.packetID, "Generated at Router", + npacket.sequenceNumber, npacket.ackNumber, + npacket.packetType, self.curTime) self.queueAttacker.append(npacket) return False else: - #Check if the packets dst port number is listed as a current usable port. - if(allow == False and len(self.dddController.oldPorts) != 0): + # Check if the packets dst port number is listed as a current usable port. + if(allow is False and len(self.dddController.oldPorts) != 0): for j in self.dddController.oldPorts: if(packetT.dstPortNumber == j): allow = True - #print("This packet got past the filter") + # print("This packet got past the filter") return True else: return True - #If the packets dst port number is not found in either list, then drop the packet - if(allow == False): - #print("Packet dropped at the DDD Filter") - self.fileGen.animateDrop(self.packetIDPrefix[0], packetT.packetType, packetT.sequenceNumber, packetT.ackNumber, packetT.dstPortNumber)###dw - self.fileGen.addToLog(packetT.packetID, "Dropped at DDD Filter", packetT.sequenceNumber, packetT.ackNumber, packetT.packetType, self.curTime) + # If the packets dst port number is not found in either list, then drop the packet + if(allow is False): + # print("Packet dropped at the DDD Filter") + self.fileGen.animateDrop(self.packetIDPrefix[0], + packetT.packetType, + packetT.sequenceNumber, + packetT.ackNumber, + packetT.dstPortNumber) + self.fileGen.addToLog(packetT.packetID, "Dropped at DDD Filter", + packetT.sequenceNumber, packetT.ackNumber, + packetT.packetType, self.curTime) self.packetsDropped += 1 return False - #If no packet is sending from each interface, then it will start sending a packet on that interface from the queue. + # If no packet is sending from a interface, start sending a packet on that interface. def processPackets(self): - #Different delays depending on if the ddd is on or off + # Different delays depending on if the ddd is on or off if(self.dddState): - if(len(self.queueClient) > 0 and self.sendClient == None and self.timeToNextIterationClient >= 0): #send packet to client + if(len(self.queueClient) > 0 and self.sendClient is None and + self.timeToNextIterationClient >= 0): # send packet to client curPacket = self.queueClient.pop(0) if(self.filterPackets(curPacket)): - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 - transmissionDelay = (curPacket.packetSize / self.bandwidthToClient) * 1000 ### DW AUDIT 31JAN2021 + transmissionDelay = (curPacket.packetSize / self.bandwidthToClient) * 1000 self.timeToNextIterationClient -= transmissionDelay if(self.timeToNextIterationClient >= 0): self.packetsSent += 1 - self.sendClient = [curPacket, self.curTime + transmissionDelay + self.dddFilterDelay + self.dddMappingDelay] + self.sendClient = [curPacket, self.curTime + + transmissionDelay + self.dddFilterDelay + + self.dddMappingDelay] self.currentQueueLoadClient -= curPacket.packetSize else: self.timeToNextIterationClient += transmissionDelay self.packetsSent += 1 - self.sendClient = [curPacket, self.curTime + transmissionDelay + self.dddFilterDelay + self.dddMappingDelay - (self.timeToNextIterationClient)] + self.sendClient = [curPacket, self.curTime + transmissionDelay + + self.dddFilterDelay + self.dddMappingDelay + - (self.timeToNextIterationClient)] self.currentQueueLoadClient -= curPacket.packetSize self.timeToNextIterationClient -= transmissionDelay - elif(self.sendClient != None): + elif(self.sendClient is not None): leftoverTime = self.sendClient[1] - self.curTime self.timeToNextIterationClient -= leftoverTime - if(len(self.queueNServer) > 0 and self.sendNServer == None and self.timeToNextIterationNServer >= 0): #send packet to remote server + if(len(self.queueNServer) > 0 and self.sendNServer is None and + self.timeToNextIterationNServer >= 0): # send packet to remote server curPacket = self.queueNServer.pop(0) - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 - transmissionDelay = (curPacket.packetSize / self.bandwidthToNServer) * 1000 #DW AUDIT 31JAN2021 + transmissionDelay = (curPacket.packetSize / self.bandwidthToNServer) * 1000 self.timeToNextIterationNServer -= transmissionDelay if(self.timeToNextIterationNServer >= 0): self.packetsSent += 1 - self.sendNServer = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay] + self.sendNServer = [curPacket, self.curTime + + transmissionDelay + + self.dddMappingDelay] self.currentQueueLoadNServer -= curPacket.packetSize else: self.timeToNextIterationNServer += transmissionDelay self.packetsSent += 1 - self.sendNServer = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay - (self.timeToNextIterationNServer)] + self.sendNServer = [curPacket, self.curTime + transmissionDelay + + self.dddMappingDelay + - (self.timeToNextIterationNServer)] self.currentQueueLoadNServer -= curPacket.packetSize self.timeToNextIterationNServer -= transmissionDelay - elif(self.sendNServer != None): + elif(self.sendNServer is not None): leftoverTime = self.sendNServer[1] - self.curTime self.timeToNextIterationNServer -= leftoverTime - if(len(self.queueMServer) > 0 and self.sendMServer == None and self.timeToNextIterationMServer >= 0): #send packet to remote server + if(len(self.queueMServer) > 0 and self.sendMServer is None + and self.timeToNextIterationMServer >= 0): # send packet to remote server curPacket = self.queueMServer.pop(0) - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 transmissionDelay = (curPacket.packetSize / self.bandwidthToMserver) * 1000 self.timeToNextIterationMServer -= transmissionDelay if(self.timeToNextIterationMServer >= 0): self.packetsSent += 1 - self.sendMServer = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay] + self.sendMServer = [curPacket, self.curTime + + transmissionDelay + + self.dddMappingDelay] self.currentQueueLoadMServer -= curPacket.packetSize else: self.timeToNextIterationMServer += transmissionDelay self.packetsSent += 1 - self.sendMServer = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay - (self.timeToNextIterationMServer)] + self.sendMServer = [curPacket, self.curTime + + transmissionDelay + self.dddMappingDelay + - (self.timeToNextIterationMServer)] self.currentQueueLoadMServer -= curPacket.packetSize self.timeToNextIterationMServer -= transmissionDelay - elif(self.sendMServer != None): + elif(self.sendMServer is not None): leftoverTime = self.sendMServer[1] - self.curTime self.timeToNextIterationMServer -= leftoverTime - if(len(self.queueAttacker) > 0 and self.sendAttacker == None and self.timeToNextIterationAttacker >= 0): #send packet to remote server + if(len(self.queueAttacker) > 0 and self.sendAttacker is None + and self.timeToNextIterationAttacker >= 0): # send packet to remote server curPacket = self.queueAttacker.pop(0) - + transmissionDelay = (curPacket.packetSize / self.bandwidthToAttacker) * 1000 self.timeToNextIterationAttacker -= transmissionDelay if(self.timeToNextIterationAttacker >= 0): self.packetsSent += 1 - self.sendAttacker = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay] + self.sendAttacker = [curPacket, self.curTime + + transmissionDelay + self.dddMappingDelay] self.currentQueueLoadAttacker -= curPacket.packetSize else: self.timeToNextIterationAttacker += transmissionDelay self.packetsSent += 1 - self.sendAttacker = [curPacket, self.curTime + transmissionDelay + self.dddMappingDelay - (self.timeToNextIterationAttacker)] + self.sendAttacker = [curPacket, self.curTime + + transmissionDelay + self.dddMappingDelay + - (self.timeToNextIterationAttacker)] self.currentQueueLoadAttacker -= curPacket.packetSize self.timeToNextIterationAttacker -= transmissionDelay - elif(self.sendAttacker != None): + elif(self.sendAttacker is not None): leftoverTime = self.sendAttacker[1] - self.curTime self.timeToNextIterationAttacker -= leftoverTime else: - if(len(self.queueClient) > 0 and self.sendClient == None and self.timeToNextIterationClient >= 0): #send packet to client + if(len(self.queueClient) > 0 and self.sendClient is None + and self.timeToNextIterationClient >= 0): # send packet to client curPacket = self.queueClient.pop(0) - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 transmissionDelay = (curPacket.packetSize / self.bandwidthToClient) * 1000 self.timeToNextIterationClient -= transmissionDelay if(self.timeToNextIterationClient >= 0): @@ -244,17 +294,18 @@ def processPackets(self): else: self.timeToNextIterationClient += transmissionDelay self.packetsSent += 1 - self.sendClient = [curPacket, self.curTime + transmissionDelay - (self.timeToNextIterationClient)] + self.sendClient = [curPacket, self.curTime + + transmissionDelay + - (self.timeToNextIterationClient)] self.timeToNextIterationClient -= transmissionDelay self.currentQueueLoadClient -= curPacket.packetSize - - elif(self.sendClient != None): + elif(self.sendClient is not None): leftoverTime = self.sendClient[1] - self.curTime self.timeToNextIterationClient -= leftoverTime - if(len(self.queueNServer) > 0 and self.sendNServer == None and self.timeToNextIterationNServer >= 0): #send packet to remote server + if(len(self.queueNServer) > 0 and self.sendNServer is None + and self.timeToNextIterationNServer >= 0): # send packet to remote server curPacket = self.queueNServer.pop(0) - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 - transmissionDelay = (curPacket.packetSize / self.bandwidthToNServer) * 1000 # DW AUDIT 31JAN2021 + transmissionDelay = (curPacket.packetSize / self.bandwidthToNServer) * 1000 self.timeToNextIterationNServer -= transmissionDelay if(self.timeToNextIterationNServer >= 0): self.packetsSent += 1 @@ -263,16 +314,18 @@ def processPackets(self): else: self.timeToNextIterationNServer += transmissionDelay self.packetsSent += 1 - self.sendNServer = [curPacket, self.curTime + transmissionDelay - (self.timeToNextIterationNServer)] + self.sendNServer = [curPacket, self.curTime + + transmissionDelay + - (self.timeToNextIterationNServer)] self.currentQueueLoadNServer -= curPacket.packetSize self.timeToNextIterationNServer -= transmissionDelay - elif(self.sendNServer != None): + elif(self.sendNServer is not None): leftoverTime = self.sendNServer[1] - self.curTime self.timeToNextIterationNServer -= leftoverTime - if(len(self.queueMServer) > 0 and self.sendMServer == None and self.timeToNextIterationMServer >= 0): #send packet to remote server + if(len(self.queueMServer) > 0 and self.sendMServer is None + and self.timeToNextIterationMServer >= 0): # send packet to remote server curPacket = self.queueMServer.pop(0) - ### DW AUDIT 31JAN2021 transmissionDelay = (curPacket.packetSize / self.sendRate) * 1000 - transmissionDelay = (curPacket.packetSize / self.bandwidthToMserver) * 1000 #DW AUDIT 31JAN2021 + transmissionDelay = (curPacket.packetSize / self.bandwidthToMserver) * 1000 self.timeToNextIterationMServer -= transmissionDelay if(self.timeToNextIterationMServer >= 0): self.packetsSent += 1 @@ -281,15 +334,16 @@ def processPackets(self): else: self.timeToNextIterationMServer += transmissionDelay self.packetsSent += 1 - self.sendMServer = [curPacket, self.curTime + transmissionDelay - (self.timeToNextIterationMServer)] + self.sendMServer = [curPacket, self.curTime + transmissionDelay + - (self.timeToNextIterationMServer)] self.currentQueueLoadMServer -= curPacket.packetSize self.timeToNextIterationMServer -= transmissionDelay - elif(self.sendMServer != None): + elif(self.sendMServer is not None): leftoverTime = self.sendMServer[1] - self.curTime self.timeToNextIterationMServer -= leftoverTime - if(len(self.queueAttacker) > 0 and self.sendAttacker == None and self.timeToNextIterationAttacker >= 0): #send packet to remote server + if(len(self.queueAttacker) > 0 and self.sendAttacker is None + and self.timeToNextIterationAttacker >= 0): # send packet to remote server curPacket = self.queueAttacker.pop(0) - transmissionDelay = (curPacket.packetSize / self.bandwidthToAttacker) * 1000 self.timeToNextIterationAttacker -= transmissionDelay if(self.timeToNextIterationAttacker >= 0): @@ -302,165 +356,171 @@ def processPackets(self): self.sendAttacker = [curPacket, self.curTime + transmissionDelay - (self.timeToNextIterationAttacker)] self.currentQueueLoadAttacker -= curPacket.packetSize self.timeToNextIterationAttacker -= transmissionDelay - elif(self.sendAttacker != None): + elif(self.sendAttacker is not None): leftoverTime = self.sendAttacker[1] - self.curTime self.timeToNextIterationAttacker -= leftoverTime - - #Takes each of the packets that the interfaces are sending and makes sure they are being filtered and/or mapped correctly. + # Sending packets and making sure they are being filtered and/or mapped correctly. def sendPackets(self): if(self.dddState): - if(self.sendClient != None): + if(self.sendClient is not None): if((self.sendClient[1] - self.curTime) < 1): dropAtMapper = False - #Check to see if ddd port mapper has the packets dst port mapped to a port + # Check to see if ddd port mapper has the packets dst port mapped to a port for j in self.dddPortMapper.portMappings: - #If mapped then set port number accordingly and update the mappings within the ddd port mapper + # If mapped then set port number accordingly and update the mappings within the ddd port mapper if(self.sendClient[0].dstPortNumber == j[1] and j[0] != 0): dropAtMapper = True self.sendClient[0].dstPortNumber = j[0] self.sendClient[0].sendingDevice = self.ipAddress break - - #If ddd Port does have the dst port mapped to an internal port, then send to client, else drop. + # If ddd Port does have the dst port mapped to an internal port, then send to client, else drop. if(dropAtMapper): destinationConnection = self.clientConnection destinationConnection.transferPacketOut(self.sendClient[0]) self.packetsSent += 1 self.sendClient = None else: - #print("Packet Dropped at the Port Mapper") - self.fileGen.animateDrop(self.packetIDPrefix[0], self.sendClient[0].packetType, self.sendClient[0].sequenceNumber, self.sendClient[0].ackNumber, self.sendClient[0].dstPortNumber) - self.fileGen.addToLog(self.sendClient[0].packetID, "Dropped at Port Mapper", self.sendClient[0].sequenceNumber, self.sendClient[0].ackNumber, self.sendClient[0].packetType, self.curTime) + # print("Packet Dropped at the Port Mapper") + self.fileGen.animateDrop(self.packetIDPrefix[0], + self.sendClient[0].packetType, + self.sendClient[0].sequenceNumber, + self.sendClient[0].ackNumber, + self.sendClient[0].dstPortNumber) + self.fileGen.addToLog(self.sendClient[0].packetID, + "Dropped at Port Mapper", + self.sendClient[0].sequenceNumber, + self.sendClient[0].ackNumber, + self.sendClient[0].packetType, + self.curTime) self.sendClient = None self.packetsDropped += 1 - if(self.sendNServer != None): + if(self.sendNServer is not None): if((self.sendNServer[1] - self.curTime) < 1): - #print("Mapping Ports----------------------------------------------------------------------------------------------------------------") - #Check if packet's src port is already mapped. + # print("Mapping Ports----------------------------------------------------------------------------------------------------------------") + # Check if packet's src port is already mapped. packetAlreadyMapped = False for j in self.dddPortMapper.portMappings: if(j[0] == self.sendNServer[0].srcPortNumber): packetAlreadyMapped = True self.sendNServer[0].srcPortNumber = j[1] - if(self.sendNServer[0].packetType == "ACK" or self.sendNServer[0].packetType == "RST"): + if(self.sendNServer[0].packetType == "ACK" + or self.sendNServer[0].packetType == "RST"): self.dddPortMapper.updateMappings(0, self.sendNServer[0].srcPortNumber) break - #If src port isn't already mapped, find open port to map and set that equal to the packets src port - if(packetAlreadyMapped == False): + # If src port isn't already mapped, find open port to map and set that equal to the packets src port + if(packetAlreadyMapped is False): openPort = self.dddPortMapper.getAvailableOpenPort() if(openPort == 0): - #print("No more ports open") + # print("No more ports open") pass else: originalSrcPort = self.sendNServer[0].srcPortNumber self.sendNServer[0].srcPortNumber = openPort self.dddPortMapper.updateMappings(originalSrcPort, openPort) - - #Send packet to the either the remote server or the remote attack server + # Send packet to the either the remote server or the remote attack server self.sendNServer[0].sendingDevice = self.ipAddress self.remoteServerConnection.transferPacketOut(self.sendNServer[0]) self.packetsSent += 1 self.sendNServer = None - if(self.sendMServer != None): + if(self.sendMServer is not None): if((self.sendMServer[1] - self.curTime) < 1): - #print("Packet getting Mapped to go to M Server") - #Check if packet's src port is already mapped. + # print("Packet getting Mapped to go to M Server") + # Check if packet's src port is already mapped. packetAlreadyMapped = False for j in self.dddPortMapper.portMappings: if(j[0] == self.sendMServer[0].srcPortNumber): - #print("Port is already mapped") + # print("Port is already mapped") packetAlreadyMapped = True self.sendMServer[0].srcPortNumber = j[1] - if(self.sendMServer[0].packetType == "ACK" or self.sendMServer[0].packetType == "RST"): + if(self.sendMServer[0].packetType == "ACK" + or self.sendMServer[0].packetType == "RST"): self.dddPortMapper.updateMappings(0, self.sendMServer[0].srcPortNumber) break - #If src port isn't already mapped, find open port to map and set that equal to the packets src port - if(packetAlreadyMapped == False): - #print("Port was not mapped.") + # If src port isn't already mapped, find open port to map and set that equal to the packets src port + if(packetAlreadyMapped is False): + # print("Port was not mapped.") openPort = self.dddPortMapper.getAvailableOpenPort() - #print("Mapping to port " + str(openPort)) + # print("Mapping to port " + str(openPort)) if(openPort == 0): - #print("No more ports open") + # print("No more ports open") pass else: originalSrcPort = self.sendMServer[0].srcPortNumber self.sendMServer[0].srcPortNumber = openPort self.dddPortMapper.updateMappings(originalSrcPort, openPort) - - #Send packet to the either the remote server or the remote attack server + # Send packet to the either the remote server or the remote attack server self.sendMServer[0].sendingDevice = self.ipAddress self.remoteServerConnection.transferPacketOut(self.sendMServer[0]) self.packetsSent += 1 self.sendMServer = None - if(self.sendAttacker != None): + if(self.sendAttacker is not None): if((self.sendAttacker[1] - self.curTime) < 1): - #print("Mapping Ports----------------------------------------------------------------------------------------------------------------") - #Check if packet's src port is already mapped. + # print("Mapping Ports----------------------------------------------------------------------------------------------------------------") + # Check if packet's src port is already mapped. packetAlreadyMapped = False for j in self.dddPortMapper.portMappings: if(j[0] == self.sendAttacker[0].srcPortNumber): packetAlreadyMapped = True self.sendAttacker[0].srcPortNumber = j[1] - if(self.sendAttacker[0].packetType == "ACK" or self.sendAttacker[0].packetType == "RST"): + if(self.sendAttacker[0].packetType == "ACK" + or self.sendAttacker[0].packetType == "RST"): self.dddPortMapper.updateMappings(0, self.sendAttacker[0].srcPortNumber) break - #If src port isn't already mapped, find open port to map and set that equal to the packets src port - if(packetAlreadyMapped == False): + # If src port isn't already mapped, find open port to map and set that equal to the packets src port + if(packetAlreadyMapped is False): openPort = self.dddPortMapper.getAvailableOpenPort() if(openPort == 0): - #print("No more ports open") + # print("No more ports open") pass else: originalSrcPort = self.sendAttacker[0].srcPortNumber self.sendAttacker[0].srcPortNumber = openPort self.dddPortMapper.updateMappings(originalSrcPort, openPort) - - #Send packet to the either the remote server or the remote attack server + # Send packet to the either the remote server or the remote attack server self.sendAttacker[0].sendingDevice = self.ipAddress self.attackerConnection.transferPacketOut(self.sendAttacker[0]) self.packetsSent += 1 self.sendAttacker = None - - #if ddd state is off, then send as many packets as possible within the time unit + # if ddd state is off, then send as many packets as possible within the time unit else: - if(self.sendClient != None): + if(self.sendClient is not None): if((self.sendClient[1] - self.curTime) < 1): self.sendClient[0].sendingDevice = self.ipAddress self.clientConnection.transferPacketOut(self.sendClient[0]) self.packetsSent += 1 self.sendClient = None - - if(self.sendNServer != None): + if(self.sendNServer is not None): if((self.sendNServer[1] - self.curTime) < 1): self.sendNServer[0].sendingDevice = self.ipAddress self.remoteServerConnection.transferPacketOut(self.sendNServer[0]) self.packetsSent += 1 self.sendNServer = None - - if(self.sendMServer != None): + if(self.sendMServer is not None): if((self.sendMServer[1] - self.curTime) < 1): self.sendMServer[0].sendingDevice = self.ipAddress self.attackServerConnection.transferPacketOut(self.sendMServer[0]) self.packetsSent += 1 self.sendMServer = None - if(self.sendAttacker != None): + if(self.sendAttacker is not None): if((self.sendAttacker[1] - self.curTime) < 1): self.sendAttacker[0].sendingDevice = self.ipAddress self.attackerConnection.transferPacketOut(self.sendAttacker[0]) self.packetsSent += 1 self.sendAttacker = None - - #Update time and send packets + # Update time and send packets def updateTime(self): self.curTime = self.curTime + 1 self.timeToNextIterationClient = 1 self.timeToNextIterationNServer = 1 self.timeToNextIterationMServer = 1 self.timeToNextIterationAttacker = 1 - #self.numberOfPacketsReceived = 0 + # self.numberOfPacketsReceived = 0 self.addToQueues() - while((self.timeToNextIterationClient > 0 and (self.sendClient is not None or len(self.queueClient) > 0)) or (self.timeToNextIterationNServer > 0 and (self.sendNServer is not None or len(self.queueNServer) > 0)) or (self.timeToNextIterationMServer > 0 and (self.sendMServer is not None or len(self.queueMServer) > 0)) or (self.timeToNextIterationAttacker > 0 and (self.sendAttacker is not None or len(self.queueAttacker) > 0))): + while((self.timeToNextIterationClient > 0 and (self.sendClient is not None or len(self.queueClient) > 0)) + or (self.timeToNextIterationNServer > 0 and (self.sendNServer is not None or len(self.queueNServer) > 0)) + or (self.timeToNextIterationMServer > 0 and (self.sendMServer is not None or len(self.queueMServer) > 0)) + or (self.timeToNextIterationAttacker > 0 and (self.sendAttacker is not None or len(self.queueAttacker) > 0))): self.processPackets() self.sendPackets()