Exemplo n.º 1
0
def getTrace(visit_file, direction=None):
    with open(visit_file, 'r') as f:
        sample = json.load(f)

    Config.hostname.update(sample[u'ip_to_name'])
    webId, traceId = sample['visit_log'][u'current_url'], sample['visit_log']['visit_id']
    
    trace = Trace(traceId, webId)
    for tcp_conn in sample['tcp_connections']:
        
        connection_id = tcp_conn['connection_id']
        
        TCP = TCPConnection(connection_id, webId, hostip=sample['visit_log'][u'host_ip'])

        for pkt in tcp_conn['packets']:
            pkt_time, pkt_size = pkt[0], abs(pkt[1])
            
            if pkt_size == 0:
                continue

            pkt_dir = Packet.Outgoing if pkt[1] < 0 else Packet.Incoming

            if direction is None or direction == pkt_dir:
                TCP.addPacket(Packet(pkt_time, pkt_size, pkt_dir))
        TCP._packets.sort(key=lambda x: x.getTime())
        trace.addTcpCon(TCP)
    
    return trace
Exemplo n.º 2
0
 def loadTraces(self) :
     tracesPaths=os.listdir(self.directoryPath)
     for tracePath in tracesPaths :
         path=os.path.join(self.directoryPath,tracePath)
         t=Trace(path)
         t.loadTrace()
         self.traces.append(t)
Exemplo n.º 3
0
 def WriteClasses():
     for c in CharClass.classes:
         Trace.Write(str(c.name), -10)
         Trace.Write(': ')
         c.WriteSet()
         Trace.WriteLine()
     Trace.WriteLine()
    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
Exemplo n.º 5
0
 def Trace(self):
     self.tracepop = Trace(df=self.model._df)
     try:
         self.tracepop.Trace()
         self.tracepop.show()
     except (KeyError):
         self.ErrorEvent()
Exemplo n.º 6
0
 def loadTraces(self):
     tracesPaths = os.listdir(self.directoryPath)
     for tracePath in tracesPaths:
         path = os.path.join(self.directoryPath, tracePath)
         t = Trace(path)
         t.loadTrace()
         self.traces.append(t)
Exemplo n.º 7
0
    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
Exemplo n.º 8
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:
                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
Exemplo n.º 9
0
    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
 def run_trace_morph_test(self, src, dst, exp, **kwargs):
     t1_src = src if isinstance(src, Trace) else Trace.create_from_array(1, src)
     t1_dst = dst if isinstance(dst, Trace) else Trace.create_from_array(1, dst)
     cm = SmartMorphing()
     for k, v in kwargs.items():
         cm.set_param(k, v)
     cm.dst_trace = t1_dst
     t2 = cm.apply_to_trace(t1_src)
     self.assertTraceEqual(t2, exp)
    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
    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
Exemplo n.º 13
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
Exemplo n.º 14
0
    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
Exemplo n.º 15
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
Exemplo n.º 16
0
    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
Exemplo n.º 17
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
 def run_trace_morph_test(self, src, dst, exp, **kwargs):
     t1_src = src if isinstance(src, Trace) else Trace.create_from_array(
         1, src)
     t1_dst = dst if isinstance(dst, Trace) else Trace.create_from_array(
         1, dst)
     cm = SmartMorphing()
     for k, v in kwargs.items():
         cm.set_param(k, v)
     cm.dst_trace = t1_dst
     t2 = cm.apply_to_trace(t1_src)
     self.assertTraceEqual(t2, exp)
Exemplo n.º 19
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
Exemplo n.º 20
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:
                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
Exemplo n.º 21
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
Exemplo n.º 22
0
    def is_good(self, filename):
        t = Trace(self.raw_path, filename)

        if t.white_perc > self.white_perc_thr:
            print('too crowded: ', t.white_perc)
            return False
        t.compute_inertia()
        if t.eccentricity_from_inertia < self.eccentricity_thr:
            print('too spherical ', t.eccentricity_from_inertia)
            return False

        self.interesting_count += 1
        return True
