修复resolve标记有误问题

This commit is contained in:
Jing Ling
2020-08-19 02:31:23 +08:00
parent 97f13b3851
commit 113c41f4ae
+44 -39
View File
@@ -25,25 +25,30 @@ def filter_subdomain(data):
return subdomains
def update_data(data, records):
def update_data(data, infos):
"""
更新解析结果
:param list data: 待更新的数据列表
:param dict records: 解析结果字典
:param dict infos: 子域有关结果信息
:return: 更新后的数据列表
"""
logger.log('DEBUG', f'Updating resolved results')
if not records:
if not infos:
logger.log('ERROR', f'No valid resolved result')
return data
for index, items in enumerate(data):
if not items.get('content'):
subdomain = items.get('subdomain')
record = records.get(subdomain)
if record:
items.update(record)
data[index] = items
if items.get('content'):
continue
subdomain = items.get('subdomain')
record = infos.get(subdomain)
if record:
items.update(record)
else:
items['resolve'] = 0
items['alive'] = 0
items['reason'] = 'NORECORD'
data[index] = items
return data
@@ -68,7 +73,7 @@ def save_subdomains(save_path, subdomain_list):
def deal_output(output_path):
logger.log('INFOR', f'Processing resolved results')
records = dict() # 用来记录所有域名解析数据
infos = dict() # 用来记录所有域名有关信息
ip_asn = IPAsnInfo()
ip_geo = IpGeoInfo()
db_path = settings.data_storage_dir.joinpath('ip2region.db')
@@ -82,22 +87,22 @@ def deal_output(output_path):
logger.log('ERROR', e.args)
logger.log('ERROR', f'Error resolve line {line}, skip this line')
continue
record = dict()
record['resolver'] = items.get('resolver')
info = dict()
info['resolver'] = items.get('resolver')
qname = items.get('name')[:-1] # 去除最右边的`.`点号
status = items.get('status')
if status != 'NOERROR':
record['alive'] = 0
record['resolve'] = 0
record['reason'] = status
records[qname] = record
info['alive'] = 0
info['resolve'] = 0
info['reason'] = status
infos[qname] = info
continue
data = items.get('data')
if 'answers' not in data:
record['alive'] = 0
record['resolve'] = 0
record['reason'] = 'NOANSWER'
records[qname] = record
info['alive'] = 0
info['resolve'] = 0
info['reason'] = 'NOANSWER'
infos[qname] = info
continue
flag = False
cname = list()
@@ -130,24 +135,24 @@ def deal_output(output_path):
locs.append(loc)
reg = ip_reg.memory_search(ip).get('region').decode('utf-8')
regs.append(reg)
record['resolve'] = 1
record['reason'] = status
record['cname'] = ','.join(cname)
record['content'] = ','.join(ips)
record['public'] = ','.join(public)
record['ttl'] = ','.join(ttls)
record['cidr'] = ','.join(cidrs)
record['asn'] = ','.join(asns)
record['org'] = ','.join(orgs)
record['ip2location'] = ','.join(locs)
record['ip2region'] = ','.join(regs)
records[qname] = record
info['resolve'] = 1
info['reason'] = status
info['cname'] = ','.join(cname)
info['content'] = ','.join(ips)
info['public'] = ','.join(public)
info['ttl'] = ','.join(ttls)
info['cidr'] = ','.join(cidrs)
info['asn'] = ','.join(asns)
info['org'] = ','.join(orgs)
info['ip2location'] = ','.join(locs)
info['ip2region'] = ','.join(regs)
infos[qname] = info
if not flag:
record['alive'] = 0
record['resolve'] = 0
record['reason'] = 'NOARECORD'
records[qname] = record
return records
info['alive'] = 0
info['resolve'] = 0
info['reason'] = 'NOARECORD'
infos[qname] = info
return infos
def run_resolve(domain, data):
@@ -187,7 +192,7 @@ def run_resolve(domain, data):
utils.call_massdns(massdns_path, save_path, ns_path,
output_path, log_path, quiet_mode=True)
records = deal_output(output_path)
data = update_data(data, records)
infos = deal_output(output_path)
data = update_data(data, infos)
logger.log('INFOR', f'Finished resolve subdomains of {domain}')
return data