mirror of
https://github.com/shmilylty/OneForAll.git
synced 2026-08-26 12:57:50 +08:00
重构异步DNS解析方法 修复DNS解析进度条问题
This commit is contained in:
@@ -37,8 +37,7 @@ def get_ports(port):
|
|||||||
if not ports: # 意外情况
|
if not ports: # 意外情况
|
||||||
logger.log('ERROR', f'指定探测端口范围有误')
|
logger.log('ERROR', f'指定探测端口范围有误')
|
||||||
ports = {80}
|
ports = {80}
|
||||||
if ports == {80}:
|
logger.log('INFOR', f'探测端口范围:{ports}')
|
||||||
logger.log('INFOR', f'探测默认端口范围')
|
|
||||||
return ports
|
return ports
|
||||||
|
|
||||||
|
|
||||||
@@ -208,3 +207,8 @@ async def bulk_get_request(datas, port):
|
|||||||
|
|
||||||
logger.log('INFOR', f'完成异步进行子域的GET请求')
|
logger.log('INFOR', f'完成异步进行子域的GET请求')
|
||||||
return new_datas
|
return new_datas
|
||||||
|
|
||||||
|
|
||||||
|
def run_bulk_query(datas, port):
|
||||||
|
new_datas = asyncio.run(bulk_get_request(datas, port))
|
||||||
|
return new_datas
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import asyncio
|
|||||||
import functools
|
import functools
|
||||||
|
|
||||||
import tqdm
|
import tqdm
|
||||||
import dns.resolver
|
from dns.resolver import Resolver
|
||||||
|
|
||||||
import config
|
import config
|
||||||
from config import logger
|
from config import logger
|
||||||
@@ -12,7 +12,7 @@ def dns_resolver():
|
|||||||
"""
|
"""
|
||||||
dns解析器
|
dns解析器
|
||||||
"""
|
"""
|
||||||
resolver = dns.resolver.Resolver()
|
resolver = Resolver()
|
||||||
resolver.nameservers = config.resolver_nameservers
|
resolver.nameservers = config.resolver_nameservers
|
||||||
resolver.timeout = config.resolver_timeout
|
resolver.timeout = config.resolver_timeout
|
||||||
resolver.lifetime = config.resolver_lifetime
|
resolver.lifetime = config.resolver_lifetime
|
||||||
@@ -35,9 +35,26 @@ async def dns_query_a(hostname):
|
|||||||
return answer
|
return answer
|
||||||
|
|
||||||
|
|
||||||
|
async def aiodns_query_a(hostname):
|
||||||
|
"""
|
||||||
|
异步查询A记录
|
||||||
|
|
||||||
|
:param str hostname: 主机名
|
||||||
|
:return: 查询结果
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
answer = await loop.getaddrinfo(hostname, 'http')
|
||||||
|
except BaseException as exception:
|
||||||
|
logger.log('TRACE', exception.args)
|
||||||
|
answer = exception
|
||||||
|
return answer
|
||||||
|
|
||||||
|
|
||||||
def resolve_callback(future, index, datas):
|
def resolve_callback(future, index, datas):
|
||||||
"""
|
"""
|
||||||
解析结果回调处理
|
解析结果回调处理
|
||||||
|
|
||||||
:param future: future对象
|
:param future: future对象
|
||||||
:param index: 下标
|
:param index: 下标
|
||||||
:param datas: 结果集
|
:param datas: 结果集
|
||||||
@@ -48,8 +65,8 @@ def resolve_callback(future, index, datas):
|
|||||||
datas[index]['ips'] = str(e.args)
|
datas[index]['ips'] = str(e.args)
|
||||||
datas[index]['valid'] = 0
|
datas[index]['valid'] = 0
|
||||||
else:
|
else:
|
||||||
if isinstance(answer, dns.resolver.Answer):
|
if isinstance(answer, list):
|
||||||
ips = {item.address for item in answer}
|
ips = {item[4][0] for item in answer}
|
||||||
datas[index]['ips'] = str(ips)[1:-1]
|
datas[index]['ips'] = str(ips)[1:-1]
|
||||||
else:
|
else:
|
||||||
datas[index]['ips'] = 'Something error'
|
datas[index]['ips'] = 'Something error'
|
||||||
@@ -69,7 +86,7 @@ async def bulk_query_a(datas):
|
|||||||
for i, data in enumerate(datas):
|
for i, data in enumerate(datas):
|
||||||
if not data.get('ips'):
|
if not data.get('ips'):
|
||||||
subdomain = data.get('subdomain')
|
subdomain = data.get('subdomain')
|
||||||
task = asyncio.ensure_future(dns_query_a(subdomain))
|
task = asyncio.ensure_future(aiodns_query_a(subdomain))
|
||||||
task.add_done_callback(functools.partial(resolve_callback,
|
task.add_done_callback(functools.partial(resolve_callback,
|
||||||
index=i,
|
index=i,
|
||||||
datas=datas)) # 回调
|
datas=datas)) # 回调
|
||||||
@@ -85,3 +102,8 @@ async def bulk_query_a(datas):
|
|||||||
# await asyncio.wait(tasks) # 等待所有task完成
|
# await asyncio.wait(tasks) # 等待所有task完成
|
||||||
logger.log('INFOR', '完成异步查询子域的A记录')
|
logger.log('INFOR', '完成异步查询子域的A记录')
|
||||||
return datas
|
return datas
|
||||||
|
|
||||||
|
|
||||||
|
def run_bulk_query(datas):
|
||||||
|
new_datas = asyncio.run(bulk_query_a(datas))
|
||||||
|
return new_datas
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ class IP138(Query):
|
|||||||
self.proxy = self.get_proxy(self.source)
|
self.proxy = self.get_proxy(self.source)
|
||||||
data = {'domain': self.domain}
|
data = {'domain': self.domain}
|
||||||
self.addr = self.addr.format(domain=self.domain)
|
self.addr = self.addr.format(domain=self.domain)
|
||||||
print(self.addr)
|
|
||||||
resp = self.get(self.addr, data=data)
|
resp = self.get(self.addr, data=data)
|
||||||
if not resp:
|
if not resp:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class Takeover(Module):
|
|||||||
bar.update()
|
bar.update()
|
||||||
if done == bar.total: # 完成队列中所有子域的检查退出
|
if done == bar.total: # 完成队列中所有子域的检查退出
|
||||||
break
|
break
|
||||||
bar.close()
|
# bar.close()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
|||||||
Reference in New Issue
Block a user