Skip to content
Permalink
64cc7f3d74
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
619 lines (573 sloc) 44.2 KB
from time import strftime as getTime
import csv
import json
import os
from . import connectionObject
import matplotlib.pyplot as plt
class filegenerator:
def __init__(self, make_log, make_summary,
make_animation, log_name, summary_name,
dddState, packetSize, resendSynAckTime,
MaxQueueSize, DDDMappingDelay, PropDelay,
NumbDDDPortsOpen, bandwidths, timeUntilNextDDDChange,
overlapTime, numbSynAckResends, attackerType,
isAmplification, storageFolder, sessionId):
# boolean statements for deciding which files to make
self.makeLog = make_log
self.makeSummary = make_summary
self.makeAnimation = make_animation
# Make folders
try:
os.mkdir(storageFolder)
except FileExistsError:
pass # This error is to be expected.
# If FileExistsError happens here, this means a GUID collision. I don't think it is possible.
os.mkdir(os.path.join(storageFolder, str(sessionId)))
self.storageFolder = os.path.join(storageFolder, str(sessionId))
# File Name to be used
self.logFileName = os.path.join(self.storageFolder, "log.csv")
self.summaryFileName = os.path.join(self.storageFolder, "summary.csv")
# names of the output files
self.logName = log_name
self.summaryName = summary_name
self.sessionId = sessionId
self.curTime = 0 # current time unit (same as the other classes)
self.dddState = dddState
self.clientToRouter = bandwidths[0]
self.routerToClient = bandwidths[1]
self.routerToMServer = bandwidths[2]
self.routerToNServer = bandwidths[3]
self.NServerToRouter = bandwidths[4]
self.MServerToRouter = bandwidths[5]
self.attackerToReflector = bandwidths[6]
self.packetSize = packetSize
self.resendSynAckTime = resendSynAckTime
self.numbSynAckResends = numbSynAckResends
self.MaxQueueSize = MaxQueueSize
self.dddMappingDelay = DDDMappingDelay
self.PropDelay = PropDelay
self.NumbDDDPortsOpen = NumbDDDPortsOpen
self.timeUntilNextDDDChange = timeUntilNextDDDChange
self.overlapTime = overlapTime
if (attackerType == 0):
self.attackerType = "Ignorant"
else:
self.attackerType = "Smart"
if (isAmplification == 0):
self.isAmplification = "No Amplification"
else:
self.isAmplification = "Amplification"
if (self.makeAnimation):
self.initializeAnimationInstructions()
if (self.makeSummary):
self.initializeSummary()
if (self.makeLog):
self.initializeLog()
# initializer for the log file
def initializeLog(self):
self.packetDictionary = dict() # keys are the packetIDs, values are lists which contain triples denoting the packetID, the time, and the status / location of the packet
self.lengthLongestEntry = 0 # used to help create the log in a CSV format. Tracks the packet with the longest log entry to help create an appropriately sized CSV
# the file itself isn't written until after the simulation runs, so we don't need to open the file
for x in [' Step',
'Packets Sent (Attacker)', 'Packets Received (Attacker)',
'Packets Dropped (Attacker)',
'Average Number of Packets Received per ms (Attacker)',
'Average Number of Packets Dropped per ms (Attacker)',
'Packets Sent (Client)',
'Packets Received (Client)', 'Packets Dropped (Client)',
'Average Number of Packets Received per ms (Client)',
'Average Number of Packets Dropped per ms (Client)',
'Packets Sent (Router)', 'Packets Received (Router)',
'Packets Dropped (Router)',
'Average Number of Packets Received per ms (Router)',
'Average Number of Packets Dropped per ms (Router)',
'Packets Sent (Reflection Server)', 'Packets Received (Reflection Server)',
'Packets Dropped (Reflection Server)',
'Average Number of Packets Received per ms (Reflection Server)',
'Average Number of Packets Dropped per ms (Reflection Server)',
'Packets Sent (Normal Server)',
'Packets Received (Normal Server)', 'Packets Dropped (Normal Server)',
'Average Number of Packets Received per ms (Normal Server)',
'Average Number of Packets Dropped per ms (Normal Server)',
'Packets Accepted (Connection: Attacker-Reflection Server)',
'Packets Dropped (Connection: Attacker-Reflection Server)',
'Packets Delivered (Connection: Attacker-Reflection Server)',
'Average Number of Packets Received per ms (Connection: Attacker-Reflection Server)',
'Average Number of Packets Dropped per ms (Connection: Attacker-Reflection Server)',
'Packets Accepted (Connection: Router-Reflection Server)',
'Packets Dropped (Connection: Router-Reflection Server)',
'Packets Delivered (Connection: Router-Reflection Server)',
'Average Number of Packets Received per ms (Connection: Router-Reflection Server)',
'Average Number of Packets Dropped per ms (Connection: Router-Reflection Server)',
'Packets Accepted (Connection: Reflection Server-Router)',
'Packets Dropped (Connection: Reflection Server-Router)',
'Packets Delivered (Connection: Reflection Server-Router)',
'Average Number of Packets Received per ms (Connection: Reflection Server-Router)',
'Average Number of Packets Dropped per ms (Connection: Reflection Server-Router)',
'Packets Accepted (Connection: Router-Normal Server)',
'Packets Dropped (Connection: Router-Normal Server)',
'Packets Delivered (Connection: Router-Normal Server)',
'Average Number of Packets Received per ms (Connection: Router-Normal Server)',
'Average Number of Packets Dropped per ms (Connection: Router-Normal Server)',
'Packets Accepted (Connection: Normal Server-Router)',
'Packets Dropped (Connection: Normal Server-Router)',
'Packets Delivered (Connection: Normal Server-Router)',
'Average Number of Packets Received per ms (Connection: Normal Server-Router)',
'Average Number of Packets Dropped per ms (Connection: Normal Server-Router)',
'Packets Accepted (Connection: Client-NAT)',
'Packets Dropped (Connection: Client-NAT)',
'Packets Delivered (Connection: Client-NAT)',
'Average Number of Packets Received per ms (Connection: Client-NAT)',
'Average Number of Packets Dropped per ms (Connection: Client-NAT)',
'Packets Accepted (Connection: NAT-Client)',
'Packets Dropped (Connection: NAT-Client)',
'Packets Delivered (Connection: NAT-Client)',
'Average Number of Packets Received per ms (Connection: NAT-Client)',
'Average Number of Packets Dropped per ms (Connection: NAT-Client)',
'Packets Accepted (Connection: Attacker-Router)',
'Packets Dropped (Connection: Attacker-Router)',
'Packets Delivered (Connection: Attacker-Router)',
'Average Number of Packets Received per ms (Connection: Attacker-Router)',
'Average Number of Packets Dropped per ms (Connection: Attacker-Router)',
'Packets Accepted (Connection: Router-Attacker)',
'Packets Dropped (Connection: Router-Attacker)',
'Packets Delivered (Connection: Router-Attacker)',
'Average Number of Packets Received per ms (Connection: Router-Attacker)',
'Average Number of Packets Dropped per ms (Connection: Router-Attacker)',
'Packets Accepted (Connection: NAT-Router)',
'Packets Dropped (Connection: NAT-Router)',
'Packets Delivered (Connection: NAT-Router)',
'Average Number of Packets Received per ms (Connection: NAT-Router)',
'Average Number of Packets Dropped per ms (Connection: NAT-Router)',
'Packets Accepted (Connection: Router-NAT)',
'Packets Dropped (Connection: Router-NAT)',
'Packets Delivered (Connection: Router-NAT)',
'Average Number of Packets Received per ms (Connection: Router-NAT)',
'Average Number of Packets Dropped per ms (Connection: Router-NAT)',
'Packets Sent (NAT)', 'Packets Received (NAT)','Packets Dropped (NAT)',
'Average Number of Packets Received per ms (NAT)','Average Number of Packets Dropped per ms (NAT)']: # [:37]
self.packetDictionary['S: ' + x] = []
def addToLog(self, packetID, status,
SYNNum, ACKNum, type, time): # adds entries to the log.
if (self.makeLog): # if we are making the log
if (packetID not in self.packetDictionary): # Check if the packet is in the packetDictionary, if not, prep the dictionary to accept it
self.packetDictionary[packetID] = [] # create the list
self.packetDictionary[packetID].append("(" + status + ", " + "Type: "
+ type + ", SYN:" + str(SYNNum)
+ ", ACK: " + str(ACKNum) + ", Time: "
+ str(time) + ")") # append the status
else:
self.packetDictionary[packetID].append("(" + status + ", " + "Type: "
+ type + ", SYN:" + str(SYNNum)
+ ", ACK: " + str(ACKNum) + ", Time: "
+ str(time) + ")") # append the status
if (len(self.packetDictionary[packetID]) > self.lengthLongestEntry): # set the new length of the longest entry if needed
self.lengthLongestEntry = len(self.packetDictionary[packetID])
def addSummaryDataToLog(self, client, attacker, MServer,
NServer, router, NAT,
connectionClientNat, connectionNatClient,
connectionRouterMServer, connectionMServerRouter,
connectionRouterNServer, connectionNServerRouter,
connectionRouterNat, connectionNatRouter,
connectionAttackerMServer,
connectionAttackerRouter, connectionRouterAttacker):
if(self.makeLog):
self.packetDictionary['S: ' + ' Step'].append(self.curTime)
# #self.packetDictionary['S: ' + 'Packets Generated (Attacker)'].append(attacker.packetsGenerated)
self.packetDictionary['S: ' + 'Packets Sent (Attacker)'].append(attacker.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (Attacker)'].append(attacker.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (Attacker)'].append(attacker.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Attacker)'].append(attacker.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Attacker)'].append(attacker.packetsDropped/self.curTime)
# #self.packetDictionary['S: ' + 'Packets Generated (Client)'].append(client.packetsGenerated)
self.packetDictionary['S: ' + 'Packets Sent (Client)'].append(client.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (Client)'].append(client.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (Client)'].append(client.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Client)'].append(client.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Client)'].append(client.packetsDropped/self.curTime)
self.packetDictionary['S: ' + 'Packets Sent (Router)'].append(router.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (Router)'].append(router.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (Router)'].append(router.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Router)'].append(router.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Router)'].append(router.packetsDropped/self.curTime)
#
# #self.packetDictionary['S: ' + 'Packets Generated (Reflection Server)'].append(MServer.packetsGenerated)
self.packetDictionary['S: ' + 'Packets Sent (Reflection Server)'].append(MServer.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (Reflection Server)'].append(MServer.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (Reflection Server)'].append(MServer.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Reflection Server)'].append(MServer.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Reflection Server)'].append(MServer.packetsDropped/self.curTime)
#
# #self.packetDictionary['S: ' + 'Packets Generated (Normal Server)'].append(NServer.packetsGenerated)
self.packetDictionary['S: ' + 'Packets Sent (Normal Server)'].append(NServer.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (Normal Server)'].append(NServer.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (Normal Server)'].append(NServer.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Normal Server)'].append(NServer.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Normal Server)'].append(NServer.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Sent (NAT)'].append(NAT.packetsSent)
self.packetDictionary['S: ' + 'Packets Received (NAT)'].append(NAT.packetsReceived)
self.packetDictionary['S: ' + 'Packets Dropped (NAT)'].append(NAT.packetsDropped)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (NAT)'].append(NAT.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (NAT)'].append(NAT.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Attacker-Reflection Server)'].append(connectionAttackerMServer.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Attacker-Reflection Server)'].append(connectionAttackerMServer.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Attacker-Reflection Server)'].append(connectionAttackerMServer.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Attacker-Reflection Server)'].append(connectionAttackerMServer.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Attacker-Reflection Server)'].append(connectionAttackerMServer.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Router-Reflection Server)'].append(connectionRouterMServer.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Router-Reflection Server)'].append(connectionRouterMServer.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Router-Reflection Server)'].append(connectionRouterMServer.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Router-Reflection Server)'].append(connectionRouterMServer.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Router-Reflection Server)'].append(connectionRouterMServer.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Reflection Server-Router)'].append(connectionMServerRouter.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Reflection Server-Router)'].append(connectionMServerRouter.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Reflection Server-Router)'].append(connectionMServerRouter.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Reflection Server-Router)'].append(connectionMServerRouter.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Reflection Server-Router)'].append(connectionMServerRouter.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Router-Normal Server)'].append(connectionRouterNServer.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Router-Normal Server)'].append(connectionRouterNServer.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Router-Normal Server)'].append(connectionRouterNServer.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Router-Normal Server)'].append(connectionRouterNServer.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Router-Normal Server)'].append(connectionRouterNServer.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Normal Server-Router)'].append(connectionNServerRouter.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Normal Server-Router)'].append(connectionNServerRouter.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Normal Server-Router)'].append(connectionNServerRouter.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Normal Server-Router)'].append(connectionNServerRouter.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Normal Server-Router)'].append(connectionNServerRouter.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Client-NAT)'].append(connectionClientNat.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Client-NAT)'].append(connectionClientNat.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Client-NAT)'].append(connectionClientNat.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Client-NAT)'].append(connectionClientNat.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Client-NAT)'].append(connectionClientNat.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: NAT-Client)'].append(connectionNatClient.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: NAT-Client)'].append(connectionNatClient.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: NAT-Client)'].append(connectionNatClient.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: NAT-Client)'].append(connectionNatClient.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: NAT-Client)'].append(connectionNatClient.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Attacker-Router)'].append(connectionAttackerRouter.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Attacker-Router)'].append(connectionAttackerRouter.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Attacker-Router)'].append(connectionAttackerRouter.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Attacker-Router)'].append(connectionAttackerRouter.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Attacker-Router)'].append(connectionAttackerRouter.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Router-Attacker)'].append(connectionRouterAttacker.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Router-Attacker)'].append(connectionRouterAttacker.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Router-Attacker)'].append(connectionRouterAttacker.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Router-Attacker)'].append(connectionRouterAttacker.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Router-Attacker)'].append(connectionRouterAttacker.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: NAT-Router)'].append(connectionNatRouter.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: NAT-Router)'].append(connectionNatRouter.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: NAT-Router)'].append(connectionNatRouter.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: NAT-Router)'].append(connectionNatRouter.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: NAT-Router)'].append(connectionNatRouter.packetsDropped/self.curTime)
#
self.packetDictionary['S: ' + 'Packets Accepted (Connection: Router-NAT)'].append(connectionRouterNat.packetsAccepted)
self.packetDictionary['S: ' + 'Packets Dropped (Connection: Router-NAT)'].append(connectionRouterNat.packetsDropped)
self.packetDictionary['S: ' + 'Packets Delivered (Connection: Router-NAT)'].append(connectionRouterNat.packetsDelivered)
self.packetDictionary['S: ' + 'Average Number of Packets Received per ms (Connection: Router-NAT)'].append(connectionRouterNat.packetsReceived/self.curTime)
self.packetDictionary['S: ' + 'Average Number of Packets Dropped per ms (Connection: Router-NAT)'].append(connectionRouterNat.packetsDropped/self.curTime)
#
if (len(self.packetDictionary['S: ' + ' Step']) > self.lengthLongestEntry):
self.lengthLongestEntry = len(self.packetDictionary["S: " + ' Step'])
def initializeSummary(self): # initializer for the summary file
self.summaryFile = open(self.summaryFileName, "w")
self.headerGen(self.summaryFile)
def initializeAnimationInstructions(self):
# self.currentAnimations = "" #used to hold the instructions for the current line of the animation instructions
self.prefix_map = {'C': 'client', 'A': 'attacker', 'R': 'router', 'M': 'mserver', 'N': 'nserver', 'T': 'nat'}
self.instructions = []
self.tempInstructions = []
def updateTime(self):
self.curTime += 1
if (self.makeAnimation):
# self.currentAnimations +="\n"
self.instructions.append(self.tempInstructions)
self.tempInstructions = []
def animateTransit(self, source, destination,
packet_type, sequence_number,
ack_number, dst_port_number,
duration):
if (self.makeAnimation):
# self.currentAnimations += "(" + source + "," + destination + "," + packet_type + "," + str(sequence_number) + "," + str(ack_number) + "," + str(dst_port_number) + ","+ str(duration) + ")"
instruction = ['transit', [self.prefix_map[source],
self.prefix_map[destination],
packet_type, sequence_number,
ack_number, dst_port_number, duration]]
self.tempInstructions.append(instruction)
def animateDrop(self, source, packet_type,
sequence_number, ack_number,
dst_port_number):
if (self.makeAnimation):
# self.currentAnimations += "[" + source + "," + packet_type + "," + str(sequence_number) + "," + str(ack_number) + "," + str(dst_port_number) + "]"
instruction = ['drop', [self.prefix_map[source], packet_type, sequence_number, ack_number, dst_port_number]]
self.tempInstructions.append(instruction)
def animateData(self, clientData, MServerData,
NServerData, routerData,
attackerData, natData): # function for generating data instructions.
if (self.makeAnimation):
for entity in [clientData, MServerData, NServerData, routerData, attackerData]:
instruction = ['data', entity]
self.tempInstructions.append(instruction)
def updateSummary(self, client, attacker, MServer,
NServer, router, NAT,
connectionClientNat, connectionNatClient,
connectionRouterMServer, connectionMServerRouter,
connectionRouterNServer, connectionNServerRouter,
connectionRouterNat, connectionNatRouter,
connectionAttackerMServer,
connectionAttackerRouter, connectionRouterAttacker):
flag = False
if(self.makeSummary and flag is False):
self.summaryFile.write(str(self.curTime) + ','
+ str(attacker.packetsSent) + ','
+ str(attacker.packetsReceived)
+ ',' + str(attacker.packetsDropped)
+ ',0,0,' + str(client.packetsSent)
+ ',' + str(client.packetsReceived)
+ ',' + str(client.packetsDropped)
+ ',' + str(client.packetsReceived/self.curTime)
+ ',' + str(client.packetsDropped/self.curTime)
+ ',' + str(router.packetsSent)
+ ',' + str(router.packetsReceived)
+ ',' + str(router.packetsDropped)
+ ',' + str(router.packetsReceived/self.curTime)
+ ',' + str(router.packetsDropped/self.curTime)
+ ',' + str(MServer.packetsSent)
+ ',' + str(MServer.packetsReceived)
+ ',' + str(MServer.packetsDropped)
+ ',' + str(MServer.packetsReceived/self.curTime)
+ ',' + str(MServer.packetsDropped/self.curTime)
+ ',' + str(NServer.packetsSent)
+ ',' + str(NServer.packetsReceived)
+ ',' + str(NServer.packetsDropped)
+ ',' + str(NServer.packetsReceived/self.curTime)
+ ',' + str(NServer.packetsDropped/self.curTime)
+ ',' + str(NAT.packetsSent)
+ ',' + str(NAT.packetsReceived)
+ ',' + str(NAT.packetsDropped)
+ ',' + str(NAT.packetsReceived/self.curTime)
+ ',' + str(NAT.packetsDropped/self.curTime)
+ ',' + str(connectionAttackerMServer.packetsAccepted)
+ ',' + str(connectionAttackerMServer.packetsDropped)
+ ',' + str(connectionAttackerMServer.packetsDelivered)
+ ',' + str(connectionAttackerMServer.packetsReceived/self.curTime)
+ ',' + str(connectionAttackerMServer.packetsDropped/self.curTime)
+ ',' + str(connectionRouterMServer.packetsAccepted)
+ ',' + str(connectionRouterMServer.packetsDropped)
+ ',' + str(connectionRouterMServer.packetsDelivered)
+ ',' + str(connectionRouterMServer.packetsReceived/self.curTime)
+ ',' + str(connectionRouterMServer.packetsDropped/self.curTime)
+ ',' + str(connectionMServerRouter.packetsAccepted)
+ ',' + str(connectionMServerRouter.packetsDropped)
+ ',' + str(connectionMServerRouter.packetsDelivered)
+ ',' + str(connectionMServerRouter.packetsReceived/self.curTime)
+ ',' + str(connectionMServerRouter.packetsDropped/self.curTime)
+ ',' + str(connectionRouterNServer.packetsAccepted)
+ ',' + str(connectionRouterNServer.packetsDropped)
+ ',' + str(connectionRouterNServer.packetsDelivered)
+ ',' + str(connectionRouterNServer.packetsReceived/self.curTime)
+ ',' + str(connectionRouterNServer.packetsDropped/self.curTime)
+ ',' + str(connectionNServerRouter.packetsAccepted)
+ ',' + str(connectionNServerRouter.packetsDropped)
+ ',' + str(connectionNServerRouter.packetsDelivered)
+ ',' + str(connectionNServerRouter.packetsReceived/self.curTime)
+ ',' + str(connectionNServerRouter.packetsDropped/self.curTime)
+ ',' + str(connectionClientNat.packetsAccepted)
+ ',' + str(connectionClientNat.packetsDropped)
+ ',' + str(connectionClientNat.packetsDelivered)
+ ',' + str(connectionClientNat.packetsReceived/self.curTime)
+ ',' + str(connectionClientNat.packetsDropped/self.curTime)
+ ',' + str(connectionNatClient.packetsAccepted)
+ ',' + str(connectionNatClient.packetsDropped)
+ ',' + str(connectionNatClient.packetsDelivered)
+ ',' + str(connectionNatClient.packetsReceived/self.curTime)
+ ',' + str(connectionNatClient.packetsDropped/self.curTime)
+ ',' + str(connectionAttackerRouter.packetsAccepted)
+ ',' + str(connectionAttackerRouter.packetsDropped)
+ ',' + str(connectionAttackerRouter.packetsDelivered)
+ ',' + str(connectionAttackerRouter.packetsReceived/self.curTime)
+ ',' + str(connectionAttackerRouter.packetsDropped/self.curTime)
+ ',' + str(connectionRouterAttacker.packetsAccepted)
+ ',' + str(connectionRouterAttacker.packetsDropped)
+ ',' + str(connectionRouterAttacker.packetsDelivered)
+ ',' + str(connectionRouterAttacker.packetsReceived/self.curTime)
+ ',' + str(connectionRouterAttacker.packetsDropped/self.curTime)
+ ',' + str(connectionNatRouter.packetsAccepted)
+ ',' + str(connectionNatRouter.packetsDropped)
+ ',' + str(connectionNatRouter.packetsDelivered)
+ ',' + str(connectionNatRouter.packetsReceived/self.curTime)
+ ',' + str(connectionNatRouter.packetsDropped/self.curTime)
+ ',' + str(connectionRouterNat.packetsAccepted)
+ ',' + str(connectionRouterNat.packetsDropped)
+ ',' + str(connectionRouterNat.packetsDelivered)
+ ',' + str(connectionRouterNat.packetsReceived/self.curTime)
+ ',' + str(connectionRouterNat.packetsDropped/self.curTime)
+ ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + '\n')
elif (self.makeSummary and flag is True):
print(".")
self.summaryFile.write(str(self.curTime) + ','
+ str('attacker.packetsSent')
+ ',' + str('attacker.packetsReceived')
+ ',' + str('attacker.packetsDropped')
+ ',0,0,' + str('client.packetsSent')
+ ',' + str('client.packetsReceived')
+ ',' + str('client.packetsDropped')
+ ',' + str('client.packetsReceived/self.curTime')
+ ',' + str('client.packetsDropped/self.curTime')
+ ',' + str('router.packetsSent')
+ ',' + str('router.packetsReceived')
+ ',' + str('router.packetsDropped')
+ ',' + str('router.packetsReceived/self.curTime')
+ ',' + str('router.packetsDropped/self.curTime')
+ ',' + str('MServer.packetsSent')
+ ',' + str('MServer.packetsReceived')
+ ',' + str('MServer.packetsDropped')
+ ',' + str('MServer.packetsReceived/self.curTime')
+ ',' + str('MServer.packetsDropped/self.curTime')
+ ',' + str('NServer.packetsSent')
+ ',' + str('NServer.packetsReceived')
+ ',' + str('NServer.packetsDropped')
+ ',' + str('NServer.packetsReceived/self.curTime')
+ ',' + str('NServer.packetsDropped/self.curTime')
+ ',' + str('connectionAttackerMServer.packetsAccepted')
+ ',' + str('connectionAttackerMServer.packetsDropped')
+ ',' + str('connectionAttackerMServer.packetsDelivered')
+ ',' + str('connectionAttackerMServer.packetsReceived/self.curTime')
+ ',' + str('connectionAttackerMServer.packetsDropped/self.curTime')
+ ',' + str('connectionRouterMServer.packetsAccepted')
+ ',' + str('connectionRouterMServer.packetsDropped')
+ ',' + str('connectionRouterMServer.packetsDelivered')
+ ',' + str('connectionRouterMServer.packetsReceived/self.curTime')
+ ',' + str('connectionRouterMServer.packetsDropped/self.curTime')
+ ',' + str('connectionRouterNServer.packetsAccepted')
+ ',' + str('connectionRouterNServer.packetsDropped')
+ ',' + str('connectionRouterNServer.packetsDelivered')
+ ',' + str('connectionRouterNServer.packetsReceived/self.curTime')
+ ',' + str('connectionRouterNServer.packetsDropped/self.curTime')
+ ',' + str('connectionClientRouter.packetsAccepted')
+ ',' + str('connectionClientRouter.packetsDropped')
+ ',' + str('connectionClientRouter.packetsDelivered')
+ ',' + str('connectionClientRouter.packetsReceived/self.curTime')
+ ',' + str('connectionClientRouter.packetsDropped/self.curTime')
+ ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + ' ' + ',' + '\n')
def outputFile(self):
# if(self.makeAnimation):
# #instructionFile = open("animationInstructions.txt", "w")
# #instructionFile.write(self.currentAnimations)
# #instructionFile.close()
#
# with open("animationInstructions2.json", 'w') as fp:
# json.dump(self.instructions, fp, indent=4)
if(self.makeSummary):
self.summaryFile.close()
self.initalizePlot()
self.genPlot("Sent", 1)
self.genPlot("Received", 2)
self.genPlot("Dropped", 3)
self.genPlot("Dropped on Average", 4)
self.genPlot("Received on Average", 5)
self.genPlotPage()
if (self.makeLog):
# self.packetDictionary["Inputs: "] = ["DDD State " + str(self.dddState), "Send Rate: " + str("self.sendRate") + " MB/s", "Packet Size: " + str(self.packetSize) + " MB", "Resend Time for SYN-ACKs: " + str(self.resendSynAckTime) + " ms", "Max Queue Size for half open connections: " + str(self.MaxQueueSize) + '" MB"', "DDD Mapping Delay" + str(self.dddMappingDelay) + " ms", "Propagation Delay: " + str(self.PropDelay) + " ms", "Number of DDD ports open: " + str(self.NumbDDDPortsOpen), "Bandwidth of connections: " + str("N/A") + " MB/s", "Time until next DDD port change: " + str(self.timeUntilNextDDDChange) + " ms", "Overlap time for old DDD Ports: " + str(self.overlapTime) + " ms", " ", "Program Version 2", "Date and time: " + str(getTime("%c"))]
# if (len(self.packetDictionary[ "Inputs: "]) > self.lengthLongestEntry):
# self.lengthLongestEntry = len(self.packetDictionary[" Inputs: "])
for key in self.packetDictionary: # All this does is make each dictionary entry have the same length
while (len(self.packetDictionary.get(key)) < self.lengthLongestEntry):
self.packetDictionary.get(key).append("")
sortedKeys = sorted(self.packetDictionary.keys(), key=self.sortHelper)
outputLogFile = open(self.logFileName, "w", newline='')
self.headerGen(outputLogFile, "%L")
generator = csv.writer(outputLogFile)
generator.writerow(sortedKeys)
generator.writerows(zip(*[self.packetDictionary[key] for key in sortedKeys]))
outputLogFile.close()
def genPlotPage(self):
fp = open(os.path.join("templates", "temp_graph.html"),"rt")
html_code = fp.read()
fp.close()
fp = open(os.path.join(self.storageFolder, "Graph.html"),"w")
code_part = html_code.split("<h2></h2>")
html_code = "{0}<h2>Session {1}</h2>{2}".format(code_part[0], str(self.sessionId), code_part[1])
fp.write(html_code)
fp.close()
def sortHelper(self, string):
if ("Input" in string) or ("Program" in string):
return ("A", -1)
elif ("Packets" in string) or ("Step" in string):
return ("Z", -1)
else:
return (string[0], int(string[2:]))
def headerGen(self, file, LogFlag=""):
# The purpose of this function is to create the header seen at the start of each output file.
# It takes a starting file containing markers (a '$' followed by some letters) and replaces each marker with the corresponding variable, and then writes the updated version to the appropriate file.
# If it is being attached to the log file, indicated by the LogFlag, then the summary section of the header is not included.
self.header = open("summaryHeader.txt", "r")
for line in self.header:
if (("DATA:" in line) and (LogFlag == "%L")):
file.write(line)
break
line = line.replace("$BWCR", str(self.clientToRouter)) # BWCR
line = line.replace("$BWRC", str(self.routerToClient)) # BWRC
line = line.replace("$BWRMS", str(self.routerToMServer)) # BWRMS
line = line.replace("$BWRNS", str(self.routerToNServer)) # BWRNS
line = line.replace("$BWNSR", str(self.NServerToRouter)) # BWNSR
line = line.replace("$BWMSR", str(self.MServerToRouter)) # BWMSR
line = line.replace("$BWAMS", str(self.attackerToReflector)) # BWAMS
line = line.replace("$PACS", str(self.packetSize)) # PACS
line = line.replace("$RSAI", str(self.resendSynAckTime)) # RSAI
line = line.replace("$NSAR", str(self.numbSynAckResends)) # NSAR
line = line.replace("$HOCMQ", str(self.MaxQueueSize)) # HOCMQ
line = line.replace("$DDDMD", str(self.dddMappingDelay)) # DDDMD
line = line.replace("$PROPD", str(self.PropDelay)) # PROPD
line = line.replace("$DDDS", str(self.dddState)) # DDDS
line = line.replace("$DDDPO", str(self.NumbDDDPortsOpen)) # DDDPO
line = line.replace("$DDDCI", str(self.timeUntilNextDDDChange)) # DDDCI
line = line.replace("$DDDOO", str(self.overlapTime)) # DDDOO
line = line.replace("$DATE", getTime("%c")) # DATE
line = line.replace("$AI", self.attackerType) # AI
line = line.replace("$APOFLD", self.isAmplification) # APOFLD
file.write(line)
self.header.close()
def initalizePlot(self):
summary = open(self.summaryFileName)
self.masterLst = list()
for line in summary:
self.masterLst.append(line.split(","))
summary.close()
def genPlot(self, name, start):
time = [float(self.masterLst[i][0]) for i in range(19, len(self.masterLst))]
aCol = [float(self.masterLst[i][start]) for i in range(19, len(self.masterLst))]
cCol = [float(self.masterLst[i][start+5]) for i in range(19, len(self.masterLst))]
rCol = [float(self.masterLst[i][start+10]) for i in range(19, len(self.masterLst))]
mCol = [float(self.masterLst[i][start+15]) for i in range(19, len(self.masterLst))]
nCol = [float(self.masterLst[i][start+20]) for i in range(19, len(self.masterLst))]
tCol = [float(self.masterLst[i][start+25]) for i in range(19, len(self.masterLst))]
print("T: ", time)
print("A: ", aCol)
print("C: ", cCol)
print("R: ", rCol)
print("M: ", mCol)
print("N: ", nCol)
print("T: ", tCol)
plt.plot(time, aCol, label="Attacker")
plt.plot(time, cCol, label="Client")
plt.plot(time, rCol, label="Router")
plt.plot(time, mCol, label="Amplifying Server")
plt.plot(time, nCol, label="Normal Server")
plt.plot(time, tCol, label="NAT")
plt.xlabel("Time (ms)")
plt.ylabel("Packets " + name)
plt.title("Packets " + name + " vs. Time")
plt.legend()
plt.savefig(os.path.join(self.storageFolder, name + ".svg"))
plt.close()