Exemple #1
0
 def testCopy(self):
     # NB: shallow copy of f1; flow key will be identical
     f1 = Flowlet(self.ident2)
     f2 = copy.copy(f1)
     # test whether FlowIdent keys referred to by each flowlet
     # are the same object
     self.assertIs(f1.key, f2.key)
Exemple #2
0
    def __makeflow(self):
        if haveIPAddrGen:
            srcip = str(IPv4Address(ipaddrgen.generate_addressv4(self.ipsrcgen)))
            dstip = str(IPv4Address(ipaddrgen.generate_addressv4(self.ipdstgen)))
        else:
            srcip = str(IPAddress(int(self.ipsrc) + random.randint(0,self.ipsrc.numhosts-1)))
            dstip = str(IPAddress(int(self.ipdst) + random.randint(0,self.ipdst.numhosts-1)))

        ipproto = self.ipproto
        sport = dport = 0
        if ipproto == IPPROTO_ICMP:
            # std way that netflow encodes icmp type/code:
            # type in high-order byte of dport, 
            # code in low-order byte
            t = next(self.icmptype)
            c = next(self.icmpcode)
            dport = t << 8 | c
            # print 'icmp t,c,dport',hex(t),hex(c),hex(dport)
        else:
            if self.sport:
                sport = next(self.sport)
            if self.dport:
                dport = next(self.dport)
                
        flet = Flowlet(FlowIdent(srcip, dstip, ipproto, sport, dport))
        flet.iptos = next(self.iptos)
        flet.flowstart = flet.flowend = fscore().now

        if flet.ipproto == IPPROTO_TCP:
            flet.ackflow = not self.autoack

            tcpflags = next(self.tcpflags)
            flaglist = tcpflags.split('|')
            xtcpflags = 0x0
            for f in flaglist:
                if f == 'FIN':
                    xtcpflags |= 0x01
                elif f == 'SYN':
                    xtcpflags |= 0x02
                elif f == 'RST':
                    xtcpflags |= 0x04
                elif f == 'PUSH' or f == 'PSH':
                    xtcpflags |= 0x08
                elif f == 'ACK':
                    xtcpflags |= 0x10
                elif f == 'URG':
                    xtcpflags |= 0x20
                elif f == 'ECE':
                    xtcpflags |= 0x40
                elif f == 'CWR':
                    xtcpflags |= 0x80
                else:
                    raise InvalidFlowConfiguration('Invalid TCP flags mnemonic ' + f)

            flet.tcpflags = xtcpflags
        return flet
Exemple #3
0
 def testAdd(self):
     f1 = Flowlet(self.ident1)
     f1.pkts = 1 
     f1.bytes = 1 
     f2 = copy.copy(f1)
     f2.pkts = 1
     f2.bytes = 1
     f1 += f2
     self.assertEqual(f1.pkts, 2)
     self.assertEqual(f1.bytes, 2)
     self.assertEqual(f2.pkts, 1)
     self.assertEqual(f2.bytes, 1)
Exemple #4
0
 def send_ack_flow(self, flowlet, input_intf):
     # print "constructing ack flow:", self.name, flowlet, prevnode, destnode, input_intf
     revident = flowlet.ident.mkreverse()
     revflet = Flowlet(revident)
     revflet.srcmac,revflet.dstmac = flowlet.dstmac,flowlet.srcmac
     revflet.ackflow = True
     revflet.pkts = flowlet.pkts/2
     revflet.bytes = revflet.pkts * 40
     revflet.iptos = flowlet.iptos
     revflet.tcpflags = flowlet.tcpflags
     revflet.ingress_intf = input_intf
     revflet.flowstart = fscore().now
     revflet.flowend = revflet.flowstart
     destnode = fscore().topology.destnode(self.name, revflet.dstaddr)
     # self.logger.debug("Injecting reverse flow: {}->{}".format(revflet.srcmac, revflet.dstmac))
     self.flowlet_arrival(revflet, self.name, destnode)
Exemple #5
0
    def __makeflow(self):
        while True:
            if haveIPAddrGen:
                srcip = str(ipaddr.IPv4Address(ipaddrgen.generate_addressv4(self.ipsrcgen)))
                dstip = str(ipaddr.IPv4Address(ipaddrgen.generate_addressv4(self.ipdstgen)))
            else:
                # srcip = str(ipaddr.IPAddress(int(self.srcnet) + random.randint(0,self.srcnet.numhosts-1)))
                # dstip = str(ipaddr.IPAddress(int(self.dstnet) + random.randint(0,self.dstnet.numhosts-1)))
                srcip = str(ipaddr.IPAddress(int(self.srcnet) + random.randint(0, 2)))
                dstip = str(ipaddr.IPAddress(int(self.dstnet) + random.randint(0, 2)))

            ipproto = next(self.ipproto)
            sport = next(self.srcports)
            dport = next(self.dstports)
            fsize = int(next(self.flowsizerv))
            flet = Flowlet(FlowIdent(srcip, dstip, ipproto, sport, dport), bytes=fsize)
            
            flet.iptos = next(self.iptosrv)
            if flet.key not in self.activeflows:
                break

        return flet
Exemple #6
0
 def testBuildFlowlet(self):
     f1 = Flowlet(self.ident1)
     f1.flowstart = time.time()
     f1.flowend = time.time() + 10
     self.assertEqual(repr(f1.key), repr(self.ident1))