Exemplo n.º 23
0
    def createTrace(self):
        '''Fit for the position and width of the trace.'''

        self.speak("populating the trace parameters")
        tracefilename = self.directory + 'trace_{0}.npy'.format(self.name)
        skyfilename = self.directory + 'skyMask_{0}.npy'.format(self.name)

        # define the trace object (will either load saved, or remake)
        self.trace = Trace(self)

        self.images['RoughLSF'] = np.exp(
            -0.5 * ((self.s - self.trace.traceCenter(self.w)) /
                    self.trace.tracefitwidth)**2)
Exemplo n.º 24
0
def get_records():
    trace = request.args.get('trace') == "true"

    domain = request.args.get('domain')
    if domain is None:
        return 'Domain is missing', 400

    domain = domain.split("/")[0]

    try:
        get_cache()

        response: tp.Optional[IpRecord] = None
        if not trace:
            response = domain_cache[domain]
            if response is not None and response.expires_at < time.time():
                response = None

        if response is not None:
            print(f"Using cache for {domain}")
            return jsonify(
                domain=domain,
                ips=response.ips,
                ttl=max(response.expires_at - time.time(), 0),
            )

        data_trace = Trace()
        response = Dns.find_recursive(domain, Dns.ROOT_SERVERS_DNS, data_trace)
    except Exception as e:
        print(e)
        response = None

    if response is None:
        return jsonify(error='Domain is not resolved',
                       trace=data_trace.compose()), 404

    domain_cache[domain] = response

    if trace:
        return jsonify(domain=domain,
                       ips=response.ips,
                       ttl=max(response.expires_at - time.time(), 0),
                       trace=data_trace.compose(),
                       exact_match=any(
                           [d.startswith(domain) for d, _ in response.ips]))
    else:
        return jsonify(domain=domain,
                       ips=response.ips,
                       ttl=max(response.expires_at - time.time(), 0),
                       exact_match=any(
                           [d.startswith(domain) for d, _ in response.ips]))
Exemplo n.º 25
0
 def WriteStatistics( ):
    Trace.WriteLine( )
    Trace.WriteLine( 'Statistics:' )
    Trace.WriteLine( '-----------' )
    Trace.WriteLine( )
    Trace.WriteLine( str(len( Symbol.terminals )) + ' terminals' )
    Trace.WriteLine( str(len( Symbol.terminals ) + len( Symbol.pragmas ) + len( Symbol.nonterminals )) + ' symbols' )
    Trace.WriteLine( str(len(Node.nodes)) + ' nodes' )
    Trace.WriteLine( str(len(ParserGen.symSet)) + ' sets' )
    Trace.WriteLine( )
Exemplo n.º 26
0
    def encrypt(self, plaintext):
        # input plaintext -> np.array
        self.trace = Trace(self.b, self.noise)
        self.plain_state = plaintext.reshape(4, 4)
        self.__add_round_key(self.plain_state, self.round_keys[:4])

        for i in range(1, 10):
            self.__round_encrypt(self.plain_state,
                                 self.round_keys[4 * i:4 * (i + 1)])

        self.__sub_bytes(self.plain_state)
        self.__shift_rows(self.plain_state)
        self.__add_round_key(self.plain_state, self.round_keys[40:])
        return self.plain_state.flatten(), self.trace
Exemplo n.º 27
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
Exemplo n.º 28
0
def readfile( month, day, hour, webpageId ):
    strId = '.'.join([str(month), str(day), str(hour), str(webpageId)])

    trace = Trace(webpageId)
    start = 0

    absPath    = __constructAbsolutePath( month, day, hour, webpageId )

    if absPath:
        pcapReader = dpkt.pcap.Reader( file( absPath, "rb") )

        for ts, buf in pcapReader:
            eth = dpkt.ethernet.Ethernet(buf)
            ip  = eth.data
            tcp = ip.data
            
            if start==0: start = ts
            direction = Packet.UP
            if (tcp.sport==22):
                direction = Packet.DOWN
            delta     = int(round(((ts - start) * 1000),0))
            length    = ip.len + Packet.HEADER_ETHERNET

            trace.addPacket( Packet(direction, delta, length ) )
            
    return trace
