From 5eb8cd5bb961024ee3bd5f91889c5146ff75da3c Mon Sep 17 00:00:00 2001 From: shmilylty Date: Fri, 18 Nov 2022 17:44:33 +0800 Subject: [PATCH] fixed #275 --- brute.py | 5 +---- common/utils.py | 53 +++++++++++++++++++++++++++-------------------- config/default.py | 2 ++ config/setting.py | 2 ++ oneforall.py | 4 +--- 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/brute.py b/brute.py index 2c0593e..ce46f58 100644 --- a/brute.py +++ b/brute.py @@ -342,7 +342,6 @@ class Brute(Module): self.ips_times = dict() # IP集合出现次数 self.enable_wildcard = None # 当前域名是否使用泛解析 self.quite = False - self.in_china = None def gen_brute_dict(self, domain): logger.log('INFOR', f'Generating dictionary for {domain}') @@ -425,7 +424,7 @@ class Brute(Module): if self.enable_wildcard: wildcard_ips, wildcard_ttl = wildcard.collect_wildcard_record(domain, ns_ip_list) - ns_path = utils.get_ns_path(self.in_china, self.enable_wildcard, ns_ip_list) + ns_path = utils.get_ns_path(settings.use_china_nameservers, self.enable_wildcard, ns_ip_list) dict_set = self.gen_brute_dict(domain) @@ -459,8 +458,6 @@ class Brute(Module): def run(self): logger.log('INFOR', f'Start running {self.source} module') - if self.in_china is None: - _, self.in_china = utils.get_net_env() self.domains = utils.get_domains(self.target, self.targets) for self.domain in self.domains: self.results = list() # 置空 diff --git a/common/utils.py b/common/utils.py index 35a3228..395e075 100644 --- a/common/utils.py +++ b/common/utils.py @@ -497,28 +497,35 @@ def delete_file(*paths): @tenacity.retry(stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_fixed(2)) def check_net(): - urls = ['http://ip-api.com/json/'] - url = random.choice(urls) - header = {'User_Agent': 'curl'} - timeout = settings.request_timeout_second - verify = settings.request_ssl_verify - logger.log('DEBUG', f'Trying to access {url}') - session = requests.Session() - session.trust_env = False - try: - rsp = session.get(url, headers=header, timeout=timeout, verify=verify) - except Exception as e: - logger.log('ERROR', e.args) - logger.log('ALERT', 'Unable to access Internet, retrying...') - raise e - logger.log('DEBUG', 'Access to Internet OK') - country = rsp.json().get('country').lower() - if country in ['cn', 'china']: - logger.log('DEBUG', f'The computer is located in China') - return True, True - else: - logger.log('DEBUG', f'The computer is not located in China') - return True, False + times = 0 + while True: + times += 1 + urls = ['https://www.baidu.com', 'https://www.bing.com', + 'https://www.cloudflare.com', 'https://www.akamai.com/', + 'https://www.fastly.com/', 'https://www.amazon.com/'] + url = random.choice(urls) + logger.log('DEBUG', f'Trying to access {url}') + header = get_random_header() + proxy = get_proxy() + timeout = settings.request_timeout_second + verify = settings.request_ssl_verify + session = requests.Session() + session.trust_env = False + session = requests.Session() + session.trust_env = False + try: + rsp = session.get(url, headers=header, proxies=proxy, + timeout=timeout, verify=verify) + except Exception as e: + logger.log('ERROR', e.args) + logger.log('ALERT', f'Unable to access Internet, retrying for the {times}th time') + else: + if rsp.status_code == 200: + logger.log('DEBUG', 'Access to Internet OK') + return True + if times >= 3: + logger.log('ALERT', 'Access to Internet failed') + return False def check_dep(): @@ -540,7 +547,7 @@ def get_net_env(): except Exception as e: logger.log('DEBUG', e.args) logger.log('ALERT', 'Please check your network environment.') - return False, None + return False return result diff --git a/config/default.py b/config/default.py index a0e8e5f..c2ac791 100644 --- a/config/default.py +++ b/config/default.py @@ -18,6 +18,7 @@ result_save_dir = relative_directory.joinpath('results') # 结果保存目录 temp_save_dir = result_save_dir.joinpath('temp') # OneForAll入口参数设置 +enable_check_network = True # 开启网络环境检查 enable_check_version = True # 开启最新版本检查 enable_brute_module = True # 使用爆破模块(默认True) enable_dns_resolve = True # 使用DNS解析子域(默认True) @@ -54,6 +55,7 @@ brute_socket_num = 1 # 爆破时每个进程下的socket数量 brute_resolve_num = 15 # 解析失败时尝试换名称服务器重查次数 # 爆破所使用的字典路径(默认None则使用data/subdomains.txt,自定义字典请使用绝对路径) brute_wordlist_path = None +use_china_nameservers = True # 使用中国域名服务器 如果你所在网络不在中国则建议设置False # 域名的权威DNS名称服务器的保存路径 当域名开启了泛解析时会使用该名称服务器来进行A记录查询 authoritative_dns_path = data_storage_dir.joinpath('authoritative_dns.txt') enable_recursive_brute = False # 是否使用递归爆破(默认False) diff --git a/config/setting.py b/config/setting.py index 47ae40e..ab0a1e1 100644 --- a/config/setting.py +++ b/config/setting.py @@ -10,6 +10,7 @@ relative_directory = pathlib.Path(__file__).parent.parent # OneForAll代码相 data_storage_dir = relative_directory.joinpath('data') # 数据存放目录 # OneForAll入口参数设置 +enable_check_network = True # 开启网络环境检查 enable_check_version = True # 开启最新版本检查 enable_brute_module = True # 使用爆破模块(默认True) enable_dns_resolve = True # 使用DNS解析子域(默认True) @@ -38,6 +39,7 @@ enable_partial_module = [] # 启用部分收集模块 必须禁用enable_all_mo brute_concurrent_num = 2000 # 爆破时并发查询数量(默认2000,最大推荐10000) # 爆破所使用的字典路径(默认None则使用data/subdomains.txt,自定义字典请使用绝对路径) brute_wordlist_path = None +use_china_nameservers = True # 使用中国域名服务器 如果你所在网络不在中国则建议设置False enable_recursive_brute = False # 是否使用递归爆破(默认False) brute_recursive_depth = 2 # 递归爆破深度(默认2层) # 爆破下一层子域所使用的字典路径(默认None则使用data/subnames_next.txt,自定义字典请使用绝对路径) diff --git a/oneforall.py b/oneforall.py index 2ea09b2..6d1b07e 100644 --- a/oneforall.py +++ b/oneforall.py @@ -98,7 +98,6 @@ class OneForAll(object): self.domains = set() # All domains that are to be collected self.data = list() # The subdomain results of the current domain self.datas = list() # All subdomain results of the domain - self.in_china = None self.access_internet = False self.enable_wildcard = False @@ -166,7 +165,6 @@ class OneForAll(object): # may cause other network tasks to be error brute = Brute(self.domain, word=True, export=False) brute.enable_wildcard = self.enable_wildcard - brute.in_china = self.in_china brute.quite = True brute.run() @@ -237,7 +235,7 @@ class OneForAll(object): logger.log('DEBUG', 'Python ' + utils.python_version()) logger.log('DEBUG', 'OneForAll ' + version) utils.check_dep() - self.access_internet, self.in_china = utils.get_net_env() + self.access_internet = utils.get_net_env() if self.access_internet and settings.enable_check_version: utils.check_version(version) logger.log('INFOR', 'Start running OneForAll')