def _get_arp_infos_linux():
    """Get arp infos.

    :return: arp infos dict
    """
    result = {}

    # ping sweep
    try:
        subprocess.check_output('ping 255.255.255.255 -b -c 1', shell=True)
    except subprocess.CalledProcessError as e:
        Log.error('Network helper: ping sweep: %s' % e)

    output = subprocess.check_output('arp -e', shell=True)
    if not output:
        return result

    for line in output.split(b'\n'):
        if not line or b'gateway' in line or b'incomplete' in line:
            continue

        data = line.split()
        result[data[0].decode()] = {
            'mac': data[2].decode().replace(':', ''),
            'is_dynamic': True,  # entry are remove on inactive
        }

    return result
def update_module(module_name):
    """Update a module.

    :param module_name: module name
    :return: is sucess
    """
    if not ModuleManager.get(module_name):
        Log.error("Module not installed")
        return False
Exemple #3
0
    def read_config_file(self, path):
        if not os.path.isfile(path):
            return False

        with open(path) as config_file:
            self.add_config(**json.load(config_file))
            return True

        Log.error('config file "%s" not found' % path)
        return False
Exemple #4
0
    def read_config_file(self, path):
        if not os.path.isfile(path):
            return False

        with open(path) as config_file:
            self.add_config(**json.load(config_file))
            return True

        Log.error('config file "%s" not found' % path)
        return False
def init(module_name):
    """Init module."""
    if is_disabled(module_name):
        Log.debug('module "%s" ignored: is disabled' % module_name)
        return False

    if module_name in __modules_data and not __modules_data[module_name]['instance']:
        module_path = os.path.join(MODULES_PATH, module_name)
        module_file = os.path.join(module_path, 'Module.py')

        if not os.path.isfile(module_file):
            Log.debug('module "%s" ignored: not "Module.py" file' % module_name)
            return False

        try:
            module = __import__(
                'modules.' + module_name + '.Module',
                globals(),
                locals(),
                ['Module'],
            ).Module()

            if not module.is_available():
                Log.debug('module "%s" ignored: not available' % module_name)
                del(module)
                return False

            module.name = module_name
            module.module_path = module_path
            module._internal_init()
            __modules_data[module_name]['instance'] = module
            Log.debug('init module %s' % module_name)

        except ImportError as e:
            Log.error(
                'Import error, module %s (%s):' % (module_name, e),
                exc_info=True
            )
            return False

        except AttributeError as e:
            Log.error(
                'Module error, module %s (%s)' % (module_name, e),
                exc_info=True
            )
            return False

    return True
def install_module(module_name):
    """Install a new module.

    :param module_name: module name
    :return: is sucess
    """
    module_path = os.path.join(MODULES_PATH, module_name)
    if os.path.exists(module_path):
        return False

    infos = get_module_infos(module_name)
    if not infos:
        Log.error('Module "%s" not found' % module_name)
        return False

    # install module
    zip_file = BytesIO(requests.get(infos["zip_url"]).content)
    with ZipFile(zip_file) as z:
        # security + locate path files
        content_dir = ""
        for member in z.namelist():
            if member.startswith("/") or "./" in member:
                msg = 'Security threat on "%s" module install (%s)' % (module_name, member)
                Log.critical(msg)
                EventManager.fire(EventManager.Event("security_thread", __package__, msg=msg))
                return False

            if "Module.py" in member:
                content_dir = member.replace("Module.py", "")

        # unzip
        os.makedirs(module_path)
        for member in z.namelist():
            # skip directories
            if not os.path.basename(member):
                continue

            # unzip
            path = os.path.join(module_path, member.replace(content_dir, ""))
            with z.open(member) as s, open(path, "wb") as t:
                shutil.copyfileobj(s, t)

    # starting module
    ModuleManager.reindex_modules()
    ModuleManager.init(module_name)
    ModuleManager.start(module_name)
    return True
Exemple #7
0
    def started(self, component):
        self.load_configuration()
        options = {}

        try:
            self.__node = Node(
                port=self.__port,
                server_ip=self.__network,
                **options
            ).register(self)

        except socket.error as e:
            Log.error('socket server error: %s' % e)
            self.__node = Node(**options).register(self)

        self.load_peer()
        self.save_configuration()
Exemple #8
0
    def choice_config(self):
        if len(self.__configs) == 1:
            return self.__configs[0]

        if not len(self.__configs):
            Log.error('Not config file')
            return {}

        print('')

        while True:
            for id, config in enumerate(self.__configs):
                print('    %d) %s: %s' %
                      (id + 1, config['name'], config['description']))

            id = int(input('Your choice ID? '))

            if id and id > 0 and id <= len(self.__configs):
                return self.__configs[id - 1]

            print('Incorrect choice ID')
Exemple #9
0
    def choice_config(self):
        if len(self.__configs) == 1:
            return self.__configs[0]

        if not len(self.__configs):
            Log.error('Not config file')
            return {}

        print('')

        while True:
            for id, config in enumerate(self.__configs):
                print('    %d) %s: %s' % 
                    (id+1, config['name'], config['description']))

            id = int(input('Your choice ID? '))

            if id and id > 0 and id <= len(self.__configs):
                return self.__configs[id-1]

            print('Incorrect choice ID')
def call(module_name, method_name, *arg, c_optional_call=False, **kwargs):
    """Call module method."""
    if module_name not in __modules_data:
        if not c_optional_call:
            Log.error('Module "%s" not found' % module_name)
        return False

    if __modules_data[module_name]['instance'] is None:
        if not c_optional_call:
            Log.error('Module "%s" is not instantiated' % module_name)
        return False

    if not hasattr(__modules_data[module_name]['instance'], method_name):
        if not c_optional_call:
            Log.error('Module "%s" has not a "%s" method' % (module_name, method_name))
        return False

    return getattr(__modules_data[module_name]['instance'], method_name)(*arg, **kwargs)
 def add_error(self, text, *args, **kwargs):
     """Add a error message to logger"""
     text = '%s %s: %s' % (self.name_prefix, self.name, text)
     Log.error(text, *args, **kwargs)