Exemplo n.º 29
0
    def traces(self):
        "yields all traceroutes of query"
        if self.queryResult == None:
            return None

        for raw_trace in self.queryResult['queries']:
            yield Trace(raw_trace)
 def test_send_1(self):
     t1 = Trace.create_from_array(1, self.TRACE_1)
     Folklore.FIXED_PACKET_LEN = 1000
     Folklore.TIMER_CLOCK_SPEED = 10
     Folklore.MILLISECONDS_TO_RUN = 200
     t2 = Folklore.applyCountermeasure(t1)
     expected_trace = [
         (1, 0, 1000), (0, 0, 1000),        # -  u1
         (1, 10, 1000), (0, 10, 1000),      # -  -
         (1, 20, 1000), (0, 20, 1000),      # d1 -
         (1, 30, 1000), (0, 30, 1000),      # -  u2
         (1, 40, 1000), (0, 40, 1000),      # d2 -
         (1, 50, 1000), (0, 50, 1000),      # d2 u3
         (1, 60, 1000), (0, 60, 1000),      # d3 -
         (1, 70, 1000), (0, 70, 1000),      # d4 u4
         (1, 80, 1000), (0, 80, 1000),      # d4 -
         (1, 90, 1000), (0, 90, 1000),      # d5 -
         (1, 100, 1000), (0, 100, 1000),    # d5 -
         (1, 110, 1000), (0, 110, 1000),    # d6 -
         (1, 120, 1000), (0, 120, 1000),    # -  -
         (1, 130, 1000), (0, 130, 1000),    # -  -
         (1, 140, 1000), (0, 140, 1000),    # -  -
         (1, 150, 1000), (0, 150, 1000),    # -  -
         (1, 160, 1000), (0, 160, 1000),    # -  -
         (1, 170, 1000), (0, 170, 1000),    # -  -
         (1, 180, 1000), (0, 180, 1000),    # -  -
         (1, 190, 1000), (0, 190, 1000),    # -  -
         (1, 200, 1000), (0, 200, 1000),    # -  -
     ]
     self.assertTraceEqual(t2, expected_trace)
Exemplo n.º 31
0
    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
Exemplo n.º 32
0
 def WriteSet(self):
     i = 0
     mx = max(self.set) + 1
     while i < mx:
         while i < mx and (i not in self.set):
             i += 1
         if i == mx:
             break
         j = i
         while i < mx and (i in self.set):
             i += 1
         if j < (i - 1):
             Trace.Write(
                 str(CharClass.Ch(j)) + ".." + str(CharClass.Ch(i - 1)) +
                 " ")
         else:
             Trace.Write(str(CharClass.Ch(j) + " "))
Exemplo n.º 33
0
    def readWangTorFileOld( webpageId, traceIndex ):

        if webpageId < 100:
            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)

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

        prevcTime = currcTime = fileList[0].split("\t")[0] # previous and current cell time (0.0 in the example above)
        prevcDirection = currcDirection = int(fileList[0].split("\t")[1]) # previous and current cell direction

        #cLength = 512 # cell length is always 512 bytes in Tor
        cellCtr = 1

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

            currcTime = cTime
            currcDirection = int(cDirection)

            if currcTime != prevcTime:
                #pLength = cellCtr * cLength
                Datastore.addPacketsFromCells( trace, prevcDirection, prevcTime, cellCtr )
                prevcDirection = currcDirection
                prevcTime = currcTime
                cellCtr = 1
                continue
            elif currcDirection != prevcDirection:
                #pLength = cellCtr * cLength
                Datastore.addPacketsFromCells( trace, prevcDirection, prevcTime, cellCtr )
                prevcDirection = currcDirection
                prevcTime = currcTime
                cellCtr = 1
                continue
            else: # same time, same direciton
                cellCtr = cellCtr + 1
                prevcDirection = currcDirection
                prevcTime = currcTime

        # for the last cell
        Datastore.addPacketsFromCells( trace, prevcDirection, prevcTime, cellCtr )

        return trace
