def req(self): while not self.q.empty() and self.STOP_ME == False: try: r = requests.get(self.q.get(), headers=self.header, timeout=2) if max( map(lambda x: r.headers['Content-Type'].find(x), self.mime)) < 0: continue print '[{}] {}'.format(r.status_code, r.url) tags = BeautifulSoup(r.content, "lxml") for tag in tags.find_all('a'): try: if True in map(lambda x: x == tag['href'][:5], ['http:', 'https']): targetTmp = tag['href'].split('/')[2] if targetTmp.find(':') != -1: targetTmp = targetTmp[:targetTmp.find(':')] for i in self.hooks: if targetTmp[-len(i):] == i: self.q.put(tag['href']) try: self.lock.acquire() if targetTmp not in self.domain_db and targetTmp[ -len(i) - 1:] == '.' + i and len( targetTmp) > len(i) + 1: hostTmp = host(targetTmp) if hostTmp: portTmp = ','.join([ str(i) for i in port( targetTmp, 80, 443) ]) if not portTmp: portTmp = '' try: self.domain_db.add( targetTmp) domain_db().insert( targetTmp, ','.join(hostTmp), portTmp) except: pass except: pass finally: self.lock.release() break except: pass except: pass
def run(self, *args): if args: self.entrances = args[0].split(',') for i in self.entrances: self.q.put('http://{}'.format(i)) else: print '[+] Choose Entrances Domain ing ...' self.entrances = random.sample(self.hooks, self.thread_cnt) for i in self.entrances: if not port(i, 80): self.reSelect(i) else: self.q.put('http://{}'.format(i)) print "[+] Use : {}".format('、'.join(self.entrances)) for t in xrange(self.thread_cnt): t = threading.Thread(target=self.req) t.setDaemon(True) t.start() while True: if threading.activeCount() <= 1: break else: try: time.sleep(0.1) except KeyboardInterrupt: self.STOP_ME = True
def reSelect(self, domain): newdomain = random.sample(self.hooks, 1)[0] try: if port(newdomain, 80): self.entrances[self.entrances.index(domain)] = newdomain self.q.put('http://{}'.format(newdomain)) else: self.reSelect(domain) except: self.reSelect(domain)