def pause(self): """ ThreadPool pause :raise KeyboardInterrupt :return: None """ self.is_started = False tpl.info(key='stop_threads', threads=len(self.__workers)) try: while 0 < threading.active_count(): for worker in threading.enumerate(): if threading.current_thread().__class__.__name__ != '_MainThread': worker.pause() time.sleep(2) char = tpl.prompt(key='option_prompt') if char.lower() == 'e': raise KeyboardInterrupt elif char.lower() == 'c': self.resume() break else: continue except (SystemExit, KeyboardInterrupt): raise KeyboardInterrupt
def scan(self): """ Scanner :raise BrowserError :return: None """ self.__debug.debug_user_agents() self.__debug.debug_list(total_lines=self.__pool.total_items_size) try: # beginning scan process if True is self.__config.is_random_list: self.__reader.randomize_list(target=self.__config.scan, output='tmplist') tpl.info(key='scanning', host=self.__config.host) self.__start_request_provider() if True is self.__pool.is_started: self.__reader.get_lines(params={ 'host': self.__config.host, 'port': self.__config.port, 'scheme': self.__config.scheme }, loader=getattr(self, '_add_urls'.format())) except (ProxyRequestError, HttpRequestError, HttpsRequestError, ReaderError) as error: raise BrowserError(error)
def test_info_exception(self): """ Tpl.info() exception test """ undefined = 'undefined' with self.assertRaises(TplError) as context: Tpl.info(key=undefined) self.assertTrue(undefined in str(context.exception)) self.assertTrue(TplError == context.expected)
def debug_request_uri(self, status, request_uri, **kwargs): """ Debug request_uri :param str status: response status :param str request_uri: http request uri :param mixed kwargs: :return: bool """ percentage = tpl.line( msg=helper.percent(kwargs.get('items_size', 0), kwargs.get('total_size', 1)), color='cyan') total_len = len(str(abs(kwargs.get('total_size', 1)))) if self.__cfg.DEFAULT_SCAN is self.__cfg.scan: urlpath = helper.parse_url(request_uri).path else: urlpath = request_uri if status in ['success', 'file', 'indexof', 'certificat', 'auth']: request_uri = tpl.line(key=status, color='green', url=urlpath) elif status in ['bad', 'forbidden']: request_uri = tpl.line(key='forbidden', color='yellow', url=urlpath) elif status in ['redirect']: request_uri = tpl.line(key='redirect', color='blue', url=urlpath, rurl=kwargs.get('redirect_uri')) self.__clear = True if self.__catched else False if status in ['success', 'file', 'bad', 'forbidden', 'redirect', 'indexof', 'certificat', 'auth']: sys.writels("", flush=True) tpl.info(key='get_item', clear=self.__clear, percent=percentage, current='{0:0{l}d}'.format(kwargs.get('items_size', 0), l=total_len), total=kwargs.get('total_size', 1), item=request_uri, size=kwargs.get('content_size') ) self.__catched = True else: tpl.line_log(key='get_item', percent=percentage, current='{0:0{l}d}'.format(kwargs.get('items_size', 0), l=total_len), total=kwargs.get('total_size', 1), item=request_uri, size=kwargs.get('content_size'), ) self.__catched = False if kwargs.get('items_size', 0) is kwargs.get('total_size', 1): sys.writels("", flush=True) return True
def resume(self): """ Resume threadpool :return: None """ if False is self.is_started: tpl.info(key='resume_threads') for worker in self.__workers: worker.resume() self.is_started = True
def ping(self): """ Check remote host for available :raise: BrowserError :return: None """ try: tpl.info(key='checking_connect', host=self.__config.host, port=self.__config.port) socket.ping(self.__config.host, self.__config.port, self.__config.DEFAULT_SOCKET_TIMEOUT) tpl.info(key='online', host=self.__config.host, port=self.__config.port, ip=socket.get_ip_address(self.__config.host)) except SocketError as error: raise BrowserError(error)
def scan(self): """ Scanner :raise BrowserError :return: None """ self.__debug.debug_user_agents() self.__debug.debug_list(total_lines=self.__pool.total_items_size) try: # beginning scan process if True is self.__config.is_random_list: if self.__config.scan == self.__config.DEFAULT_SCAN: if True is self.__config.is_extension_filter: setattr(self.__config, 'scan', 'extensionlist') elif True is self.__config.is_ignore_extension_filter: setattr(self.__config, 'scan', 'ignore_extensionlist') self.__reader.randomize_list(target=self.__config.scan, output='tmplist') tpl.info(key='scanning', host=self.__config.host) self.__start_request_provider() if True is self.__pool.is_started: self.__reader.get_lines( params={ 'host': self.__config.host, 'port': self.__config.port, 'scheme': self.__config.scheme }, loader=getattr(self, '_add_urls'.format()) ) except (ProxyRequestError, HttpRequestError, HttpsRequestError, ReaderError) as error: raise BrowserError(error)
def test_info(self): """ Tpl.info() test """ with patch('sys.stdout', new=StringIO()) as fakeOutput: Tpl.info('test_info') self.assertTrue('' in fakeOutput.getvalue().strip())