def readfile(month, day, hour, webpageId):
    strId = '.'.join([str(month), str(day), str(hour), str(webpageId)])

    trace = Trace(webpageId)
    start = 0

    absPath = __constructAbsolutePath(month, day, hour, webpageId)

    # testing
    #print absPath

    if absPath:
        pcapReader = dpkt.pcap.Reader(file(absPath, "rb"))

        for ts, buf in pcapReader:
            eth = dpkt.ethernet.Ethernet(buf)
            ip = eth.data
            tcp = ip.data

            #dpkt.Packet.__flags__

            if start == 0: start = ts
            direction = Packet.UP
            if (tcp.sport == 22):
                direction = Packet.DOWN
            if (config.DATA_SOURCE == 3):
                if (tcp.sport == 9001 or tcp.sport == 443):
                    direction = Packet.DOWN
            if (config.DATA_SOURCE == 4 or config.DATA_SOURCE == 41
                    or config.DATA_SOURCE == 42):
                if (tcp.sport == 8080 or tcp.sport == 443):
                    direction = Packet.DOWN

            #testing
            #origTimeDiff = ts - start
            #origTimeDiff = (ts - start) * 1000
            #origTimeDiff = round(((ts - start) * 1000),0)
            #origTimeDiff = int(round(((ts - start) * 1000),0))
            #print origTimeDiff

            delta = int(round(((ts - start) * 1000), 0))
            length = ip.len + Packet.HEADER_ETHERNET
            '''
            if (config.DATA_SOURCE==3): # overcoming the packet size greater than 1500
                while True:
                    if length > 1500: # MTU
                        excludedLength = random.randint(595, 1500)
                        trace.addPacket( Packet(direction, delta, excludedLength ) )
                        length = length - excludedLength
                    else:
                        trace.addPacket( Packet(direction, delta, length ) )
                        break
            else:
                trace.addPacket( Packet(direction, delta, length ) )
            '''
            trace.addPacket(Packet(direction, delta, length))

    return trace
Exemplo n.º 35
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
Exemplo n.º 36
0
 def __init__(self, foldername):
     """
     Initialize Driver with a foldername.
     """
     self._id = int(os.path.basename(foldername))
     self._traces = []
     files = [f for f in os.listdir(foldername) if f.endswith(".csv")]
     for filename in files:
         self._traces.append(Trace(os.path.join(foldername, filename)))
Exemplo n.º 37
0
def Join_Particles(particles=[],
                   start_ID=1,
                   folder='./',
                   overlap_thr=0.5,
                   autotrigger=True,
                   eccentricity_thr=10,
                   verbose=True):

    ID = start_ID

    for filename in tqdm(os.listdir(folder)):

        if not filename.startswith('mean_'):
            continue
        # e.g filename = mean_280519-video7_000-007_opened_cc02.png
        prefix, dot, name = str(filename).partition(
            '-')  # = mean_280519, -, video7_000-007_opened_cc02.png
        segment, dot, suffix1 = name.partition(
            '-')  # = video7_000, -, 007_opened_cc02.png
        frame, dot, suffix2 = suffix1.partition(
            '_')  # = 007, _, opened_cc02.png
        frameID = int(frame)
        previous_name = segment + ('-%03d' % (frameID - 1))

        t = Trace(folder, filename)
        if autotrigger:
            if not Trigger(
                    t, eccentricity_thr=eccentricity_thr, verbose=verbose):
                continue

        found = False
        for p in particles:
            if p.traces[-1].frame_name == previous_name:
                diff_matrix = np.abs(p.traces[-1].matrix - t.matrix)

                # compute white_number for diff_matrix
                n_whites = 0
                for x in diff_matrix:
                    for y in x:
                        if y > 0:
                            n_whites += 1

                overlap = 1.0 - n_whites / (p.traces[-1].white_number +
                                            t.white_number)
                if verbose:
                    print('\n' + previous_name + '-' + t.frame_name +
                          ': overlap = ' + str(overlap))
                if overlap >= overlap_thr:
                    found = True
                    p.traces.append(t)
                    break

        if not found:
            particles.append(Particle(folder, ID, [t]))
            ID += 1

    return particles, ID - start_ID
