mirror of
https://github.com/shmilylty/OneForAll.git
synced 2026-08-26 04:47:48 +08:00
优化srv模块
This commit is contained in:
@@ -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()
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user