mirror of
https://github.com/shmilylty/OneForAll.git
synced 2026-08-26 12:57:50 +08:00
减少在处理爆破结果过程中内存的使用
This commit is contained in:
+21
-22
@@ -232,8 +232,8 @@ def collect_wildcard_record(domain, authoritative_ns):
|
|||||||
ips = ips.union(ip)
|
ips = ips.union(ip)
|
||||||
# 统计每个泛解析IP出现次数
|
# 统计每个泛解析IP出现次数
|
||||||
for addr in ip:
|
for addr in ip:
|
||||||
ips_stat.setdefault(addr, 0)
|
count = ips_stat.setdefault(addr, 0)
|
||||||
ips_stat[addr] += 1
|
ips_stat[addr] = count + 1
|
||||||
# 筛选出出现次数2次以上的IP地址
|
# 筛选出出现次数2次以上的IP地址
|
||||||
addrs = list()
|
addrs = list()
|
||||||
for addr, times in ips_stat.items():
|
for addr, times in ips_stat.items():
|
||||||
@@ -327,37 +327,38 @@ def read_result(result_path):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def deal_result(result_list):
|
def deal_result(result_path):
|
||||||
logger.log('INFOR', f'正在处理解析结果')
|
logger.log('INFOR', f'正在处理解析结果')
|
||||||
records = dict() # 用来记录域名解析数据
|
records = dict() # 用来记录域名解析数据
|
||||||
times = dict() # 用来统计IP出现次数
|
times = dict() # 用来统计IP出现次数
|
||||||
for items in result_list:
|
with open(result_path) as fd:
|
||||||
record = dict()
|
for line in fd:
|
||||||
|
line = line.strip()
|
||||||
|
try:
|
||||||
|
items = json.loads(line)
|
||||||
|
except Exception as e:
|
||||||
|
logger.log('ERROR', e.args)
|
||||||
|
logger.log('ERROR', f'解析行{line}出错跳过解析该行')
|
||||||
|
continue
|
||||||
qname = items.get('name')[:-1] # 去出最右边的`.`点号
|
qname = items.get('name')[:-1] # 去出最右边的`.`点号
|
||||||
record['resolver'] = items.get('resolver')
|
|
||||||
status = items.get('status')
|
status = items.get('status')
|
||||||
record['reason'] = status
|
|
||||||
records[qname] = record
|
|
||||||
if status != 'NOERROR':
|
if status != 'NOERROR':
|
||||||
record['reason'] = status
|
logger.log('TRACE', f'处理{line}时发现{qname}查询结果状态{status}')
|
||||||
record['resolve'] = 0
|
|
||||||
record['alive'] = 0
|
|
||||||
records[qname] = record
|
|
||||||
continue
|
continue
|
||||||
data = items.get('data')
|
data = items.get('data')
|
||||||
if 'answers' not in data:
|
if 'answers' not in data:
|
||||||
record['reason'] = 'NOANSWER'
|
logger.log('TRACE', f'处理{line}时发现{qname}返回的结果无应答')
|
||||||
record['resolve'] = 0
|
|
||||||
record['alive'] = 0
|
|
||||||
records[qname] = record
|
|
||||||
continue
|
continue
|
||||||
answers = data.get('answers')
|
answers = data.get('answers')
|
||||||
flag = False
|
flag = False
|
||||||
|
record = dict()
|
||||||
cname = list()
|
cname = list()
|
||||||
ips = list()
|
ips = list()
|
||||||
public = list()
|
public = list()
|
||||||
ttl = list()
|
ttl = list()
|
||||||
|
resolver = items.get('resolver')
|
||||||
for answer in answers:
|
for answer in answers:
|
||||||
|
logger.log('TRACE', f'处理{line}时发现{qname}返回的应答{answer}无问题')
|
||||||
if answer.get('type') == 'A':
|
if answer.get('type') == 'A':
|
||||||
flag = True
|
flag = True
|
||||||
ttl.append(answer.get('ttl'))
|
ttl.append(answer.get('ttl'))
|
||||||
@@ -365,19 +366,18 @@ def deal_result(result_list):
|
|||||||
ip = answer.get('data')
|
ip = answer.get('data')
|
||||||
ips.append(ip)
|
ips.append(ip)
|
||||||
public.append(utils.ip_is_public(ip))
|
public.append(utils.ip_is_public(ip))
|
||||||
|
record['reason'] = status
|
||||||
record['ttl'] = ttl
|
record['ttl'] = ttl
|
||||||
record['cname'] = cname
|
record['cname'] = cname
|
||||||
record['content'] = ips
|
record['content'] = ips
|
||||||
record['public'] = public
|
record['public'] = public
|
||||||
|
record['resolver'] = resolver
|
||||||
records[qname] = record
|
records[qname] = record
|
||||||
# 取值 如果是首次出现的IP集合 出现次数先赋值0
|
# 取值 如果是首次出现的IP集合 出现次数先赋值0
|
||||||
value = times.setdefault(ip, 0)
|
value = times.setdefault(ip, 0)
|
||||||
times[ip] = value + 1
|
times[ip] = value + 1
|
||||||
if not flag:
|
if not flag:
|
||||||
record['reason'] = 'NOA'
|
logger.log('TRACE', f'处理{line}时发现{qname}返回的应答中没有A记录')
|
||||||
record['resolve'] = 0
|
|
||||||
record['alive'] = 0
|
|
||||||
records[qname] = record
|
|
||||||
return records, times
|
return records, times
|
||||||
|
|
||||||
|
|
||||||
@@ -629,9 +629,8 @@ class Brute(Module):
|
|||||||
concurrent_num=self.concurrent_num)
|
concurrent_num=self.concurrent_num)
|
||||||
logger.log('INFOR', f'结束执行massdns')
|
logger.log('INFOR', f'结束执行massdns')
|
||||||
|
|
||||||
result_data = read_result(output_path)
|
resolved_records, ip_times = deal_result(output_path)
|
||||||
delete_file(dict_path, output_path)
|
delete_file(dict_path, output_path)
|
||||||
resolved_records, ip_times = deal_result(result_data)
|
|
||||||
added_records = add_times(resolved_records, ip_times)
|
added_records = add_times(resolved_records, ip_times)
|
||||||
checked_records, valid_subdomains = check_validity(added_records,
|
checked_records, valid_subdomains = check_validity(added_records,
|
||||||
ip_times,
|
ip_times,
|
||||||
|
|||||||
Reference in New Issue
Block a user