コード例 #1
0
    def applyCountermeasure( trace,  metadata ):
        [targetDistributionBi,
         targetDistributionUp,
         targetDistributionDown] = metadata

        newTrace = Trace(trace.getId())

        # primary sampling
        timeCursor = 0
        for packet in trace.getPackets():
            timeCursor = packet.getTime()
            targetDistribution = targetDistributionDown
            if packet.getDirection()==Packet.UP:
                targetDistribution = targetDistributionUp

            packets = DirectTargetSampling.morphPacket( packet, targetDistribution )
            for newPacket in packets:
                newTrace.addPacket( newPacket )

        # secondary sampling
        while True:
            l1Distance = newTrace.calcL1Distance( targetDistributionBi )
            if l1Distance <= DirectTargetSampling.L1_THRESHHOLD:
                break

            timeCursor += 10
            newDirection, newLen = newTrace.getMostSkewedDimension( targetDistributionBi )
            packet = Packet( newDirection, timeCursor, newLen )
            newTrace.addPacket( packet )

        return newTrace
コード例 #2
0
    def getTraceHerrmann(webpageId, traceIndex):
        if config.DATA_SOURCE == 1:
            datasourceId = 4
        elif config.DATA_SOURCE == 2:
            datasourceId = 5

        key = '.'.join([
            'Webpage', 'H',
            str(datasourceId),
            str(webpageId),
            str(traceIndex)
        ])

        trace = mc.get(key)
        if ENABLE_CACHE and trace:
            trace = cPickle.loads(trace)
        else:
            connection = MySQLdb.connect(host=config.MYSQL_HOST,
                                         user=config.MYSQL_USER,
                                         passwd=config.MYSQL_PASSWD,
                                         db=config.MYSQL_DB)

            cursor = connection.cursor()
            command = """SELECT packets.trace_id,
                                      packets.size,
                                      ROUND(packets.abstime*1000)
                                 FROM (SELECT id
                                         FROM traces
                                        WHERE site_id = (SELECT id
                                                           FROM sites
                                                          WHERE dataset_id = """ + str(
                datasourceId) + """
                                                          ORDER BY id
                                                          LIMIT """ + str(
                    webpageId) + """,1)
                                        ORDER BY id
                                        LIMIT """ + str(
                        traceIndex) + """,1) traces,
                                      packets
                                WHERE traces.id = packets.trace_id
                                ORDER BY packets.trace_id, packets.abstime"""
            cursor.execute(command)

            data = cursor.fetchall()
            trace = Trace(webpageId)
            for item in data:
                trace.setId(int(item[0]))
                direction = Packet.UP
                if int(item[1]) > 0:
                    direction = Packet.DOWN
                time = item[2]
                length = int(math.fabs(item[1]))

                trace.addPacket(Packet(direction, time, length))
            connection.close()

            mc.set(key, cPickle.dumps(trace,
                                      protocol=cPickle.HIGHEST_PROTOCOL))

        return trace
コード例 #3
0
 def applyCountermeasure(trace):
     bsize = random.choice(range(3, 4, 1))
     dsize = random.choice(range(3, 4, 1))
     newTrace = Trace(trace.getId())
     rand = random.choice(range(8,256,8))
     count = 0
     curDir = 0
     for packet in trace.getPackets():
          direction = packet.getDirection()
          length = packet.getLength()
          newlength =  min(length + rand, Packet.MTU)        
          time = packet.getTime()
          newPacket = Packet(direction,
                             time,
                             newlength )
         
          if ((direction == 1 and curDir == 1) and count < bsize):
              count +=1
              newTrace.addPacket(newPacket)
          elif ((direction == 1 and curDir == 1) and count == bsize):
              BurstClient2Server.makeDummy(newTrace, length, time, curDir, dsize)
              newTrace.addPacket(newPacket)
              count = 1
          elif ((direction == 1 and curDir == 0)):
              newTrace.addPacket(newPacket)
              curDir = 1
              count = 1
          elif ((direction == 0 and curDir == 1)):
              newTrace.addPacket(newPacket)
              curDir = 0
              count = 1
          elif (direction == 0 and curDir == 0):
              newTrace.addPacket(newPacket)
              count = 1
     return newTrace
