Пример #1
0
class IdsController():
    def __init__(self):
        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.bridgeController = BridgeController()

        self.idsCoreController = IdsCoreController()
        self.idsCoreParser = IdsCoreParser()

        self.idsParser = IdsParser()

        self.transparent_intefaces = []

    def set_configuration(self, json_configuration):
        json_interfaces = self.idsParser.parse_interfaces(json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        assert len(self.transparent_intefaces
                   ) == 2, "Error: transparent interfaces have to be 2"
        logging.debug(
            "Found " + str(len(self.transparent_intefaces)) +
            " transparent interfaces, now create a bridge between them")
        bridge = Bridge("br0", self.transparent_intefaces[0].name,
                        self.transparent_intefaces[1].name)
        logging.debug("Bridge to create: " + bridge.__str__())
        self.create_bridge(bridge)

        # Configure IDS
        if 'config-ids:ids' in json_configuration:
            logging.debug("Found and Ids Configuration, try to set it...")
            ids_configuration = self.idsParser.parse_ids_configuration(
                json_configuration)
            self.set_ids_configuration(ids_configuration)
            logging.debug("Found and Ids Configuration, try to set it...done!")
            logging.debug("Starting snort as a daemon...")
            self.idsCoreController.start_ids()
            logging.debug("Starting snort as a daemon...done!")

    def get_full_status(self):
        pass

    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        return conf_interfaces

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(
                self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type == "transparent":
            self.transparent_intefaces.append(interface)
            logging.debug("Found a transparent interface: " +
                          interface.__str__())
            return
        else:
            iface_found = self.interfaceController.get_interface_by_name(
                interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)

            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)

                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def update_interface_ipv4Configuration(self, ifname,
                                           json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(
            json_ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(
                ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(
                ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(
                ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname,
                                                      default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(
                ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(
            interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address

    # Bridge
    def create_bridge(self, bridge):
        br_found = self.interfaceController.get_interface_by_name(bridge.name)
        if br_found is None:
            self.bridgeController.create_bridge(bridge)
            logging.debug("Bridge created")
        else:
            logging.debug("Bridge already existent")

    # Ids
    def set_ids_configuration(self, json_ids_configuration):
        idsConfiguration = self.idsCoreParser.parse_ids_configuration(
            json_ids_configuration)
        self.idsCoreController.set_configuration(idsConfiguration)

    def add_attackToMonitor(self, attack):
        try:
            self.idsCoreController.add_attackToMonitor(attack)
        except ValueError as ve:
            raise ve
Пример #2
0
class NatController():

    def __init__(self):
        self.natParser = NatParser()

        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.natCoreController = NatCoreController()
        self.natCoreParser = NatCoreParser()

        self.natTableController = NatTableController()
        self.natTableParser = NatTableParser()

        self.arpTableController = ArpTableController()
        self.arpTableParser = ArpTableParser()

        self.floatingIpController = FloatingIpController()
        self.floatingIpParser = FloatingIpParser()

    def set_configuration(self, json_configuration):

        json_interfaces = self.natParser.parse_interfaces(json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        conf_nat = self.natParser.parse_nat_configuration(json_configuration)
        public_interface_id = self.natCoreParser.parse_public_interface(conf_nat)
        self.set_ip_forward(public_interface_id)
        private_interface_id = self.natCoreParser.parse_private_interface(conf_nat)

        if 'nat-table' in conf_nat:
            json_nat_table = self.natTableParser.parse_nat_table(conf_nat)
            json_nat_sessions = self.natTableParser.parse_nat_sessions(json_nat_table)
            for json_nat_session in json_nat_sessions:
                self.add_nat_session(json_nat_session)

        if 'arp-table' in conf_nat:
            json_arp_table = self.arpTableParser.parse_arp_table(conf_nat)
            json_arp_entries = self.arpTableParser.parse_arp_entries(json_arp_table)
            for json_arp_entry in json_arp_entries:
                self.add_arp_entry(json_arp_entry)

        if 'floatingIP' in conf_nat:
            json_floating_ip_list = self.floatingIpParser.parse_floating_ip_list(conf_nat)
            for curr_json_floating_ip in json_floating_ip_list:
                self.add_floating_ip(curr_json_floating_ip)
                pass


    def get_full_status(self):

        status = {}

        status["config-nat:interfaces"] = self.get_interfaces_status()
        status["config-nat:nat"] = self.get_nat_status()

        return status


    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        return conf_interfaces

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            iface_found = self.interfaceController.get_interface_by_name(interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)
            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)

                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def update_interface_ipv4Configuration(self, ifname, json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(json_ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname, default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address


    # Nat
    def get_nat_status(self):
        nat = {}
        nat['private-interface'] = self.get_private_interface_id()
        nat['public-interface'] = self.get_public_interface_id()
        nat['nat-table'] = self.get_nat_table()
        nat['arp-table'] = self.get_arp_table()
        nat['floatingIP'] = self.get_all_floating_ip()
        return nat

    # Nat/Wan-interface
    def set_ip_forward(self, public_interface_id):
        current_public_iface_name = self.natCoreController.get_public_interface_name()
        if current_public_iface_name is None:
            public_iface = self.interfaceController.get_interface_by_id(public_interface_id)
            self.natCoreController.set_ip_forward(public_iface.name)
            logging.debug("Nat set on wan interface: " + public_iface.name)

    def unset_ip_forward(self, public_interface_id):
        current_public_iface_name = self.natCoreController.get_public_interface_name()
        if current_public_iface_name is not None:
            public_iface = self.interfaceController.get_interface_by_id(public_interface_id)
            self.natCoreController.unset_ip_forward(public_iface.name)
            logging.debug("Nat unset")

    def get_public_interface_id(self):
        public_iface_name = self.natCoreController.get_public_interface_name()
        public_iface = self.interfaceController.get_interface_by_name(public_iface_name)
        return public_iface.id

    def get_private_interface_id(self):
        public_iface_name = self.natCoreController.get_public_interface_name()
        interfaces = self.interfaceController.get_interfaces()
        for interface in interfaces:
            if interface.management == False:
                if interface.name != public_iface_name:
                    return interface.id

    # Nat/nat-table
    def get_nat_table(self):
        nat_table = {}
        nat_table['nat-session'] = self.get_nat_session()
        return nat_table

    def get_nat_session(self):
        nat_table = self.natTableController.get_nat_table()
        nat_table_dict = []
        for nat_session in nat_table:
            nat_table_dict.append(self.natTableParser.get_nat_session_dict(nat_session))
        return nat_table_dict

    def add_nat_session(self, json_nat_session):
        # not supported
        nat_session = self.natTableParser.parse_nat_session(json_nat_session)
        self.natTableController.add_nat_session(nat_session)
        #logging.debug("Added nat_session: " + nat_session.__str__())

    # Nat/arp-table
    def get_arp_table(self):
        arp_table = {}
        arp_table['arp-entry'] = self.get_arp_entry()
        return arp_table

    def get_arp_entry(self):
        arp_table = self.arpTableController.get_arp_table()
        arp_table_dict = []
        for arp_entry in arp_table:
            arp_table_dict.append(self.arpTableParser.get_arp_entry_dict(arp_entry))
        return arp_table_dict

    def add_arp_entry(self, json_arp_entry):
        arp_entry = self.arpTableParser.parse_arp_entry(json_arp_entry)
        self.arpTableController.add_arp_entry(arp_entry.ip_address, arp_entry.mac_address)
        logging.debug("Added arp_entry: " + arp_entry.__str__())

    def delete_arp_entry(self, ip_address):
        if self.arpTableController.arp_entry_exists(ip_address):
            self.arpTableController.delete_arp_entry(ip_address)
            logging.debug("Removed arp_entry with ip_address: " + ip_address)
        else:
            raise ValueError("There is no entry in arp table with ip_address: " + ip_address)

    def get_arp_table_mac_address(self, ip_address):
        return self.arpTableController.get_mac_address(ip_address)

    def update_arp_table_mac_address(self, ip_address, mac_address):
        if self.arpTableController.arp_entry_exists(ip_address):
            self.arpTableController.add_arp_entry(ip_address, mac_address)
            logging.debug("Updated arp_entry, ip_address: " + ip_address + " mac_address: " + mac_address)
        else:
            raise ValueError("There is no entry in arp table with ip_address: " + ip_address)


    # Nat/StaticBindings
    def add_floating_ip(self, json_floating_ip):
        floating_ip = self.floatingIpParser.parse_floating_ip(json_floating_ip)
        floating_ip_list = self.floatingIpController.get_all_floating_ip()
        for curr_floating_ip in floating_ip_list:
            if curr_floating_ip.__eq__(floating_ip):
                return
        wan_interface = self.natCoreController.get_public_interface_name()
        self.floatingIpController.configure_floating_ip(floating_ip, wan_interface)
        logging.debug("floating_ip set: private address " + floating_ip.private_address + " => public address" + floating_ip.public_address)

    def update_floating_ip(self, public_address, json_floating_ip):
        pass

    def update_floating_ip_private_address(self, public_address, private_address):
        pass

    def update_floating_ip_public_address(self, public_address, private_address):
        pass

    def delete_floating_ip(self, public_address):
        if self.floatingIpController.floating_ip_exists(public_address):
            self.floatingIpController.delete_floating_ip(public_address)
        else:
            raise ValueError("could not find a floating_ip with public address " + public_address)

    def get_all_floating_ip(self):
        floating_ip_list = self.floatingIpController.get_all_floating_ip()
        floating_ip_dict = []
        for floating_ip in floating_ip_list:
            floating_ip_dict.append(self.floatingIpParser.get_floating_ip_dict(floating_ip))
        return floating_ip_dict

    def get_floating_ip(self, public_address):
        floating_ip = self.floatingIpController.get_floating_ip(public_address)
        if floating_ip is None:
            raise ValueError("could not find a floating_ip with public address " + public_address)
        floating_ip_dict = self.floatingIpParser.get_floating_ip_dict(floating_ip)
        return floating_ip_dict

    def get_floating_ip_private_address(self, public_address):
        floating_ip_list = self.floatingIpController.get_all_floating_ip()
        for floating_ip in floating_ip_list:
            if floating_ip.public_address == public_address:
                return floating_ip.private_address
        raise ValueError("could not find a floating_ip with public address " + public_address)

    def get_floating_ip_public_address(self, public_address):
        floating_ip_list = self.floatingIpController.get_all_floating_ip()
        for floating_ip in floating_ip_list:
            if floating_ip.public_address == public_address:
                return floating_ip.public_address
        raise ValueError("could not find a floating_ip with public address " + public_address)
Пример #3
0
class DhcpController():
    def __init__(self):
        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.dhcpServerController = DhcpServerController()
        self.dhcpServerParser = DhcpServerParser()

        self.dhcpClientController = DhcpClientController()
        self.dhcpClientParser = DhcpClientParser()

        self.dhcpParser = DhcpParser()

    def set_configuration(self, json_configuration):

        json_interfaces = self.dhcpParser.parse_interfaces(json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        conf_dhcp_server = self.dhcpParser.parse_dhcp_server(
            json_configuration)
        self.configure_dhcp_server(conf_dhcp_server)

    def get_full_status(self):

        status = {}

        status["config-firewall:interfaces"] = self.get_interfaces_status()
        status["config-dhcp-server:server"] = self.get_dhcp_server_status()
        status["config-dhcp-server:clients"] = self.get_clients()

        return status

    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        return conf_interfaces

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(
                self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            iface_found = self.interfaceController.get_interface_by_name(
                interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)
            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)
                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(
            interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address

    def update_interface_ipv4Configuration(self, ifname,
                                           json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(
            json_ipv4Configuration)
        print(ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(
                ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(
                ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(
                ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname,
                                                      default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(
                ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    # Dhcp
    def get_dhcp_status(self):
        conf_dhcp = {}
        conf_dhcp['server'] = self.get_dhcp_server_configuration()
        conf_dhcp['clients'] = self.get_clients()
        return conf_dhcp

    # Dhcp Server
    def get_dhcp_server_status(self):
        return self.get_dhcp_server_configuration()

    # Dhcp Server/Configuration
    def configure_dhcp_server(self, json_dhcp_server_params):
        dhcp_server_configuration = self.dhcpServerParser.parse_dhcp_server_configuration(
            json_dhcp_server_params)
        logging.debug(dhcp_server_configuration.__str__())
        logging.debug("Configure dhcp server parameters...")
        if self.dhcpServerController.configuration_exists():
            current_dhcp_server_configuration = self.dhcpServerController.get_dhcp_server_configuration(
            )
            if dhcp_server_configuration.__eq__(
                    current_dhcp_server_configuration):
                logging.debug(
                    "Configure dhcp server parameters...done! (configuration is equal to the previous one)"
                )
                return
        self.dhcpServerController.configure_dhcp_server(
            dhcp_server_configuration)
        logging.debug("Configure dhcp server parameters...done!")

    def add_section(self, json_section):
        section = self.dhcpServerParser.parse_section(json_section)
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.add_section(section)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_default_lease_time(self, default_lease_time):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_default_lease_time(
                default_lease_time)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_max_lease_time(self, max_lease_time):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_max_lease_time(max_lease_time)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_subnet(self, subnet):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_subnet(subnet)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_subnet_mask(self, subnet_mask):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_subnet_mask(subnet_mask)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_router(self, router):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_router(router)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_dns_primary_server(self, dns_primary_server):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_dns_primary_server(
                dns_primary_server)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_dns_secondary_server(self, dns_secondary_server):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_dns_secondary_server(
                dns_secondary_server)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_dns_domain_name(self, dns_domain_name):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_domain_name(dns_domain_name)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_section(self, section_start_ip, json_section):
        section = self.dhcpServerParser.parse_section(json_section)
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.update_section(section_start_ip, section)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_section_start_ip(self, section_start_ip, start_ip):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.add_section_start_ip(
                section_start_ip, start_ip)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def update_section_end_ip(self, section_start_ip, end_ip):
        if self.dhcpServerController.configuration_exists():
            self.dhcpServerController.add_section_end_ip(
                section_start_ip, end_ip)
        else:
            raise ValueError("could not find a dhcp server configuration")

    def get_dhcp_server_configuration(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        dhcp_server_configuration = self.dhcpServerController.get_dhcp_server_configuration(
        )
        return self.dhcpServerParser.get_dhcp_server_configuration_dict(
            dhcp_server_configuration)

    def get_dhcp_server_configuration_default_lease_time(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        default_lease_time = self.dhcpServerController.get_dhcp_server_configuration_default_lease_time(
        )
        return default_lease_time

    def get_dhcp_server_configuration_max_lease_time(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        max_lease_time = self.dhcpServerController.get_dhcp_server_configuration_max_lease_time(
        )
        return max_lease_time

    def get_dhcp_server_configuration_subnet(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        subnet = self.dhcpServerController.get_dhcp_server_configuration_subnet(
        )
        return subnet

    def get_dhcp_server_configuration_subnet_mask(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        subnet_mask = self.dhcpServerController.get_dhcp_server_configuration_subnet_mask(
        )
        return subnet_mask

    def get_dhcp_server_configuration_router(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        router = self.dhcpServerController.get_dhcp_server_configuration_router(
        )
        return router

    def get_dhcp_server_configuration_dns_primary_server(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        dns_primary_server = self.dhcpServerController.get_dhcp_server_configuration_dns_primary_server(
        )
        return dns_primary_server

    def get_dhcp_server_configuration_dns_secondary_server(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        dns_secondary_server = self.dhcpServerController.get_dhcp_server_configuration_dns_secondary_server(
        )
        return dns_secondary_server

    def get_dhcp_server_configuration_dns_domain_name(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        dns_domain_name = self.dhcpServerController.get_dhcp_server_configuration_dns_domain_name(
        )
        return dns_domain_name

    def get_dhcp_server_configuration_sections(self):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        sections = self.dhcpServerController.get_dhcp_server_configuration_sections(
        )
        sections_dict = []
        for section in sections:
            section_dict = self.dhcpServerParser.get_dhcp_server_configuration_section_dict(
                section)
            sections_dict.append(section_dict)
        return sections_dict

    def get_dhcp_server_configuration_section(self, section_start_ip):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        section = self.dhcpServerController.get_dhcp_server_configuration_section(
            section_start_ip)
        if section is not None:
            return self.dhcpServerParser.parse_section(section)
        else:
            raise ValueError("could not find section with start_ip: " +
                             section_start_ip)

    def get_dhcp_server_configuration_section_start_ip(self, section_start_ip):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        start_ip = self.dhcpServerController.get_dhcp_server_configuration_section_start_ip(
            section_start_ip)
        if start_ip is not None:
            return start_ip
        else:
            raise ValueError("could not find section with start_ip: " +
                             section_start_ip)

    def get_dhcp_server_configuration_section_end_ip(self, section_start_ip):
        if not self.dhcpServerController.configuration_exists():
            raise ValueError("could not find a dhcp server configuration")
        end_ip = self.dhcpServerController.get_dhcp_server_configuration_section_end_ip(
            section_start_ip)
        if end_ip is not None:
            return end_ip
        else:
            raise ValueError("could not find section with start_ip: " +
                             section_start_ip)

    # Dhcp Client
    def get_clients(self):
        clients = self.dhcpClientController.get_clients()
        clients_dict = []
        for client in clients:
            clients_dict.append(self.dhcpClientParser.get_client_dict(client))
        return clients_dict

    def get_client(self, mac_address):
        if not self.dhcpClientController.client_exists(mac_address):
            raise ValueError("could not find client: " + mac_address)
        client = self.dhcpClientController.get_client(mac_address)
        client_dict = self.dhcpClientParser.get_client_dict(client)
        return client_dict

    def get_client_ip_address(self, mac_address):
        if not self.dhcpClientController.client_exists(mac_address):
            raise ValueError("could not find client: " + mac_address)
        client_ip_address = self.dhcpClientController.get_client_ip_address(
            mac_address)
        return client_ip_address

    def get_client_hostname(self, mac_address):
        if not self.dhcpClientController.client_exists(mac_address):
            raise ValueError("could not find client: " + mac_address)
        client_hostname = self.dhcpClientController.get_client_hostname(
            mac_address)
        return client_hostname

    def get_client_valid_until(self, mac_address):
        if not self.dhcpClientController.client_exists(mac_address):
            raise ValueError("could not find client: " + mac_address)
        client_valid_until = self.dhcpClientController.get_client_valid_until(
            mac_address)
        return client_valid_until
Пример #4
0
class IperfController():

    def __init__(self):
        self.iperfParser = IperfParser()

        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.iperfCoreController = IperfCoreController()
        self.iperfCoreParser = IperfCoreParser()

    def set_configuration(self, json_configuration):

        json_interfaces = self.iperfParser.parse_interfaces(json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        json_conf_iperf = self.iperfParser.parse_iperf_configuration(json_configuration)

        if 'server' in json_conf_iperf:
            json_server_params = self.iperfCoreParser.parse_server(json_conf_iperf)
            self.start_iperf_server(json_server_params)

        if 'client' in json_conf_iperf:
            json_client_params = self.iperfCoreParser.parse_client(json_conf_iperf)
            self.start_iperf_client(json_client_params)

    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        return conf_interfaces

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            iface_found = self.interfaceController.get_interface_by_name(interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)
            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)
                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address

    def update_interface_ipv4Configuration(self, ifname, json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(json_ipv4Configuration)
        print(ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname, default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    # Iperf
    def start_iperf_client(self, json_iperf_client):
        iperf_client = self.iperfCoreParser.parse_client_configuration(json_iperf_client)
        return self.iperfCoreController.start_iperf_client(iperf_client)

    def start_iperf_server(self, json_iperf_server):
        iperf_server = self.iperfCoreParser.parse_server_configuration(json_iperf_server)
        return self.iperfCoreController.start_iperf_server(iperf_server)
Пример #5
0
class FirewallController():
    def __init__(self):
        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.bridgeController = BridgeController()

        self.policyController = PolicyController()
        self.policyParser = PolicyParser()

        self.blacklistController = BlacklistController()
        self.blacklistParser = BlacklistParser()

        self.whitelistController = WhitelistController()
        self.whitelistParser = WhitelistParser()

        self.firewallParser = FirewallParser()

        self.transparent_intefaces = []
        self.wan_interface = None

    def set_configuration(self, json_configuration):

        json_interfaces = self.firewallParser.parse_interfaces(
            json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        conf_firewall = self.firewallParser.parse_firewall_configuration(
            json_configuration)
        self.set_wan_interface(conf_firewall)

        assert len(self.transparent_intefaces
                   ) == 2, "Error: transparent interfaces have to be 2"
        logging.debug(
            "Found " + str(len(self.transparent_intefaces)) +
            " transparent interfaces, now create a bridge between them")
        to_lan_interface = None
        to_wan_interface = None
        for tr_iface in self.transparent_intefaces:
            if tr_iface.name == self.wan_interface:
                to_wan_interface = tr_iface
            else:
                to_lan_interface = tr_iface
        logging.debug("to_wan_interface : " + to_wan_interface.__str__())
        logging.debug("to_lan_interface : " + to_lan_interface.__str__())
        bridge = Bridge("br0", to_lan_interface.name, to_wan_interface.name)
        logging.debug("Bridge to create: " + bridge.__str__())
        if self.create_bridge(bridge) is True:
            Bash('route del default')
            Bash('/usr/sbin/dhclient ' + bridge.name + ' -nw')
            br_iface = self.interfaceController.get_interface_by_name(
                bridge.name)
            policy = Policy(
                description="drop all traffic from fw_host to lan_iface",
                action="drop",
                protocol="ipv4",
                out_interface=to_lan_interface.name,
                src_address=br_iface.ipv4_configuration.address)
            self.policyController.add_policy(policy,
                                             table="FILTER",
                                             chain="OUTPUT")
            #Bash('ebtables -A OUTPUT -p IPv4 --ip-src ' + br_iface.ipv4_configuration.address + ' --out-interface ' + to_lan_interface + ' -j DROP')

        json_policies = self.policyParser.parse_policies(conf_firewall)
        for json_policy in json_policies[::-1]:
            self.add_policy(json_policy)

        json_blacklist = self.blacklistParser.parse_blacklist(conf_firewall)
        for json_url in json_blacklist:
            url = self.blacklistParser.parse_url(json_url)
            self.add_blacklist_url(url)

        json_whitelist = self.whitelistParser.parse_whitelist(conf_firewall)
        for json_url in json_whitelist:
            url = self.whitelistParser.parse_url(json_url)
            self.add_whitelist_url(url)

    def get_full_status(self):

        status = {}

        status["config-firewall:interfaces"] = self.get_interfaces_status()
        status["config-firewall:firewall"] = self.get_firewall_status()

        return status

    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        conf_interfaces["wan-interface"] = self.get_wan_interface()
        return conf_interfaces

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(
                self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type == "transparent":
            self.transparent_intefaces.append(interface)
            logging.debug("Found a transparent interface: " +
                          interface.__str__())
            return
        else:
            iface_found = self.interfaceController.get_interface_by_name(
                interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)

            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)

                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def update_interface_ipv4Configuration(self, ifname,
                                           json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(
            json_ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(
                ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(
                ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(
                ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname,
                                                      default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(
                ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(
            interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address

    # Interfaces/Wan-interface
    def get_wan_interface(self):
        return self.wan_interface

    def set_wan_interface(self, json_configuration):
        self.wan_interface = json_configuration['wan-interface']

    # Bridge
    def create_bridge(self, bridge):
        br_found = self.interfaceController.get_interface_by_name(bridge.name)
        if br_found is None:
            self.bridgeController.create_bridge(bridge)
            logging.debug("Bridge created")
            return True
        else:
            logging.debug("Bridge already existent")
            return False

    # Firewall
    def get_firewall_status(self):
        firewall = {}
        firewall['policies'] = self.get_policies()
        firewall['blacklist'] = self.get_blacklist()
        firewall['whitelist'] = self.get_whitelist()
        return firewall

    # Firewall/Policies
    def add_policy(self, json_policy):
        policy = self.policyParser.parse_policy(json_policy)
        policies = self.policyController.get_policies()
        for pol in policies:
            if pol.__eq__(policy):
                logging.debug("The policy already exists, return")
                return
        id = self.policyController.add_policy(policy)
        logging.debug("Configured policy: " + policy.__str__())
        return id

    def update_policy(self, id, json_policy):
        pass

    def update_policy_description(self, id, description):
        pass

    def update_policy_action(self, id, action):
        pass

    def update_policy_protocol(self, id, protocol):
        pass

    def update_policy_in_interface(self, id, in_interface):
        pass

    def update_policy_out_interface(self, id, out_interface):
        pass

    def update_policy_src_address(self, id, src_address):
        pass

    def update_policy_dst_address(self, id, dst_address):
        pass

    def update_policy_src_port(self, id, src_port):
        pass

    def update_policy_dst_port(self, id, dst_port):
        pass

    def get_policies(self):
        policies = self.policyController.get_policies()
        policies_dict = []
        for policy in policies:
            policies_dict.append(self.policyParser.get_policy_dict(policy))
        return policies_dict

    def get_policy(self, id):
        policy = self.policyController.get_policy(id)
        if policy is None:
            raise ValueError("could not find policy: " + id)
        policy_dict = self.policyParser.get_policy_dict(policy)
        return policy_dict

    def get_policy_description(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.description

    def get_policy_action(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.action

    def get_policy_protocol(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.protocol

    def get_policy_in_interface(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.in_interface

    def get_policy_out_interface(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.out_interface

    def get_policy_src_address(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.src_address

    def get_policy_dst_address(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.dst_address

    def get_policy_src_port(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.src_port

    def get_policy_dst_port(self, id):
        if not self.policyController.policy_exists(id):
            raise ValueError("could not find policy: " + id)
        policy = self.policyController.get_policy(id)
        return policy.dst_port

    def delete_policies(self):
        self.policyController.delete_policies()

    def delete_policy(self, id):
        if self.policyController.policy_exists(id):
            self.policyController.delete_policy(id)
        else:
            raise ValueError("could not find policy: " + id)

    def clear_policy_repo(self):
        self.policyController.clear_policy_repo()

    # Firewall/Blacklist
    def add_blacklist_url(self, url):
        blacklist = self.blacklistController.get_blacklist()
        for curr_url in blacklist:
            if curr_url.__eq__(url):
                return
        self.blacklistController.configure_url(url)
        logging.debug("Configured blacklist url: " + url)

    def get_blacklist(self):
        blacklist = self.blacklistController.get_blacklist()
        blacklist_dict = []
        for url in blacklist:
            blacklist_dict.append(self.blacklistParser.get_url_dict(url))
        return blacklist_dict

    def delete_blacklist(self):
        pass

    def delete_blacklist_url(self, url):
        if self.blacklistController.url_exists(url):
            self.blacklistController.delete_url(url)
        else:
            raise ValueError("could not find url " + url + " in blacklist")

    # Firewall/Whitelist
    def add_whitelist_url(self, url):
        whitelist = self.whitelistController.get_whitelist()
        for curr_url in whitelist:
            if curr_url.__eq__(url):
                return
        self.whitelistController.configure_url(url)
        logging.debug("Configured whitelist url: " + url)

    def get_whitelist(self):
        whitelist = self.whitelistController.get_whitelist()
        whitelist_dict = []
        for url in whitelist:
            whitelist_dict.append(self.whitelistParser.get_url_dict(url))
        return whitelist_dict

    def delete_whitelist(self):
        pass

    def delete_whitelist_url(self, url):
        if self.whitelistController.url_exists(url):
            self.whitelistController.delete_url(url)
        else:
            raise ValueError("could not find url " + url + " in whitelist")
Пример #6
0
class TrafficShaperController():
    def __init__(self):
        self.trafficShaperParser = TrafficShaperParser()

        self.interfaceController = InterfaceController()
        self.interfaceParser = InterfaceParser()

        self.bridgeController = BridgeController()

        self.trafficShaperCoreController = TrafficShaperCoreController()
        self.trafficShaperCoreParser = TrafficShaperCoreParser()

        self.transparent_interfaces = []

    def set_configuration(self, json_configuration):

        json_interfaces = self.trafficShaperParser.parse_interfaces(
            json_configuration)
        for json_iface in json_interfaces:
            self.configure_interface(json_iface)

        if len(self.transparent_interfaces) == 2:
            iface1 = self.transparent_interfaces[0].name
            iface2 = self.transparent_interfaces[1].name
            bridge = Bridge("br0", iface1, iface2)
            logging.debug("Bridge to create: " + bridge.__str__())
            self.create_bridge(bridge)
        elif len(self.transparent_interfaces) == 0:
            self.enable_ip_forwarding()
        else:
            logging.debug("Error: transparent interfaces must be two")

        json_traffic_shaper = self.trafficShaperParser.parse_traffic_shaper_configuration(
            json_configuration)
        if 'configuration' in json_traffic_shaper:
            json_traffic_shaper_configuration = self.trafficShaperCoreParser.parse_configuration(
                json_traffic_shaper)
            self.start_bandwitdh_shaping(json_traffic_shaper_configuration)

    def get_full_status(self):

        status = {}

        status[
            "config-traffic-shaper:interfaces"] = self.get_interfaces_status()

        configuration = {}
        configuration['configuration'] = self.get_all_traffic_shapers()
        status["config-traffic-shaper:traffic_shaper"] = configuration

        return status

    # Interfaces
    def get_interfaces_status(self):
        conf_interfaces = {}
        conf_interfaces["ifEntry"] = self.get_interfaces()
        return conf_interfaces

    # Bridge
    def create_bridge(self, bridge):
        br_found = self.interfaceController.get_interface_by_name(bridge.name)
        if br_found is None:
            self.bridgeController.create_bridge(bridge)
            logging.debug("Bridge created")
            return True
        else:
            logging.debug("Bridge already existent")
            return False

    # Interfaces/ifEntry
    def get_interfaces(self):
        interfaces = self.interfaceController.get_interfaces()
        interfaces_dict = []
        for interface in interfaces:
            interfaces_dict.append(
                self.interfaceParser.get_interface_dict(interface))
        return interfaces_dict

    def get_interface(self, name):
        interface = self.interfaceController.get_interface_by_name(name)
        if interface is None:
            raise ValueError("could not find interface: " + name)
        interface_dict = self.interfaceParser.get_interface_dict(interface)
        return interface_dict

    def configure_interface(self, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type == "transparent":
            self.transparent_interfaces.append(interface)
            logging.debug("Found a transparent interface: " +
                          interface.__str__())
            return
        else:
            iface_found = self.interfaceController.get_interface_by_name(
                interface.name)
            if iface_found is not None:
                if iface_found.__eq__(interface):
                    return
            self.interfaceController.configure_interface(interface)
            logging.debug("Configured interface: " + interface.__str__())

    def update_interface(self, name, json_interface):
        interface = self.interfaceParser.parse_interface(json_interface)
        if interface.type != "transparent":
            if self.interfaceController.interface_exists(name):
                self.interfaceController.configure_interface(interface)
                logging.debug("Updated interface: " + interface.__str__())
            else:
                raise ValueError("could not find interface: " + name)

    def reset_interface(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        self.interfaceController.reset_interface(name)

    def get_interface_ipv4Configuration(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        ipv4_configuration_dict = self.interfaceParser.get_interface_ipv4Configuration(
            interface.ipv4_configuration)
        return ipv4_configuration_dict

    def get_interface_ipv4Configuration_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.address

    def get_interface_ipv4Configuration_netmask(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.netmask

    def get_interface_ipv4Configuration_default_gw(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.default_gw

    def get_interface_ipv4Configuration_mac_address(self, name):
        if not self.interfaceController.interface_exists(name):
            raise ValueError("could not find interface: " + name)
        interface = self.interfaceController.get_interface_by_name(name)
        return interface.ipv4_configuration.mac_address

    def update_interface_ipv4Configuration(self, ifname,
                                           json_ipv4Configuration):
        ipv4Configuration = self.interfaceParser.parse_ipv4_configuration(
            json_ipv4Configuration)
        print(ipv4Configuration)
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration(
                ifname, ipv4Configuration)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_address(self, ifname, address):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_address(
                ifname, address)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_netmask(self, ifname, netmask):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_netmask(
                ifname, netmask)
        else:
            raise ValueError("could not find interface: " + ifname)

    def update_interface_ipv4Configuration_default_gw(self, ifname,
                                                      default_gw):
        if self.interfaceController.interface_exists(ifname):
            self.interfaceController.configure_interface_ipv4Configuration_default_gw(
                ifname, default_gw)
        else:
            raise ValueError("could not find interface: " + ifname)

    def enable_ip_forwarding(self):
        self.trafficShaperCoreController.enable_ip_forwarding()
        logging.debug("ip_forwarding enabled")

    # Traffic Shaper
    def start_bandwitdh_shaping(self, json_traffic_shaper):
        logging.debug(json_traffic_shaper)
        for json_interface_to_shape in json_traffic_shaper:
            traffic_shaper = self.trafficShaperCoreParser.parse_traffic_shaper_configuration(
                json_interface_to_shape)
            logging.debug(traffic_shaper.__str__())
            interface_name = self.trafficShaperCoreParser.parse_interface_to_control(
                json_interface_to_shape)
            interface = self.interfaceController.get_interface_by_name(
                interface_name)
            traffic_shaper.add_interface_name(interface.name)
            traffic_shaper.add_interface_address(
                interface.ipv4_configuration.address)
            self.trafficShaperCoreController.start_bandwitdh_shaping(
                traffic_shaper)

    def stop_bandwitdh_shaping(self, interface_name):
        if self.trafficShaperCoreController.traffic_shaper_exists(
                interface_name):
            self.trafficShaperCoreController.stop_bandwitdh_shaping(
                interface_name)
        else:
            raise ValueError("could not find traffic shaper for interface: " +
                             interface_name)

    def update_bandwitdh_shaping(self, interface_name, json_traffic_shaper):
        if self.trafficShaperCoreController.traffic_shaper_exists(
                interface_name):
            traffic_shaper = self.trafficShaperCoreParser.parse_traffic_shaper_configuration(
                json_traffic_shaper)
            logging.debug(traffic_shaper.__str__())
            interface = self.interfaceController.get_interface_by_name(
                interface_name)
            traffic_shaper.add_interface_name(interface.name)
            traffic_shaper.add_interface_address(
                interface.ipv4_configuration.address)
            self.trafficShaperCoreController.update_bandwidth_shaping(
                traffic_shaper)

    def update_bandwitdh_shaping_download_limit(self, interface_name,
                                                download_limit):
        if self.trafficShaperCoreController.traffic_shaper_exists(
                interface_name):
            self.trafficShaperCoreController.update_bandwidth_shaping_download_limit(
                interface_name, download_limit)
        else:
            raise ValueError("could not find traffic shaper for interface: " +
                             interface_name)

    def update_bandwitdh_shaping_upload_limit(self, interface_name,
                                              upload_limit):
        if self.trafficShaperCoreController.traffic_shaper_exists(
                interface_name):
            self.trafficShaperCoreController.update_bandwidth_shaping_upload_limit(
                interface_name, upload_limit)
        else:
            raise ValueError("could not find traffic shaper for interface: " +
                             interface_name)

    def get_all_traffic_shapers(self):
        traffic_shapers_dict = []
        traffic_shaper_list = self.trafficShaperCoreController.get_all_traffic_shapers(
        )
        for traffic_shaper in traffic_shaper_list:
            traffic_shapers_dict.append(
                self.trafficShaperCoreParser.get_traffic_shaper_dict(
                    traffic_shaper))
        return traffic_shapers_dict

    def get_traffic_shaper(self, interface_name):
        if interface_name is not None:
            if self.trafficShaperCoreController.traffic_shaper_exists(
                    interface_name):
                traffic_shaper = self.trafficShaperCoreController.get_traffic_shaper(
                    interface_name)
                return self.trafficShaperCoreParser.get_traffic_shaper_dict(
                    traffic_shaper)
            else:
                raise ValueError(
                    "could not find traffic shaper for interface: " +
                    interface_name)