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
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
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()
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 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)