コード例 #4
0
    def applyCountermeasure(trace):
#        bsize = random.choice(range(2, 10, 1))
        bsize = 6
        rand = 0
        newTrace = Trace(trace.getId())
#        rand = random.choice(range(8,256,8))
        count = 0
        curDir = 0
        for packet in trace.getPackets():
             direction = packet.getDirection()
             length = packet.getLength()
             newlength =  min(length + rand, Packet.MTU)        
             time = packet.getTime()
             newPacket = Packet(direction,
                                time,
                                newlength )
             newTrace.addPacket(newPacket)
            
             if (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count < bsize):
                 count +=1
                 
             elif (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count == bsize):
                 BurstSize6.makeDummy(newTrace, time)
                 count = 0
             else:
                 count = 1
                 if(curDir):
                     curDir = 0
                 else:
                     curDir = 1

        return newTrace
コード例 #5
0
ファイル: tamaraw.py プロジェクト: shibz-islam/BiMorphing
    def applyCountermeasure(trace):
        packets = []
        for packet in trace.getPackets():
            if packet.getDirection() == Packet.UP:
                x = 1 # outgoing
            else:
                x = -1 # incoming
            packets.append([packet.getTime(), x])

        list2 = []
        parameters = [""]

        Tamaraw.Anoa(packets, list2, parameters)
        list2 = sorted(list2, key=lambda list2: list2[0])

        list3 = []

        Tamaraw.AnoaPad(list2, list3, 100, 0)

        newTrace = Trace(trace.getId())
        for item in list3:
            pDirection = Packet.UP
            if (item[1] < 0):
                pDirection = Packet.DOWN
            newTrace.addPacket(Packet(direction=pDirection, time=item[0], length=abs(item[1])))

        return newTrace
コード例 #6
0
ファイル: Folklore.py プロジェクト: ruur/deepdig
    def doCountermeasure(trace):
        # Median trace length in the herrmann dataset is 3500ms
        # Median throughput is 62000 bytes/second
        # 40*1500 = 60000 bytes/second

        newTrace = Trace(trace.getId())

        latency = []
        timer = 0
        bufferUP = Folklore.Buffer()
        bufferDOWN = Folklore.Buffer()
        packetCursor = 0

        # Terminate only if (1) our clock is up, (2) we have no more packets from the source
        # and (3) our buffers are empty
        while timer <= Folklore.MILLISECONDS_TO_RUN \
           or packetCursor < trace.getPacketCount() \
           or bufferUP.hasPackets() \
           or bufferDOWN.hasPackets():

            # calculate max latency
            if bufferUP.hasPackets():
                earliestPacket = bufferUP.queue()[0]
                latency.append(timer - earliestPacket.getTime())
            if bufferDOWN.hasPackets():
                earliestPacket = bufferDOWN.queue()[0]
                latency.append(timer - earliestPacket.getTime())

            # add to buffer: all packets that appeared since last clock
            while packetCursor < trace.getPacketCount()\
              and trace.getPackets()[packetCursor].getTime()<=timer:
                packet = trace.getPackets()[packetCursor]

                if packet.getDirection() == Packet.UP:
                    bufferUP.add(packet)
                elif packet.getDirection() == Packet.DOWN:
                    bufferDOWN.add(packet)

                # increment position in source buffer
                packetCursor += 1

            # check buffer UP: purge at most Packet.MTU bytes
            Folklore.packFromBuffer(
                Folklore.FIXED_PACKET_LEN - Packet.HEADER_LENGTH, bufferUP)

            # check buffer DOWN: purge at most Packet.MTU bytes
            Folklore.packFromBuffer(
                Folklore.FIXED_PACKET_LEN - Packet.HEADER_LENGTH, bufferDOWN)

            # send a byte in both directions
            newTrace.addPacket(
                Packet(Packet.DOWN, timer, Folklore.FIXED_PACKET_LEN))
            newTrace.addPacket(
                Packet(Packet.UP, timer, Folklore.FIXED_PACKET_LEN))

            # go to the next clock cycle
            timer += Folklore.TIMER_CLOCK_SPEED

        return [newTrace, latency]
