def readNetworkView(self, filename):
        target = None
        access = []
        routes = []
        tempNodes = {}
        gateway = ""

        with open(filename) as file:
            lines = file.readlines()
            for line in lines:
                line = line.replace("\n", "")
                args = line.split(",")
                if args[0] == "Target":
                    n = Node(args[1], args[2], args[3], args[4], args[4],
                             False, False, False, args[5], args[6])
                    target = n
                    access.append(n)
                    tempNodes[args[1]] = n
                if args[0] == "Server":
                    n = Node(args[1], args[2], args[2], args[3], args[3],
                             False, False, True, args[4], args[5])
                    server = n
                if args[0] == "Node":
                    n = Node(args[1], args[2], args[3], args[4], args[4],
                             False, False, False, args[5], args[6])
                    access.append(n)
                    tempNodes[args[1]] = n
                if args[0] == "Honeypot":
                    hp = Node(args[1], args[2], args[3], args[4], args[5],
                              True, False, False, args[6])
                    access.append(hp)
                    tempNodes[args[1]] = hp
                if args[0] == "Honeyrouter":
                    hr = Node(args[1], args[2], args[2], args[3], args[3],
                              False, True, False, args[4])
                    access.append(hr)
                    tempNodes[args[1]] = hr
                if args[0] == "Route":
                    idxh = 0
                    r = Route(tempNodes[args[1]], tempNodes[args[2]])
                    for h in args:
                        if idxh > 2:
                            r.addHop(tempNodes[h])
                        idxh += 1
                    routes.append(r)
                if args[0] == "Gateway":
                    gateway = tempNodes[args[1]]

        nv = NetworkView(target, access, routes, gateway, server)
        print("Generated network view for " + str(target.decepted_ip_addr) +
              " on port " + str(target.switchPort))
        return nv
    def readNetworkView(self,filename):
        target = None
        access = []
        routes = []
        tempNodes = {}
        gateway = ""

        with open(filename) as file:
            lines = file.readlines()
            for line in lines:
                line = line.replace("\n","")
                args = line.split(",")
                if args[0] == "Target":
                    n = Node(args[1],args[2],args[3],args[4],args[4],False,False,False,args[5],args[6])
                    target = n
                    access.append(n)
                    tempNodes[args[1]] = n
                if args[0] == "Server":
                    n = Node(args[1],args[2],args[2],args[3],args[3],False,False,True,args[4],args[5])
                    server = n
                if args[0] == "Node":
                    n = Node(args[1],args[2],args[3],args[4],args[4],False,False,False,args[5],args[6])
                    access.append(n)
                    tempNodes[args[1]] = n
                if args[0] == "Honeypot":
                    hp = Node(args[1],args[2],args[3],args[4],args[5],True,False,False,args[6])
                    access.append(hp)
                    tempNodes[args[1]] = hp
                if args[0] == "Honeyrouter":
                    hr = Node(args[1],args[2],args[2],args[3],args[3],False,True,False,args[4])
                    access.append(hr)
                    tempNodes[args[1]] = hr
                if args[0] == "Route":
                    idxh=0
                    r = Route(tempNodes[args[1]],tempNodes[args[2]])
                    for h in args:
                        if idxh > 2:
                            r.addHop(tempNodes[h])
                        idxh+=1
                    routes.append(r)
                if args[0] == "Gateway":
                    gateway = tempNodes[args[1]]

        nv = NetworkView(target,access,routes,gateway,server)
        print("Generated network view for " +  str(target.decepted_ip_addr) + " on port " + str(target.switchPort))
        return nv