Exemplo n.º 38
0
    def __init__(self, filename):
        self.filename = filename
        raw = Trace.from_file(self.filename)
        self.traces = {'raw': raw}
        self.last_trace = raw

        self.time_units = "min"
        self.intensity_metric = "Absorbance"
        self.intensity_units = "mAU"
Exemplo n.º 39
0
 def __init__(self, foldername):
     """
     Initialize Driver with a foldername.
     """
     self._id = int(os.path.basename(foldername))
     self._traces = []
     file_num = len(os.listdir(foldername))
     files = ['%d.csv' % (i) for i in range(1, file_num+1)]
     for filename in files:
         self._traces.append(Trace(os.path.join(foldername, filename)))
    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
    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
 def test_tamaraw_1(self):
     t1 = Trace.create_from_array(1, self.TRACE_2)
     cm = Tamaraw()
     cm.set_param('RUN_PADDING', 4)
     t2 = cm.apply_to_trace(t1)
     expected_trace = [
         (1, 0, 750),
         (0, 0, 750),
         (1, 6, 750),
         (1, 12, 750),
         (1, 18, 750),
         (0, 20, 750),   # u1
         (1, 24, 750),   # d1
         (1, 30, 750),   # d2-1
         (1, 36, 750),   # d2-2
         (0, 40, 750),   # u2
         (1, 42, 750),
         (0, 60, 750),
     ]
     self.assertTraceEqual(t2, expected_trace)
Exemplo n.º 43
0
 def generate_trace(self):
   trace_obj = Trace(self.src_f.name, self.bin_fn, self.trace_fn)
   trace_obj.run()
 def build_new_trace(self):
     self.new_trace = Trace(self.trace.getId())
class CounterMeasure(object):
    DEFAULT_PARAMS = {}

    def __init__(self, params=None):
        self.trace = None
        self.new_trace = None
        self.metadata = None
        self.model = None
        self.params = copy.deepcopy(self.DEFAULT_PARAMS)
        self.new_trace_size = 0
        if params:
            self.params.update(params)

    def set_param(self, parameter, value):
        self.params[parameter] = value
        self.update_params()

    def update_params(self):
        pass

    def train(self, src_page=None, target_page=None):
        pass

    def apply(self):
        """ Create a new trace by applying the countermeasure to the original trace

            The original trace is available in self.trace
            The modified trace should be saved in self.new_trace or returned
        """
        raise NotImplementedError

    def build_new_trace(self):
        self.new_trace = Trace(self.trace.getId())

    def add_packet(self, packet):
        # print packet.get_details()
        t = packet.getTime()
        self.new_trace_size += packet.size
        ind = len(self.new_trace.packets)
        while 0 < ind and t < self.new_trace.packets[ind - 1].getTime():
            ind -= 1
        self.new_trace.add_packet(packet, index=ind)

    def get_new_trace_time(self):
        return self.new_trace.packets[-1].time if self.new_trace.packets else 0

    def get_new_trace_size(self):
        return self.new_trace_size

    def apply_to_trace(self, trace):
        self.trace = trace
        self.build_new_trace()
        t2 = self.apply()
        if t2 is None:
            t2 = self.new_trace
        return t2

    @classmethod
    def initialize(cls):
        pass

    @classmethod
    def get_name(cls):
        return 'Generic Countermeasure'
 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
    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
 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
Exemplo n.º 49
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
    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  ) )