def build_url(self): if self.target and not conf.console_mode: pr = urlparse(parse_target_url(self.target)) rport = pr.port if pr.port else 0 rhost = pr.hostname ssl = False if pr.scheme == 'https': ssl = True self.setg_option("rport", rport) self.setg_option("rhost", rhost) self.setg_option("ssl", ssl) return parse_target_url(self.target)
def execute(self, target, headers=None, params=None, mode='verify', verbose=True): self.target = target self.url = parse_target_url(target) if self.current_protocol == POC_CATEGORY.PROTOCOL.HTTP else self.build_url() self.headers = headers self.params = str_to_dict(params) if params else {} self.mode = mode self.verbose = verbose self.expt = (0, 'None') # TODO output = None try: output = self._execute() except NotImplementedError as e: self.expt = (ERROR_TYPE_ID.NOTIMPLEMENTEDERROR, e) logger.log(CUSTOM_LOGGING.ERROR, 'POC: {0} not defined "{1}" mode'.format(self.name, self.mode)) output = Output(self) except ConnectTimeout as e: self.expt = (ERROR_TYPE_ID.CONNECTTIMEOUT, e) while conf.retry > 0: logger.debug('POC: {0} timeout, start it over.'.format(self.name)) try: output = self._execute() break except ConnectTimeout: logger.debug('POC: {0} time-out retry failed!'.format(self.name)) conf.retry -= 1 else: msg = "connect target '{0}' failed!".format(target) logger.error(msg) output = Output(self) except HTTPError as e: self.expt = (ERROR_TYPE_ID.HTTPERROR, e) logger.warn('POC: {0} HTTPError occurs, start it over.'.format(self.name)) output = Output(self) except ConnectionError as e: self.expt = (ERROR_TYPE_ID.CONNECTIONERROR, e) msg = "connect target '{0}' failed!".format(target) logger.error(msg) output = Output(self) except TooManyRedirects as e: self.expt = (ERROR_TYPE_ID.TOOMANYREDIRECTS, e) logger.debug(str(e)) output = Output(self) except Exception as e: self.expt = (ERROR_TYPE_ID.OTHER, e) # logger.debug(str(e)) logger.exception(e) output = Output(self) return output