コード例 #7
0
ファイル: PadRoundLinear.py プロジェクト: ruur/deepdig
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            newPacket = Packet(packet.getDirection(), packet.getTime(),
                               PadRoundLinear.calcLength(packet.getLength()))
            newTrace.addPacket(newPacket)

        return newTrace
コード例 #8
0
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            newPacket = Packet(
                packet.getDirection(), packet.getTime(), PadRoundExponential.calcLength(packet.getLength())
            )
            newTrace.addPacket(newPacket)

        return newTrace
コード例 #9
0
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            newPacket = Packet( packet.getDirection(),
                                packet.getTime(),
                                MiceElephants.calcLength(packet.getLength()) )
            newTrace.addPacket( newPacket )

        return newTrace
コード例 #10
0
ファイル: PadRFCRand.py プロジェクト: ruur/deepdig
    def applyCountermeasure(trace):

        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            rand = random.choice(range(8, 256, 8))
            length = min(packet.getLength() + rand, Packet.MTU)
            newPacket = Packet(packet.getDirection(), packet.getTime(), length)
            newTrace.addPacket(newPacket)

        return newTrace
コード例 #11
0
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            length = Packet.MTU
            if Packet.MTU - packet.getLength() > 0:
                length = packet.getLength() + random.choice(range(0, Packet.MTU - packet.getLength(), 8))
            newPacket = Packet(packet.getDirection(), packet.getTime(), length)
            newTrace.addPacket(newPacket)

        return newTrace
コード例 #12
0
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        # pad all packets to the MTU
        for packet in trace.getPackets():
            newPacket = Packet( packet.getDirection(),
                                packet.getTime(),
                                Packet.MTU )
            newTrace.addPacket( newPacket )

        return newTrace
コード例 #13
0
ファイル: Datastore.py プロジェクト: shibz-islam/BiMorphing
    def readEsorics16TorFile( webpageId, traceIndex ):

        if webpageId < 100: # 100 and more is nonMon
            file = os.path.join(config.PCAP_ROOT, str(webpageId)+"-"+str(traceIndex))

        else:
            file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ...

        fileList = Utils.readFile(file)

        trace = Trace(webpageId)

        '''
        <time-stamp>\t<directed-packet-length>
        1392354075.204044	-565
        1392354075.20464	565
        1392354075.709575	-565
        1392354075.956634	-565
        1392354075.981538	565
        1392354076.192185	565
        1392354076.36483	-565
        1392354076.647188	-565
        1392354076.685665	-1448
        1392354076.685685	-1448
        ...
        '''
        startTime = 0
        for i in range(0,len(fileList)):
            pArray = fileList[i].split("\t")
            cTime = pArray[0]

            if startTime == 0:
                startTime = float(cTime) # first packet's time as a reference

            cDirection = int(pArray[1])

            pDirection = Packet.UP
            if (cDirection < 0):
                pDirection = Packet.DOWN

            # as in the pcapparser.py
            # delta     = int(round(((ts - start) * 1000),0))

            #pTime = int(round(((float(cTime) - startTime) * 1000),0))
            pTime = int(round(((float(cTime) - startTime) ), 0))

            pLength = abs(int(pArray[1]))

            pkt = Packet(pDirection, pTime, pLength)
            pkt.timeStr = cTime

            trace.addPacket(pkt)


        return trace
