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