优化srv模块

This commit is contained in:
Jing Ling
2020-08-21 23:49:29 +08:00
parent f344d7abcc
commit d9c629d49e
2 changed files with 30 additions and 42 deletions
+25 -42
View File
@@ -2,7 +2,6 @@
通过枚举域名常见的SRV记录并做查询来发现子域 通过枚举域名常见的SRV记录并做查询来发现子域
""" """
import json
import queue import queue
import threading import threading
@@ -15,38 +14,30 @@ class BruteSRV(Module):
def __init__(self, domain): def __init__(self, domain):
Module.__init__(self) Module.__init__(self)
self.domain = domain self.domain = domain
self.module = 'dnsquery' self.module = 'BruteSRV'
self.source = "BruteSRV" self.source = "BruteSRV"
self.qtype = 'SRV' # 利用的DNS记录的SRV记录查询子域 self.qtype = 'SRV' # 利用的DNS记录的SRV记录查询子域
self.thread_num = 10 self.thread_num = 20
self.names_que = queue.Queue() self.names_queue = queue.Queue()
self.answers_que = queue.Queue() self.answers_queue = queue.Queue()
def gen_names(self): def fill_queue(self):
path = data_storage_dir.joinpath('srv_prefixes.json') path = data_storage_dir.joinpath('srv_prefixes.json')
with open(path, encoding='utf-8', errors='ignore') as file: prefixes = utils.load_json(path)
prefixes = json.load(file) for prefix in prefixes:
names = map(lambda prefix: prefix + self.domain, prefixes) self.names_queue.put(prefix + self.domain)
for name in names:
self.names_que.put(name)
def brute(self):
"""
枚举域名的SRV记录
"""
self.gen_names()
def do_brute(self):
for num in range(self.thread_num): for num in range(self.thread_num):
thread = BruteThread(self.names_que, self.answers_que) thread = BruteThread(self.names_queue, self.answers_queue)
thread.name = f'BruteThread-{num}' thread.name = f'BruteThread-{num}'
thread.daemon = True thread.daemon = True
thread.start() thread.start()
self.names_queue.join()
self.names_que.join() def deal_answers(self):
while not self.answers_queue.empty():
while not self.answers_que.empty(): answer = self.answers_queue.get()
answer = self.answers_que.get()
if answer is None: if answer is None:
continue continue
for item in answer: for item in answer:
@@ -59,7 +50,9 @@ class BruteSRV(Module):
类执行入口 类执行入口
""" """
self.begin() self.begin()
self.brute() self.fill_queue()
self.do_brute()
self.deal_answers()
self.finish() self.finish()
self.save_json() self.save_json()
self.gen_result() self.gen_result()
@@ -67,29 +60,19 @@ class BruteSRV(Module):
class BruteThread(threading.Thread): class BruteThread(threading.Thread):
def __init__(self, names_que, answers_que): def __init__(self, names_queue, answers_queue):
threading.Thread.__init__(self) threading.Thread.__init__(self)
self.names_que = names_que self.names_queue = names_queue
self.answers_que = answers_que self.answers_queue = answers_queue
def run(self): def run(self):
while True: while True:
name = self.names_que.get() name = self.names_queue.get()
answer = utils.dns_query(name, 'SRV') answer = utils.dns_query(name, 'SRV')
self.answers_que.put(answer) self.answers_queue.put(answer)
self.names_que.task_done() self.names_queue.task_done()
def run(domain):
"""
类统一调用入口
:param str domain: 域名
"""
brute = BruteSRV(domain)
brute.run()
if __name__ == '__main__': if __name__ == '__main__':
run('zonetransfer.me') brute = BruteSRV('zonetransfer.me')
# run('example.com') brute.run()
+5
View File
@@ -17,6 +17,7 @@ from brute import Brute
from common import utils, resolve, request from common import utils, resolve, request
from common.database import Database from common.database import Database
from modules.collect import Collect from modules.collect import Collect
from modules.srv import BruteSRV
from modules.finder import Finder from modules.finder import Finder
from modules import iscdn from modules import iscdn
from config import settings from config import settings
@@ -190,6 +191,10 @@ class OneForAll(object):
collect = Collect(self.domain, export=False) collect = Collect(self.domain, export=False)
collect.run() collect.run()
srv = BruteSRV(self.domain)
srv.run()
if self.brute: if self.brute:
# Due to there will be a large number of dns resolution requests, # Due to there will be a large number of dns resolution requests,
# may cause other network tasks to be error # may cause other network tasks to be error