コード例 #14
0
    def applyCountermeasure(trace, metadata):
        [
            targetDistributionBi, targetDistributionUp, targetDistributionDown,
            srcDistributionUp, srcDistributionDown, morphingMatrixUp,
            morphingMatrixDown
        ] = metadata

        newTrace = Trace(trace.getId())

        # primary sampling
        timeCursor = 0
        for packet in trace.getPackets():
            timeCursor = packet.getLength()
            index = (packet.getLength() - Packet.HEADER_LENGTH) / 8

            targetDistribution = None
            morphingColumn = None
            if packet.getDirection() == Packet.UP:
                if morphingMatrixUp:
                    morphingColumn = morphingMatrixUp[:, index]
                else:
                    targetDistribution = targetDistributionUp
                targetDistributionSecondary = targetDistributionUp
            else:
                if morphingMatrixDown:
                    morphingColumn = morphingMatrixDown[:, index]
                else:
                    targetDistribution = targetDistributionDown
                targetDistributionSecondary = targetDistributionDown

            if morphingColumn:
                targetDistribution = {}
                for i in range(len(morphingColumn)):
                    key = str(packet.getDirection()) + '-' + str(
                        i * 8 + Packet.HEADER_LENGTH)
                    targetDistribution[key] = morphingColumn[i]

            packets = WrightStyleMorphing.morphPacket(
                packet, targetDistribution, targetDistributionSecondary)
            for newPacket in packets:
                newTrace.addPacket(newPacket)

        # secondary sampling
        while True:
            l1Distance = newTrace.calcL1Distance(targetDistributionBi)
            if l1Distance <= WrightStyleMorphing.L1_THRESHHOLD:
                break

            timeCursor += 10
            newDirection, newLen = newTrace.getMostSkewedDimension(
                targetDistributionBi)
            packet = Packet(newDirection, timeCursor, newLen)
            newTrace.addPacket(packet)

        return newTrace
コード例 #15
0
ファイル: PadRand.py プロジェクト: ruur/deepdig
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            length = Packet.MTU
            if Packet.MTU - packet.getLength() > 0:
                length = packet.getLength() + random.choice(
                    range(0, Packet.MTU - packet.getLength(), 8))
            newPacket = Packet(packet.getDirection(), packet.getTime(), length)
            newTrace.addPacket(newPacket)

        return newTrace
コード例 #16
0
    def applyCountermeasure( trace,  metadata ):
        [targetDistributionBi,
         targetDistributionUp,
         targetDistributionDown,
         srcDistributionUp,
         srcDistributionDown,
         morphingMatrixUp,
         morphingMatrixDown] = metadata
         
        newTrace = Trace(trace.getId())

        # primary sampling
        timeCursor = 0
        for packet in trace.getPackets():
            timeCursor = packet.getLength()
            index = (packet.getLength()-Packet.HEADER_LENGTH)/8

            targetDistribution = None
            morphingColumn     = None
            if packet.getDirection()==Packet.UP:
                if morphingMatrixUp:
                    morphingColumn = morphingMatrixUp[:,index]
                else:
                    targetDistribution = targetDistributionUp
                targetDistributionSecondary = targetDistributionUp
            else:
                if morphingMatrixDown:
                    morphingColumn = morphingMatrixDown[:,index]
                else:
                    targetDistribution = targetDistributionDown
                targetDistributionSecondary = targetDistributionDown

            if morphingColumn:
                targetDistribution = {}
                for i in range(len(morphingColumn)):
                    key = str(packet.getDirection())+'-'+str( i*8 + Packet.HEADER_LENGTH )
                    targetDistribution[key] = morphingColumn[i]

            packets = WrightStyleMorphing.morphPacket( packet, targetDistribution, targetDistributionSecondary )
            for newPacket in packets:
                newTrace.addPacket( newPacket )

        # secondary sampling
        while True:
            l1Distance = newTrace.calcL1Distance( targetDistributionBi )
            if l1Distance <= WrightStyleMorphing.L1_THRESHHOLD:
                break

            timeCursor += 10
            newDirection, newLen = newTrace.getMostSkewedDimension( targetDistributionBi )
            packet = Packet( newDirection, timeCursor, newLen )
            newTrace.addPacket( packet )

        return newTrace
