1.在结果里添加利用的DNS记录查询类型type,子域层数level。

2.把结果中valid,new放在结果首列
3.修改结果中的elapsed为elapse
This commit is contained in:
Jing Ling
2020-02-29 17:54:40 +08:00
parent 3269a9f724
commit f1f85f9e8c
3 changed files with 31 additions and 24 deletions
+13 -11
View File
@@ -56,22 +56,24 @@ class Database(object):
return return
logger.log('TRACE', f'正在创建{table_name}') logger.log('TRACE', f'正在创建{table_name}')
self.query(f'create table "{table_name}" (' self.query(f'create table "{table_name}" ('
f'type text,'
f'valid int,'
f'new int,'
f'id integer primary key,' f'id integer primary key,'
f'url text,' f'url text,'
f'subdomain text,' f'subdomain text,'
f'port int,' f'port int,'
f'level int,'
f'ips text,' f'ips text,'
f'status int,' f'status int,'
f'reason text,' f'reason text,'
f'valid int,'
f'new int,'
f'title text,' f'title text,'
f'banner text,' f'banner text,'
f'header text,' f'header text,'
f'response text,' f'response text,'
f'module text,' f'module text,'
f'source text,' f'source text,'
f'elapsed float,' f'elapse float,'
f'count int)') f'count int)')
def save_db(self, table_name, results, module_name=None): def save_db(self, table_name, results, module_name=None):
@@ -89,12 +91,12 @@ class Database(object):
try: try:
self.conn.bulk_query( self.conn.bulk_query(
f'insert into "{table_name}" (' f'insert into "{table_name}" ('
f'id, url, subdomain, port, ips, status, reason, valid,' f'id, type, valid, new, url, subdomain, port, level, ips,'
f'new, title, banner, header, response, module, source, ' f'status, reason, title, banner, header, response, module,'
f'elapsed, count)' f'source, elapse, count)'
f'values (:id, :url, :subdomain, :port, :ips, :status,' f'values (:id, :type, :valid, :new, :url, :subdomain,'
f':reason, :valid, :new, :title, :banner, :header,' f':port, :level, :ips, :status, :reason, :title, :banner,'
f':response, :module, :source,:elapsed, :count)', f':header, :response, :module, :source,:elapse, :count)',
results) results)
except Exception as e: except Exception as e:
logger.log('ERROR', e.args) logger.log('ERROR', e.args)
@@ -215,8 +217,8 @@ class Database(object):
:param any valid: 有效性 :param any valid: 有效性
""" """
table_name = table_name.replace('.', '_') table_name = table_name.replace('.', '_')
query = f'select id, url, subdomain, port, ips, status, reason,' \ query = f'select id, type, valid, new, url, subdomain, port, level, ips,' \
f'valid, new, title, banner from "{table_name}"' f' status, reason, title, banner from "{table_name}"'
if valid: if valid:
where = f' where valid = 1' where = f' where valid = 1'
query += where query += where
+17 -11
View File
@@ -28,13 +28,14 @@ class Module(object):
self.delay = config.request_delay # 请求睡眠时延 self.delay = config.request_delay # 请求睡眠时延
self.timeout = config.request_timeout # 请求超时时间 self.timeout = config.request_timeout # 请求超时时间
self.verify = config.request_verify # 请求SSL验证 self.verify = config.request_verify # 请求SSL验证
self.domain = '' # 进行子域名收集的域 self.domain = str() # 当前进行子域名收集的
self.type = 'A' # 对主域进行子域收集时利用的DNS记录查询类型(默认利用A记录)
self.subdomains = set() # 存放发现的子域 self.subdomains = set() # 存放发现的子域
self.records = dict() # 存放子域解析记录 self.records = dict() # 存放子域解析记录
self.results = list() # 存放模块结果 self.results = list() # 存放模块结果
self.start = time.time() # 模块开始执行时间 self.start = time.time() # 模块开始执行时间
self.end = None # 模块结束执行时间 self.end = None # 模块结束执行时间
self.elapsed = None # 模块执行耗时 self.elapse = None # 模块执行耗时
def check(self, *apis): def check(self, *apis):
""" """
@@ -59,9 +60,9 @@ class Module(object):
输出模块结束信息 输出模块结束信息
""" """
self.end = time.time() self.end = time.time()
self.elapsed = round(self.end - self.start, 1) self.elapse = round(self.end - self.start, 1)
logger.log('DEBUG', f'结束执行{self.source}模块收集{self.domain}的子域') logger.log('DEBUG', f'结束执行{self.source}模块收集{self.domain}的子域')
logger.log('INFOR', f'{self.source}模块耗时{self.elapsed}秒发现子域' logger.log('INFOR', f'{self.source}模块耗时{self.elapse}秒发现子域'
f'{len(self.subdomains)}') f'{len(self.subdomains)}')
logger.log('DEBUG', f'{self.source}模块发现{self.domain}的子域\n' logger.log('DEBUG', f'{self.source}模块发现{self.domain}的子域\n'
f'{self.subdomains}') f'{self.subdomains}')
@@ -234,7 +235,7 @@ class Module(object):
result = {'domain': self.domain, result = {'domain': self.domain,
'name': self.module, 'name': self.module,
'source': self.source, 'source': self.source,
'elapsed': self.elapsed, 'elapse': self.elapse,
'count': len(self.subdomains), 'count': len(self.subdomains),
'subdomains': list(self.subdomains), 'subdomains': list(self.subdomains),
'records': self.records} 'records': self.records}
@@ -247,43 +248,48 @@ class Module(object):
""" """
if not len(self.subdomains): # 该模块一个子域都没有发现的情况 if not len(self.subdomains): # 该模块一个子域都没有发现的情况
result = {'id': None, result = {'id': None,
'type': self.type,
'valid': None,
'new': None,
'url': None, 'url': None,
'subdomain': None, 'subdomain': None,
'port': None, 'port': None,
'level': None,
'ips': None, 'ips': None,
'status': None, 'status': None,
'reason': None, 'reason': None,
'valid': None,
'new': None,
'title': None, 'title': None,
'banner': None, 'banner': None,
'header': None, 'header': None,
'response': None, 'response': None,
'module': self.module, 'module': self.module,
'source': self.source, 'source': self.source,
'elapsed': self.elapsed, 'elapse': self.elapse,
'count': 0} 'count': 0}
self.results.append(result) self.results.append(result)
else: else:
for subdomain in self.subdomains: for subdomain in self.subdomains:
url = 'http://' + subdomain url = 'http://' + subdomain
level = subdomain.count('.') - self.domain.count('.')
ips = self.records.get(subdomain) ips = self.records.get(subdomain)
result = {'id': None, result = {'id': None,
'type': self.type,
'valid': None,
'new': None,
'url': url, 'url': url,
'subdomain': subdomain, 'subdomain': subdomain,
'port': None, 'port': None,
'level': level,
'ips': ips, 'ips': ips,
'status': None, 'status': None,
'reason': None, 'reason': None,
'valid': None,
'new': None,
'title': None, 'title': None,
'banner': None, 'banner': None,
'module': self.module, 'module': self.module,
'header': None, 'header': None,
'response': None, 'response': None,
'source': self.source, 'source': self.source,
'elapsed': self.elapsed, 'elapse': self.elapse,
'count': len(self.subdomains)} 'count': len(self.subdomains)}
self.results.append(result) self.results.append(result)
+1 -2
View File
@@ -1,4 +1,3 @@
# coding=utf-8
import re import re
import sys import sys
import time import time
@@ -305,7 +304,7 @@ def export_all(format, path, datas):
row.pop('response') row.pop('response')
row.pop('module') row.pop('module')
row.pop('source') row.pop('source')
row.pop('elapsed') row.pop('elapse')
row.pop('count') row.pop('count')
keys = row.keys() keys = row.keys()
values = row.values() values = row.values()