优化泛解析探测

This commit is contained in:
Jing Ling
2020-04-27 12:50:09 +08:00
parent 06c4f141d5
commit e16916dc94
+7 -6
View File
@@ -26,7 +26,7 @@ from common.module import Module
from config import logger from config import logger
@tenacity.retry(reraise=True, stop=tenacity.stop_after_attempt(3)) @tenacity.retry(stop=tenacity.stop_after_attempt(3))
def do_query_a(domain, resolver): def do_query_a(domain, resolver):
try: try:
answer = resolver.query(domain, 'A') answer = resolver.query(domain, 'A')
@@ -75,9 +75,9 @@ def detect_wildcard(domain, authoritative_ns):
resolver.cache = None resolver.cache = None
try: try:
wildcard = do_query_a(random_subdomain, resolver) wildcard = do_query_a(random_subdomain, resolver)
except Timeout as e: except Exception as e:
logger.log('DEBUG', e.args) logger.log('DEBUG', e.args)
logger.log('ALERT', f'多次探测超时暂且认为{domain}没有使用泛解析') logger.log('ALERT', f'多次探测出错暂且认为{domain}没有使用泛解析')
return False return False
else: else:
return wildcard return wildcard
@@ -166,7 +166,7 @@ def query_domain_ns(domain):
return ns return ns
@tenacity.retry(reraise=True, stop=tenacity.stop_after_attempt(2)) @tenacity.retry(stop=tenacity.stop_after_attempt(2))
def get_wildcard_record(domain, resolver): def get_wildcard_record(domain, resolver):
logger.log('INFOR', f'查询{domain}在权威DNS名称服务器的泛解析记录') logger.log('INFOR', f'查询{domain}在权威DNS名称服务器的泛解析记录')
try: try:
@@ -205,15 +205,16 @@ def collect_wildcard_record(domain, authoritative_ns):
resolver.rotate = True resolver.rotate = True
resolver.cache = None resolver.cache = None
ips = set() ips = set()
ttl = int()
ips_stat = dict() ips_stat = dict()
while True: while True:
token = secrets.token_hex(4) token = secrets.token_hex(4)
random_subdomain = f'{token}.{domain}' random_subdomain = f'{token}.{domain}'
try: try:
ip, ttl = get_wildcard_record(random_subdomain, resolver) ip, ttl = get_wildcard_record(random_subdomain, resolver)
except Timeout as e: except Exception as e:
logger.log('DEBUG', e.args) logger.log('DEBUG', e.args)
logger.log('ALERT', f'多次查询超时将尝试查询新的随机子域') logger.log('ALERT', f'多次查询出错将尝试查询新的随机子域')
continue continue
if ip is None: if ip is None:
continue continue