コード例 #17
0
ファイル: Datastore.py プロジェクト: jasonbarnes/SCA
    def getTraceHerrmann( webpageId, traceIndex ):
        if config.DATA_SOURCE == 1:
            datasourceId = 4
        elif config.DATA_SOURCE == 2:
            datasourceId = 5

        key = '.'.join(['Webpage',
                        'H',
                        str(datasourceId),
                        str(webpageId),
                        str(traceIndex)])

        trace = mc.get(key)
        if ENABLE_CACHE and trace:
            trace = cPickle.loads(trace)
        else:
            connection = MySQLdb.connect(host=config.MYSQL_HOST,
                                         user=config.MYSQL_USER,
                                         passwd=config.MYSQL_PASSWD,
                                         db=config.MYSQL_DB )

            cursor = connection.cursor()
            command = """SELECT packets.trace_id,
                                      packets.size,
                                      ROUND(packets.abstime*1000)
                                 FROM (SELECT id
                                         FROM traces
                                        WHERE site_id = (SELECT id
                                                           FROM sites
                                                          WHERE dataset_id = """+str(datasourceId)+"""
                                                          ORDER BY id
                                                          LIMIT """+str(webpageId)+""",1)
                                        ORDER BY id
                                        LIMIT """+str(traceIndex)+""",1) traces,
                                      packets
                                WHERE traces.id = packets.trace_id
                                ORDER BY packets.trace_id, packets.abstime"""
            cursor.execute( command )

            data = cursor.fetchall()
            trace = Trace(webpageId)
            for item in data:
                direction = Packet.UP
                if int(item[1])>0:
                    direction = Packet.DOWN
                time   = item[2]
                length = int(math.fabs(item[1]))

                trace.addPacket( Packet( direction, time, length ) )
            connection.close()

            mc.set(key,cPickle.dumps(trace,protocol=cPickle.HIGHEST_PROTOCOL))

        return trace
コード例 #18
0
    def applyCountermeasure(trace):
        rand = random.choice(range(8,512,8))

        newTrace = Trace(trace.getId())
        for packet in trace.getPackets():
            length = min( packet.getLength()+rand, Packet.MTU )
            newPacket = Packet( packet.getDirection(),
                                packet.getTime(),
                                length )
            newTrace.addPacket( newPacket )

        return newTrace
コード例 #19
0
    def test_readfile(self):
        actualTrace = pcapparser.readfile( month=3, day=14, hour=22, webpageId=8 )

        expectedTrace = Trace(8)
        expectedTrace.addPacket( Packet( Packet.UP  , 0  , 148 ) )
        expectedTrace.addPacket( Packet( Packet.DOWN, 0  , 100 ) )
        expectedTrace.addPacket( Packet( Packet.UP  , 0  , 52  ) )
        expectedTrace.addPacket( Packet( Packet.UP  , 3  , 500 ) )
        expectedTrace.addPacket( Packet( Packet.DOWN, 18 , 244 ) )
        expectedTrace.addPacket( Packet( Packet.UP  , 35 , 436 ) )
        expectedTrace.addPacket( Packet( Packet.DOWN, 75 , 52  ) )
        expectedTrace.addPacket( Packet( Packet.DOWN, 118, 292 ) )
        expectedTrace.addPacket( Packet( Packet.UP  , 158, 52  ) )
コード例 #20
0
    def applyCountermeasure(trace):
        newTrace = Trace(trace.getId())
        count = 0
        curDir = 0
        rand = random.choice(range(8,256,8))
        count = 0
        for packet in trace.getPackets():
             direction = packet.getDirection()
             length = packet.getLength()
             newlength =  min(length + rand, Packet.MTU) 
             time = packet.getTime()
             newPacket = Packet(direction,
                                time,
                                newlength )
            
            
             if  ((direction == 1 and curDir == 1)):
                 count +=1
                 newTrace.addPacket(newPacket)
             elif (direction == 0 and curDir == 0):
                 count = 0
                 newTrace.addPacket(newPacket)
             elif (direction == 1 and curDir == 0):
                 curDir = 1
                 count = 1
                 newTrace.addPacket(newPacket)
             elif (direction == 0 and curDir == 1):
                 BurstExpon.makeDummy(newTrace, length, time, curDir, count, rand)
                 newTrace.addPacket(newPacket)
                 curDir = 0
                 count = 0

        return newTrace
