def __init__(self, args): super(HttpScan, self).__init__(args) self.session = requesocks.session() adapters.DEFAULT_RETRIES = self.args.max_retries self.tor = None if self.args.tor: self.out.log("Enabling TOR") self.tor = Torify() self.session.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'} if self.args.check_tor: # Check TOR self.out.log("Checking IP via TOR") rip, tip = self.tor.check_ip(verbose=True) if tip is None: self.out.log('TOR is not working properly!', logging.ERROR) exit(-1) if self.args.cookies is not None: if path.exists(self.args.cookies) and path.isfile(self.args.cookies): self.cookies = MozillaCookieJar(self.args.cookies) self.cookies.load() else: # self.out.log('Could not find cookie file: %s' % self.args.load_cookies, logging.ERROR) self.cookies = Cookies.from_request(self.args.cookies) else: self.cookies = None self.ua = UserAgent() if self.args.user_agent is None else self.args.user_agent
class HttpScan(DummyScan): def __init__(self, args): super(HttpScan, self).__init__(args) self.session = requesocks.session() adapters.DEFAULT_RETRIES = self.args.max_retries self.tor = None if self.args.tor: self.out.log("Enabling TOR") self.tor = Torify() self.session.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'} if self.args.check_tor: # Check TOR self.out.log("Checking IP via TOR") rip, tip = self.tor.check_ip(verbose=True) if tip is None: self.out.log('TOR is not working properly!', logging.ERROR) exit(-1) if self.args.cookies is not None: if path.exists(self.args.cookies) and path.isfile(self.args.cookies): self.cookies = MozillaCookieJar(self.args.cookies) self.cookies.load() else: # self.out.log('Could not find cookie file: %s' % self.args.load_cookies, logging.ERROR) self.cookies = Cookies.from_request(self.args.cookies) else: self.cookies = None self.ua = UserAgent() if self.args.user_agent is None else self.args.user_agent def filter(self, response): if response is None: return False # Filter responses and save responses that are matching ignore, allow rules if (self.args.allow is None and self.args.ignore is None) or \ (self.args.allow is not None and response.status_code in self.args.allow) or \ (self.args.ignore is not None and response.status_code not in self.args.ignore): # TODO: add regex search return True return False def scan_url(self, url): # TODO: add options r = None ex = None try: r = self.session.get(url) except Exception as e: ex = e finally: self.cb_response(url, r, ex) return r, ex def scan_host(self, host, urls): res = [] for u in urls: url = get_full_url(host, u) r, ex = self.scan_url(url) self.out.logger.write_response(url, r, ex) if self.filter(r): self.out.write(url, r, ex) res.append((url, r, ex)) return res def cb_scan_done(self, future): pass def cb_response(self, url, reponse, exception): pass
def __init__(self, args): super(FutureScan, self).__init__(args) self.executor = futures.ThreadPoolExecutor(max_workers=args.threads) self.hosts = file_to_list(args.hosts, 'Hosts file not found!') self.urls = file_to_list(args.urls, 'Urls file not found!') self.tor = Torify()