mirror of
https://github.com/shmilylty/OneForAll.git
synced 2026-10-28 11:45:52 +08:00
修复检查线程无限等待问题
This commit is contained in:
+33
-30
@@ -74,7 +74,6 @@ class Takeover(Module):
|
|||||||
self.format = format
|
self.format = format
|
||||||
self.fingerprints = None
|
self.fingerprints = None
|
||||||
self.subdomainq = Queue()
|
self.subdomainq = Queue()
|
||||||
self.bar = tqdm()
|
|
||||||
self.cnames = list()
|
self.cnames = list()
|
||||||
self.results = Dataset()
|
self.results = Dataset()
|
||||||
|
|
||||||
@@ -99,26 +98,37 @@ class Takeover(Module):
|
|||||||
self.results.append([subdomain, cname])
|
self.results.append([subdomain, cname])
|
||||||
break
|
break
|
||||||
|
|
||||||
|
def worker(self, subdomain):
|
||||||
|
cname = get_cname(subdomain)
|
||||||
|
if cname is None:
|
||||||
|
return
|
||||||
|
maindomain = get_maindomain(cname)
|
||||||
|
for fingerprint in self.fingerprints:
|
||||||
|
cnames = fingerprint.get('cname')
|
||||||
|
if maindomain not in cnames:
|
||||||
|
continue
|
||||||
|
responses = fingerprint.get('response')
|
||||||
|
self.compare(subdomain, cname, responses)
|
||||||
|
|
||||||
def check(self):
|
def check(self):
|
||||||
while not self.subdomainq.empty(): # 保证域名队列遍历结束后能退出线程
|
while not self.subdomainq.empty(): # 保证域名队列遍历结束后能退出线程
|
||||||
subdomain = self.subdomainq.get() # 从队列中获取域名
|
subdomain = self.subdomainq.get() # 从队列中获取域名
|
||||||
cname = get_cname(subdomain)
|
self.worker(subdomain)
|
||||||
maindomain = get_maindomain(cname)
|
self.subdomainq.task_done()
|
||||||
if cname is None:
|
|
||||||
continue
|
|
||||||
for fingerprint in self.fingerprints:
|
|
||||||
cnames = fingerprint.get('cname')
|
|
||||||
if maindomain not in cnames:
|
|
||||||
continue
|
|
||||||
responses = fingerprint.get('response')
|
|
||||||
self.compare(subdomain, cname, responses)
|
|
||||||
|
|
||||||
def progress(self):
|
def progress(self):
|
||||||
while not self.subdomainq.empty():
|
# 设置进度
|
||||||
done = self.bar.total - self.subdomainq.qsize()
|
bar = tqdm()
|
||||||
self.bar.n = done
|
bar.total = len(self.subdomains)
|
||||||
self.bar.update()
|
bar.desc = 'Progress'
|
||||||
self.bar.close()
|
bar.ncols = True
|
||||||
|
while True:
|
||||||
|
done = bar.total - self.subdomainq.qsize()
|
||||||
|
bar.n = done
|
||||||
|
bar.update()
|
||||||
|
if done == bar.total: # 完成队列中所有子域的检查退出
|
||||||
|
break
|
||||||
|
bar.close()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
@@ -133,22 +143,15 @@ class Takeover(Module):
|
|||||||
# 创建待检查的子域队列
|
# 创建待检查的子域队列
|
||||||
for domain in self.subdomains:
|
for domain in self.subdomains:
|
||||||
self.subdomainq.put(domain)
|
self.subdomainq.put(domain)
|
||||||
# 设置进度
|
|
||||||
self.bar.total = self.subdomainq.qsize()
|
|
||||||
self.bar.desc = 'Progress'
|
|
||||||
self.bar.ncols = True
|
|
||||||
# 进度线程
|
|
||||||
threads = []
|
|
||||||
thread = Thread(target=self.progress, daemon=True)
|
|
||||||
thread.start()
|
|
||||||
threads.append(thread)
|
|
||||||
# 检查线程
|
# 检查线程
|
||||||
for _ in range(self.thread):
|
for _ in range(self.thread):
|
||||||
thread = Thread(target=self.check, daemon=True)
|
check_thread = Thread(target=self.check, daemon=True)
|
||||||
thread.start()
|
check_thread.start()
|
||||||
threads.append(thread)
|
# 进度线程
|
||||||
for thread in threads:
|
progress_thread = Thread(target=self.progress, daemon=True)
|
||||||
thread.join()
|
progress_thread.start()
|
||||||
|
|
||||||
|
self.subdomainq.join()
|
||||||
self.save()
|
self.save()
|
||||||
else:
|
else:
|
||||||
logger.log('FATAL', f'获取域名失败')
|
logger.log('FATAL', f'获取域名失败')
|
||||||
|
|||||||
Reference in New Issue
Block a user