コード例 #21
0
ファイル: Datastore.py プロジェクト: shibz-islam/BiMorphing
    def readWangTorFile( webpageId, traceIndex ):

        if webpageId < 100: # 100 and more is nonMon
            if config.DATA_SOURCE == 5:
                file = os.path.join(config.PCAP_ROOT, str(webpageId)+"-"+str(traceIndex))
            elif config.DATA_SOURCE == 9:
                file = os.path.join(config.PCAP_ROOT, str(webpageId) + "-" + str(traceIndex)) + ".cell"

        else:
            if config.DATA_SOURCE == 5:
                file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ...
            elif config.DATA_SOURCE == 9:
                file = os.path.join(config.PCAP_ROOT, str(webpageId-100)) + ".cell"  # as the nonMon id starts from 100 and the file names are 0, 1, 2, 3, ...
        fileList = Utils.readFile(file)

        trace = Trace(webpageId)

        '''
        0.0	1 cell
        0.0	1
        0.116133928299	1
        0.499715805054	-1
        0.499715805054	-1
        ...
        '''

        for i in range(1,len(fileList)):
            cellArray = fileList[i].split("\t")
            cTime = cellArray[0]
            cDirection = int(cellArray[1])

            pDirection = Packet.UP
            if (cDirection==-1):
                pDirection = Packet.DOWN

            # as in the pcapparser.py
            # delta     = int(round(((ts - start) * 1000),0))
            pTime = int(round((float(cTime) * 1000),0))
            #pTime = int(round((float(cTime) * 10000), 0))
            #pTime = int(round((float(cTime) * 1000000), 0))

            pLength = abs(int(cellArray[1])) # sizes are only 1 and -1

            trace.addPacket(Packet(pDirection, pTime, pLength))


        return trace
コード例 #22
0
    def get_trace(cls,
                  trace_id=None,
                  site_id=None,
                  dataset=2,
                  limit=1,
                  multi=False):
        if cls.conn is None:
            cls.conn = MySQLdb.connect(host=config.MYSQL_HOST,
                                       user=config.MYSQL_USER,
                                       passwd=config.MYSQL_PASSWD,
                                       db=config.MYSQL_DB)
        cur = cls.conn.cursor()
        if trace_id is None:
            cur.execute(
                'SELECT id FROM traces where site_id=%s ORDER BY RAND() LIMIT {}'
                .format(limit), [site_id])
            if limit == 1:
                trace_ids = [cur.fetchone()[0]]
            else:
                trace_ids = [r[0] for r in cur.fetchall()]
        else:
            trace_ids = [trace_id]
        # print('SEL-TRACE', trace_ids)

        traces = []
        for trace_id in trace_ids:
            cur.execute(
                'SELECT size, ROUND(abstime*1000) FROM packets WHERE trace_id=%s ORDER BY abstime',
                [trace_id])
            data = cur.fetchall()
            trace = Trace(trace_id, webpage=site_id)
            for item in data:
                direction = Packet.UP
                if int(item[0]) > 0:
                    direction = Packet.DOWN
                time = item[1]
                length = int(math.fabs(item[0]))
                trace.addPacket(Packet(direction, time, length))
            traces.append(trace)

        if limit == 1 and not multi:
            return traces[0] if traces else None
        return traces
