diff --git a/Python/attacker.py b/Python/attacker.py index bd3b66e..665ace8 100644 --- a/Python/attacker.py +++ b/Python/attacker.py @@ -81,15 +81,16 @@ def generateSYN(self): else: if(self.openPort == None): portNumber = random.randint(0, 500) #generate a random port number - npacket = packet.packet(self.ipAddress, portNumber,self.clientIP, 80, "PING", random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) + npacket = packet.packet(self.ipAddress, 20,"2.0.0.0", portNumber, "PING", random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) self.fileGen.addToLog(npacket.packetID, "Generated at Attacker", npacket.sequenceNumber, npacket.ackNumber, npacket.packetType, self.curTime) return npacket elif(self.checkOpenPorts >= 10): - npacket = packet.packet(self.ipAddress, self.openPort,self.clientIP, 80, "PING", random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) + npacket = packet.packet(self.ipAddress, 20,"2.0.0.0", self.openPort, "PING", random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) self.fileGen.addToLog(npacket.packetID, "Generated at Attacker", npacket.sequenceNumber, npacket.ackNumber, npacket.packetType, self.curTime) + self.checkOpenPorts = 0 return npacket else: - npacket = packet.packet(sourceIP, self.openPort, destinationIP, 80, packetType, random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) #return the packet + npacket = packet.packet(sourceIP, 20, destinationIP, self.openPort, packetType, random.randint(0, 10000), 0, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.ipAddress) #return the packet self.fileGen.addToLog(npacket.packetID, "Generated at Attacker", npacket.sequenceNumber, npacket.ackNumber, npacket.packetType, self.curTime) self.checkOpenPorts += 1 return npacket @@ -97,11 +98,13 @@ def generateSYN(self): def receivePacket(self, packet): - if(packet.packetType == "PONG" and self.openPort != None): - self.openPorts.append(packet.srcPortNumber) + if(packet.packetType == "PONG" and self.openPort == None): + self.openPort = packet.srcPortNumber + #print("One open port found: "+ str(self.openPort)) elif(packet.packetType == "PONG-RST"): if(packet.srcPortNumber == self.openPort): self.openPort = None + diff --git a/Python/client.py b/Python/client.py index 34c13d7..9c45f17 100644 --- a/Python/client.py +++ b/Python/client.py @@ -81,42 +81,29 @@ def createResponses(self): i = 0 while (i < len(self.receiveBuffer)): #iterate over the receive buffer curPacket = self.receiveBuffer[i] - if(curPacket.packetType == "PING"): + if ( (curPacket.srcIP, curPacket.ackNumber) in self.expectedSYNACKs): self.packetsGenerated += 1 - responsePacket = packet.packet(self.clientIP, curPacket.dstPortNumber, curPacket.srcIP, curPacket.srcPortNumber, "PONG", 0, curPacket.sequenceNumber + 1, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.clientIP) + responsePacket = packet.packet(self.clientIP, curPacket.dstPortNumber, curPacket.srcIP, curPacket.srcPortNumber, "ACK", 0, curPacket.sequenceNumber + 1, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.clientIP) self.fileGen.addToLog(responsePacket.packetID, "Generated at Client", responsePacket.sequenceNumber, responsePacket.ackNumber, responsePacket.packetType, self.curTime) self.currentQueueLoad += responsePacket.packetSize if(self.currentQueueLoad <= self.queueLimit): self.queue.append(responsePacket) else: self.currentQueueLoad -= responsePacket.packetSize - self.receiveBuffer.pop(i) #remove the packet from the queue - self.packetsInReceiveBuffer -= 1 - self.fileGen.addToLog(curPacket.packetID, "Responded to by Client", curPacket.sequenceNumber, curPacket.ackNumber, curPacket.packetType, self.curTime) - else: - if ( (curPacket.srcIP, curPacket.ackNumber) in self.expectedSYNACKs): - self.packetsGenerated += 1 - responsePacket = packet.packet(self.clientIP, curPacket.dstPortNumber, curPacket.srcIP, curPacket.srcPortNumber, "ACK", 0, curPacket.sequenceNumber + 1, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.clientIP) - self.fileGen.addToLog(responsePacket.packetID, "Generated at Client", responsePacket.sequenceNumber, responsePacket.ackNumber, responsePacket.packetType, self.curTime) - self.currentQueueLoad += responsePacket.packetSize - if(self.currentQueueLoad <= self.queueLimit): - self.queue.append(responsePacket) - else: - self.currentQueueLoad -= responsePacket.packetSize - #Drop Packet - else: #if the packet is not expected, send an RST ###dw - check this with Jesse since I'm not sure how the RSTs should be formatted - self.packetsGenerated += 1 - responsePacket = packet.packet(self.clientIP, curPacket.dstPortNumber, curPacket.srcIP, curPacket.srcPortNumber, "RST", 0, curPacket.sequenceNumber + 1, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.clientIP) - self.fileGen.addToLog(responsePacket.packetID, "Generated at Client", responsePacket.sequenceNumber, responsePacket.ackNumber, responsePacket.packetType, self.curTime) - self.currentQueueLoad += responsePacket.packetSize - if(self.currentQueueLoad <= self.queueLimit): - self.queue.append(responsePacket) - else: - self.currentQueueLoad -= responsePacket.packetSize - #Drop Packet - self.receiveBuffer.pop(i) #remove the packet from the queue - self.packetsInReceiveBuffer -= 1 - self.fileGen.addToLog(curPacket.packetID, "Responded to by Client", curPacket.sequenceNumber, curPacket.ackNumber, curPacket.packetType, self.curTime) + #Drop Packet + else: #if the packet is not expected, send an RST ###dw - check this with Jesse since I'm not sure how the RSTs should be formatted + self.packetsGenerated += 1 + responsePacket = packet.packet(self.clientIP, curPacket.dstPortNumber, curPacket.srcIP, curPacket.srcPortNumber, "RST", 0, curPacket.sequenceNumber + 1, self.packetIDPrefix + str(self.packetsGenerated),self.packetSize, self.clientIP) + self.fileGen.addToLog(responsePacket.packetID, "Generated at Client", responsePacket.sequenceNumber, responsePacket.ackNumber, responsePacket.packetType, self.curTime) + self.currentQueueLoad += responsePacket.packetSize + if(self.currentQueueLoad <= self.queueLimit): + self.queue.append(responsePacket) + else: + self.currentQueueLoad -= responsePacket.packetSize + #Drop Packet + self.receiveBuffer.pop(i) #remove the packet from the queue + self.packetsInReceiveBuffer -= 1 + self.fileGen.addToLog(curPacket.packetID, "Responded to by Client", curPacket.sequenceNumber, curPacket.ackNumber, curPacket.packetType, self.curTime) #Simulates normal traffic by sending periodic syn requests to a normal server def createNormalTraffic(self): diff --git a/Python/router.py b/Python/router.py index b128b7b..780af3e 100644 --- a/Python/router.py +++ b/Python/router.py @@ -71,7 +71,7 @@ def receivePacket(self, synPacket): self.packetsReceived += 1 self.fileGen.addToLog(synPacket.packetID, "Received at Router", synPacket.sequenceNumber, synPacket.ackNumber, synPacket.packetType, self.curTime) else: - print("Packet is getting Dropped") + #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) @@ -106,6 +106,9 @@ def addToQueues(self): self.currentQueueLoadClient -= i.packetSize #Drop Packet self.receiveBuffer.remove(i) + elif(i.dstIP == self.ipAddress): + self.filterPackets(i) + self.receiveBuffer.remove(i) else: self.currentQueueLoadAttacker += i.packetSize if(self.currentQueueLoadAttacker <= self.queueLimit): @@ -118,28 +121,38 @@ def addToQueues(self): def filterPackets(self, packetT): allow = False - for j in self.dddController.currentUsablePorts: - if(packetT.dstPortNumber == j): + for j in self.dddPortMapper.portMappings: + if(packetT.dstPortNumber == j[1]): allow = True - return True - #Check if the packets dst port number is listed as a current usable port. - if(allow == 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") - return True - #If the packets dst port number is not found in either list, then drop the packet - if(allow == False): - if(packetT.packetType == "PING"): - 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) - 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) - self.packetsDropped += 1 + 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) + 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) + 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): + for j in self.dddController.oldPorts: + if(packetT.dstPortNumber == j): + allow = True + #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) + 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. def processPackets(self): @@ -316,18 +329,14 @@ def sendPackets(self): self.packetsSent += 1 self.sendClient = None else: - print("Packet Dropped at the Port Mapper") - if(self.sendClient[0].packetType == "PING"): - npacket = packet.packet(self.ipAddress,self.sendClient[0].dstPortNumber,self.sendClient[0].srcIP, self.sendClient[0].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) + #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[1] - self.curTime) < 1): - print("Mapping Ports----------------------------------------------------------------------------------------------------------------") + #print("Mapping Ports----------------------------------------------------------------------------------------------------------------") #Check if packet's src port is already mapped. packetAlreadyMapped = False for j in self.dddPortMapper.portMappings: @@ -341,7 +350,7 @@ def sendPackets(self): if(packetAlreadyMapped == 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 @@ -355,12 +364,12 @@ def sendPackets(self): self.sendNServer = None if(self.sendMServer != None): if((self.sendMServer[1] - self.curTime) < 1): - print("Packet getting Mapped to go to M Server") + #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"): @@ -368,11 +377,11 @@ def sendPackets(self): 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.") + #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 @@ -386,7 +395,7 @@ def sendPackets(self): self.sendMServer = None if(self.sendAttacker != None): if((self.sendAttacker[1] - self.curTime) < 1): - print("Mapping Ports----------------------------------------------------------------------------------------------------------------") + #print("Mapping Ports----------------------------------------------------------------------------------------------------------------") #Check if packet's src port is already mapped. packetAlreadyMapped = False for j in self.dddPortMapper.portMappings: @@ -400,7 +409,7 @@ def sendPackets(self): if(packetAlreadyMapped == 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