Beispiel #3
0
    def generatgeView(self, rHosts, subnetSpace, targetPort, NCDSPort,
                      HoneyPort, numSubnets, minHP, maxHP, Strategy):

        self.targetsubnet = numSubnets
        self.lowerSubnet = numSubnets / 2
        self.upperSubnet = 0
        #generate specified number of subnets
        for s in range(1, numSubnets):
            self.getAvaiSubnet(numSubnets)

        hosts = []
        #assign hosts to subnets, and deceive their data
        for k in rHosts.keys():
            if k != NCDSPort and k != HoneyPort:
                #create new host object
                realip = rHosts[k].split("/")[0]
                realmac = rHosts[k].split("/")[1]
                if k == targetPort:
                    self.target = Host(self.getShortnameHost(), realip,
                                       realmac, k)
                    #get subnet address for target
                    self.target = self.setAvailableSubnetAddress(
                        subnetSpace, numSubnets, self.target, targetPort)
                    #print(str(self.target.deceptiveIP))
                else:
                    host = Host(self.getShortnameHost(), realip, realmac, k)
                    #get subnet address for host
                    host = self.setAvailableSubnetAddress(
                        subnetSpace, numSubnets, host, targetPort)
                    #print(str(host.deceptiveIP))

        #assign honeypots to subnets
        realHoneyIP = rHosts[HoneyPort].split("/")[0]
        realHoneyMac = rHosts[HoneyPort].split("/")[1]
        for subKey in self.subnetList.keys():
            numHoneypots = random.randint(minHP, maxHP)
            for hp in range(1, numHoneypots):
                subnet = self.subnetList[subKey]
                hpAddr = self.getAvaiHoneypotforSubnet(subnet)
                honeyAddr = str(subnetSpace[:-2]) + "." + str(
                    subnet.number) + "." + str(hpAddr)
                honeypot = Honeypot(self.getShortnameHoneypot(),
                                    realHoneyIP, realHoneyMac, honeyAddr,
                                    self.randMac(), HoneyPort)
                self.subnetList[subnet.number].honeypots.append(honeypot)
                #print("Honeypot " + honeyAddr)

        #create honeyrouters
        routerMac = self.randMac()
        targetSubnet = int(self.target.deceptiveIP.split(".")[2])

        subnet = self.subnetList[targetSubnet]
        subnetAddr = str(subnetSpace[:-2]) + "." + str(subnet.number) + ".1"
        hr = Honeyrouter(self.getShortnameHoneyrouter(), subnetAddr, routerMac,
                         NCDSPort)
        subnet.honeyrouter.append(hr)
        gateway = hr.shortName
        self.subnetList[subnet.number] = subnet
        self.honeyrouterList.append(hr)

        for subKey in self.subnetList.keys():
            subnet = self.subnetList[subKey]
            if subnet.number != targetSubnet:
                subnetAddr = str(subnetSpace[:-2]) + "." + str(
                    subnet.number) + ".1"
                hr = Honeyrouter(self.getShortnameHoneyrouter(), subnetAddr,
                                 routerMac, NCDSPort)
                subnet.honeyrouter.append(hr)
                self.subnetList[subKey] = subnet
                self.honeyrouterList.append(hr)

        #generate routes
        numhops = 1
        for subKey in self.subnetList.keys():
            subnet = self.subnetList[subKey]
            targetSubnet = int(self.target.deceptiveIP.split(".")[2])

            if subnet.number != targetSubnet:
                numhops += 1
                #numhops=random.randint(2,networkDiameter)
                hostIdx = 0
                for host in subnet.hosts:
                    r = Route(self.target, host)
                    hostSubnet = int(host.deceptiveIP.split(".")[2])
                    #hops = int(math.fabs(hostSubnet-targetSubnet))

                    #max sub dist min hop dist
                    if Strategy == "minhop_maxsub":
                        hops = numSubnets - hostSubnet

                    if Strategy == "maxhop_maxsub":
                        #max sub dist max hop dist
                        hops = hostSubnet

                    for hop in range(0, hops):
                        r.addHop(self.honeyrouterList[hop])
                    self.routeList.append(r)
                    host.distance = hops
                    #subnet.hosts.insert(hostIdx,host)
                    #hostIdx+=1
                for honeypot in subnet.honeypots:
                    r = Route(self.target, honeypot)
                    for hop in range(0, numhops - 1):
                        r.addHop(self.honeyrouterList[hop])
                    self.routeList.append(r)
            else:
                for host in subnet.hosts:
                    r = Route(self.target, host)
                    self.routeList.append(r)
                for honeypot in subnet.honeypots:
                    r = Route(self.target, honeypot)
                    self.routeList.append(r)

        #set gateway

        printer = NetworkPrinter()
        realhosts = printer.printView(self.target, self.subnetList,
                                      self.routeList, targetPort, gateway)
        #for printhost in realhosts:
        #print("realhosts.append(\"" + printhost + "\")")
        return (realhosts, self.targetsubnet)
    def generatgeView(self,rHosts,subnetSpace,targetPort,NCDSPort,HoneyPort,numSubnets,minHP,maxHP,Strategy):

        self.targetsubnet = numSubnets
        self.lowerSubnet = numSubnets/2
        self.upperSubnet = 0
        #generate specified number of subnets
        for s in range(1,numSubnets):
            self.getAvaiSubnet(numSubnets)

        hosts=[]
        #assign hosts to subnets, and deceive their data
        for k in rHosts.keys():
            if k!=NCDSPort and k!=HoneyPort:
                #create new host object
                realip=rHosts[k].split("/")[0]
                realmac=rHosts[k].split("/")[1]
                if k==targetPort:
                    self.target=Host(self.getShortnameHost(),realip,realmac,k)
                    #get subnet address for target
                    self.target=self.setAvailableSubnetAddress(subnetSpace,numSubnets,self.target,targetPort)
                    #print(str(self.target.deceptiveIP))
                else:
                    host=Host(self.getShortnameHost(),realip,realmac,k)
                    #get subnet address for host
                    host=self.setAvailableSubnetAddress(subnetSpace,numSubnets,host,targetPort)
                    #print(str(host.deceptiveIP))

        #assign honeypots to subnets
        realHoneyIP=rHosts[HoneyPort].split("/")[0]
        realHoneyMac=rHosts[HoneyPort].split("/")[1]
        for subKey in self.subnetList.keys():
            numHoneypots=random.randint(minHP,maxHP)
            for hp in range(1,numHoneypots):
                subnet=self.subnetList[subKey]
                hpAddr=self.getAvaiHoneypotforSubnet(subnet)
                honeyAddr=str(subnetSpace[:-2]) + "." + str(subnet.number) + "." + str(hpAddr)
                honeypot=Honeypot(self.getShortnameHoneypot(),realHoneyIP,realHoneyMac,honeyAddr,self.randMac(),HoneyPort)
                self.subnetList[subnet.number].honeypots.append(honeypot)
                #print("Honeypot " + honeyAddr)

        #create honeyrouters
        routerMac=self.randMac()
        targetSubnet = int(self.target.deceptiveIP.split(".")[2])

        subnet=self.subnetList[targetSubnet]
        subnetAddr=str(subnetSpace[:-2]) + "." + str(subnet.number) + ".1"
        hr=Honeyrouter(self.getShortnameHoneyrouter(),subnetAddr,routerMac,NCDSPort)
        subnet.honeyrouter.append(hr)
        gateway=hr.shortName
        self.subnetList[subnet.number]=subnet
        self.honeyrouterList.append(hr)

        for subKey in self.subnetList.keys():
            subnet=self.subnetList[subKey]
            if subnet.number != targetSubnet:
                subnetAddr=str(subnetSpace[:-2]) + "." + str(subnet.number) + ".1"
                hr=Honeyrouter(self.getShortnameHoneyrouter(),subnetAddr,routerMac,NCDSPort)
                subnet.honeyrouter.append(hr)
                self.subnetList[subKey]=subnet
                self.honeyrouterList.append(hr)



        #generate routes
        numhops=1
        for subKey in self.subnetList.keys():
            subnet=self.subnetList[subKey]
            targetSubnet = int(self.target.deceptiveIP.split(".")[2])

            if subnet.number != targetSubnet:
                numhops+=1
                #numhops=random.randint(2,networkDiameter)
                hostIdx=0
                for host in subnet.hosts:
                    r=Route(self.target,host)
                    hostSubnet = int(host.deceptiveIP.split(".")[2])
                    #hops = int(math.fabs(hostSubnet-targetSubnet))

                    #max sub dist min hop dist
                    if Strategy=="minhop_maxsub":
                        hops = numSubnets - hostSubnet

                    if Strategy=="maxhop_maxsub":
                    #max sub dist max hop dist
                        hops = hostSubnet

                    for hop in range(0,hops):
                        r.addHop(self.honeyrouterList[hop])
                    self.routeList.append(r)
                    host.distance=hops
                    #subnet.hosts.insert(hostIdx,host)
                    #hostIdx+=1
                for honeypot in subnet.honeypots:
                    r=Route(self.target,honeypot)
                    for hop in range(0,numhops-1):
                        r.addHop(self.honeyrouterList[hop])
                    self.routeList.append(r)
            else:
                for host in subnet.hosts:
                    r=Route(self.target,host)
                    self.routeList.append(r)
                for honeypot in subnet.honeypots:
                    r=Route(self.target,honeypot)
                    self.routeList.append(r)

        #set gateway


        printer = NetworkPrinter()
        realhosts = printer.printView(self.target,self.subnetList,self.routeList,targetPort,gateway)
        #for printhost in realhosts:
            #print("realhosts.append(\"" + printhost + "\")")
        return (realhosts, self.targetsubnet)