コード例 #23
0
    def applyCountermeasure(trace):
        bsize = random.choice(range(2,10,1))
        newTrace = Trace(trace.getId())
        count = 0
        curDir = 0
        rand = random.choice(range(8,256,8))
        for packet in trace.getPackets():
             direction = packet.getDirection()
             length = packet.getLength()
             newlength = min( packet.getLength()+rand, Packet.MTU )
             time = packet.getTime()
             newPacket = Packet(direction,
                                time,
                                newlength )
            
            
             if  (direction == 1 and curDir == 1 and (count < bsize)):
                 count +=1
                 newTrace.addPacket(newPacket)
             elif (direction == 1 and curDir == 1 and (count ==  bsize)):
                 BurstPadAllRand.sendDummyAck(newTrace, time)
                 newTrace.addPacket(newPacket)
                 bsize = random.choice(range(2,10,1))
                 count = 1
             elif (direction == 0 and curDir == 0):
                 count = 0
                 newTrace.addPacket(newPacket)
             elif (direction == 1 and curDir == 0):
                 curDir = 1
                 count = 1
                 newTrace.addPacket(newPacket)
             elif (direction == 0 and curDir == 1):
                 BurstPadAllRand.makeDummy(newTrace, length, time, bsize, count, rand)
                 newTrace.addPacket(newPacket)
                 curDir = 0
                 count = 0
                 bsize = random.choice(range(2,10,1))

        return newTrace
コード例 #24
0
    def applyCountermeasure(trace):
#        print "dir\tlength\ttime"
        bsize = random.choice(range(2, 10, 1))
        newTrace = Trace(trace.getId())
        count = 0
        curDir = 0
        count = 0
        for packet in trace.getPackets():
             direction = packet.getDirection()
             length = packet.getLength()
             newlength = BurstFixedRand.calcLength(length)
             time = packet.getTime()
             # print direction, "\t", length, "\t", time
             newPacket = Packet(direction,
                                time,
                                newlength )
             newTrace.addPacket(newPacket)
            
             if (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count < bsize):
                 count +=1
                 
             elif (((direction == 0 and curDir == 0) | (direction == 1 and curDir == 1)) and count == bsize):
                 BurstFixedRand.makeDummy(newTrace, length, time, curDir)
                 count = 0
             else:
                 count = 1
                 if(curDir):
                     curDir = 0
                 else:
                     curDir = 1
                #             for i in range(count, 3):
    #                Burst.makeDummy(newTrace, length, time, curDir)
    #             count = 1
    #         elif (count < 7):
    #             if(curDir):
    #                 curDir = 0
    #             else:
    #                 curDir = 1
    #             for i in range(count, 7):
    #                 Burst.makeDummy(newTrace, length, time, curDir)
    #             count = 1
       #      elif (count < ):
    #             if(curDir):
    #                 curDir = 0
    #             else:
    #                 curDir = 1
    #             for i in range(count, 12):
    #                 Burst.makeDummy(newTrace, length, time, curDir)
    #             count = 1
    #         else:
    #             if(curDir):
    #                 curDir = 0
    #             else:
    #                 curDir = 1
    #             for i in range(count, 25):
    #                 Burst.makeDummy(newTrace, length, time, curDir)
    #             count = 1
                                         

    #         newTrace.addPacket(newPacket)

        return newTrace
コード例 #25
0
 def applyCountermeasure(trace):
     bsize = random.choice(range(3000, 15000, 8))
     rand = random.choice(range(8,256,8))
     newTrace = Trace(trace.getId())
     count = 0
     curDir = 0
     for packet in trace.getPackets():
          direction = packet.getDirection()
          length = packet.getLength()
          newlength =  min(length + rand, Packet.MTU)        
          time = packet.getTime()
          newPacket = Packet(direction,
                             time,
                             newlength )
         
         
          if  (direction == 1 and curDir == 1 and (count+newlength < bsize)):
              count +=newlength
              newTrace.addPacket(newPacket)
          elif (direction == 1 and curDir == 1 and (count+newlength >= bsize)):
              pad = bsize - count
              packetFirstHalf = Packet(1, time, pad)
              newTrace.addPacket(packetFirstHalf)
              BurstByteLevelRand.sendDummyAck(newTrace, time)
              count = newlength-pad
              finishPacket = Packet(1, time, count)
              newTrace.addPacket(finishPacket)
              bsize = random.choice(range(3000, 15000, 8))
          elif (direction == 0 and curDir == 0):
              count = 0
              newTrace.addPacket(newPacket)
          elif (direction == 1 and curDir == 0):
              curDir = 1
              count = newlength
              newTrace.addPacket(newPacket)
          elif (direction == 0 and curDir == 1):
              BurstByteLevelRand.makeDummy(newTrace, length, time, bsize, count, rand)
              newTrace.addPacket(newPacket)
              curDir = 0
              count = 0
              bsize = random.choice(range(3000, 15000, 8))
                      
     return newTrace
コード例 #26
0
    def applyCountermeasure(trace, metadata):
        [targetBursts] = metadata

        rndmIndx = random.randint(0,
                                  len(targetBursts) -
                                  1)  # pick a trace from target at random

        # burst tuple = (direction, size, number, timeDiff, burstPackets)
        # pick one trace randomly [(tuple), (tuple), ...]
        targetBurstsList = targetBursts[rndmIndx]

        sourceBurstsList = trace.getBurstsListWithPackets()

        newTrace = Trace(trace.getId())

        pointer = 0  # to loop over burst tuples in src and trgt in order until one is exhausted

        # first packet time
        newPktTime = sourceBurstsList[pointer][4][0].getTime()
        lastSrcPktTime = 0

        while True:
            if pointer >= len(sourceBurstsList) or pointer >= len(
                    targetBurstsList):
                break

            sourceBurstPackets = sourceBurstsList[pointer][
                4]  # list of packets for that burst
            targetBurstPackets = targetBurstsList[pointer][4]

            srcPktTimes = []
            for packet in sourceBurstPackets:
                srcPktTimes.append(packet.getTime())

            lastSrcPktTime = srcPktTimes[
                -1]  # for extra burst padding down below, before pop

            if len(sourceBurstPackets) < len(targetBurstPackets):
                for packet in targetBurstPackets:
                    #-#if len(srcPktTimes) != 0:
                    #-#newPktTime = srcPktTimes.pop(0)  # remove first from the queue
                    # eventually last src packet time is repeated
                    # to make sure we don't exceed original burst transimission time

                    newPktTime += 1
                    newPkt = Packet(packet.getDirection(), newPktTime,
                                    packet.getLength())
                    newTrace.addPacket(newPkt)
            else:
                for packet in sourceBurstPackets:
                    newPktTime += 1
                    newPkt = Packet(packet.getDirection(), newPktTime,
                                    packet.getLength())
                    newTrace.addPacket(newPkt)

            pointer += 1

        # for calculating time overhead
        config.TIME_ORIGINAL += lastSrcPktTime  # last
        config.TIME_EXTRA += newPktTime

        #print 'source id:' + str(trace.getId())
        #print 'orig. end time:' + str(config.TIME_ORIGINAL)
        #print 'extra end time:' + str(config.TIME_EXTRA)
        #print "---------"
        # end: for calculating time overhead

        while pointer < len(sourceBurstsList):
            sourceBurstPackets = sourceBurstsList[pointer][4]
            for packet in sourceBurstPackets:
                newPktTime += 1
                newPkt = Packet(packet.getDirection(), newPktTime,
                                packet.getLength())
                newTrace.addPacket(newPkt)
            pointer += 1

        # extra bursts tail
        # '''
        while pointer < len(targetBurstsList):
            targetBurstPackets = targetBurstsList[pointer][4]
            for packet in targetBurstPackets:
                lastSrcPktTime += 1
                newPkt = Packet(packet.getDirection(), lastSrcPktTime,
                                packet.getLength())
                newTrace.addPacket(newPkt)
            pointer += 1
        # '''

        #print str(trace.getId())
        #print str(trace.getPacketCount())
        #print str(newTrace.getPacketCount())
        #print "--------------"
        return newTrace