添加api检查

This commit is contained in:
shmilylty
2019-08-05 16:00:46 +08:00
parent 8bad8b74d6
commit bf20197631
2 changed files with 134 additions and 127 deletions
@@ -1,59 +1,64 @@
# coding=utf-8 # coding=utf-8
import queue import queue
import config import config
from common.query import Query from common.query import Query
from config import logger
class RiskIQ(Query):
def __init__(self, domain): class RiskIQ(Query):
Query.__init__(self) def __init__(self, domain):
self.domain = self.register(domain) Query.__init__(self)
self.module = 'Intelligence' self.domain = self.register(domain)
self.source = 'RiskIQQuery' self.module = 'Intelligence'
self.addr = 'https://api.passivetotal.org/v2/enrichment/subdomains' self.source = 'RiskIQQuery'
self.username = config.riskiq_api_username self.addr = 'https://api.passivetotal.org/v2/enrichment/subdomains'
self.key = config.riskiq_api_key self.username = config.riskiq_api_username
self.key = config.riskiq_api_key
def query(self):
""" def query(self):
向接口查询子域并做子域匹配 """
""" 向接口查询子域并做子域匹配
self.header = self.get_header() """
self.proxy = self.get_proxy(self.source) self.header = self.get_header()
params = {'query': self.domain} self.proxy = self.get_proxy(self.source)
resp = self.get(url=self.addr, params=params, auth=(self.username, self.key)) params = {'query': self.domain}
if not resp: resp = self.get(url=self.addr, params=params, auth=(self.username, self.key))
return if not resp:
resp_json = resp.json() return
subdomains_find = resp_json.get('subdomains') resp_json = resp.json()
if subdomains_find: subdomains_find = resp_json.get('subdomains')
self.subdomains = set(map(lambda x: x + '.' + self.domain, subdomains_find)) if subdomains_find:
self.subdomains = set(map(lambda x: x + '.' + self.domain, subdomains_find))
def run(self, rx_queue):
""" def run(self, rx_queue):
类执行入口 """
""" 类执行入口
self.begin() """
self.query() if not self.username or not self.key:
self.save_json() logger.log('ERROR', f'{self.source}模块API配置错误')
self.gen_result() logger.log('ALERT', f'不执行{self.source}模块')
self.save_db() return
rx_queue.put(self.results) self.begin()
self.finish() self.query()
self.save_json()
self.gen_result()
def do(domain, rx_queue): # 统一入口名字 方便多线程调用 self.save_db()
""" rx_queue.put(self.results)
类统一调用入口 self.finish()
:param str domain: 域名
:param rx_queue: 结果集队列 def do(domain, rx_queue): # 统一入口名字 方便多线程调用
""" """
query = RiskIQ(domain) 类统一调用入口
query.run(rx_queue)
:param str domain: 域名
:param rx_queue: 结果集队列
if __name__ == '__main__': """
result_queue = queue.Queue() query = RiskIQ(domain)
do('example.com', result_queue) query.run(rx_queue)
if __name__ == '__main__':
result_queue = queue.Queue()
do('example.com', result_queue)
@@ -1,68 +1,70 @@
# coding=utf-8 # coding=utf-8
import base64 import base64
import queue import queue
import time import time
import config import config
from common.search import Search from common.search import Search
from config import logger from config import logger
class FoFa(Search): class FoFa(Search):
def __init__(self, domain): def __init__(self, domain):
Search.__init__(self) Search.__init__(self)
self.domain = domain self.domain = domain
self.module = 'Search' self.module = 'Search'
self.source = 'FoFaSearch' self.source = 'FoFaSearch'
self.addr = 'https://fofa.so/api/v1/search/all' self.addr = 'https://fofa.so/api/v1/search/all'
self.delay = 1 self.delay = 1
self.email = config.fofa_api_email self.email = config.fofa_api_email
self.key = config.fofa_api_key self.key = config.fofa_api_key
def search(self): def search(self):
""" """
发送搜索请求并做子域匹配 发送搜索请求并做子域匹配
""" """
self.page_num = 1 self.page_num = 1
query_base64 = base64.b64encode(f'domain={self.domain}'.encode('utf-8')) query_base64 = base64.b64encode(f'domain={self.domain}'.encode('utf-8'))
while True: while True:
time.sleep(self.delay) time.sleep(self.delay)
self.header = self.get_header() self.header = self.get_header()
self.proxy = self.get_proxy(self.source) self.proxy = self.get_proxy(self.source)
query = {'email': self.email, 'key': self.key, 'qbase64': query_base64, 'page': self.page_num} query = {'email': self.email, 'key': self.key, 'qbase64': query_base64, 'page': self.page_num}
resp = self.get(self.addr, query) resp = self.get(self.addr, query)
if not resp: if not resp:
return return
subdomain_find = self.match(self.domain, resp.text) subdomain_find = self.match(self.domain, resp.text)
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomain_find)
self.page_num += 1 self.page_num += 1
def run(self, rx_queue): def run(self, rx_queue):
""" """
类执行入口 类执行入口
""" """
logger.log('DEBUG', f'开始执行{self.source}模块搜索{self.domain}的子域') if not self.email or not self.key:
logger.log('ERROR', f'{self.source}模块API配置错误')
self.search() logger.log('ALERT', f'不执行{self.source}模块')
return
self.save_json() logger.log('DEBUG', f'开始执行{self.source}模块搜索{self.domain}的子域')
self.gen_result() self.search()
self.save_db() self.save_json()
rx_queue.put(self.results) self.gen_result()
logger.log('DEBUG', f'结束执行{self.source}模块搜索{self.domain}的子域') self.save_db()
rx_queue.put(self.results)
logger.log('DEBUG', f'结束执行{self.source}模块搜索{self.domain}的子域')
def do(domain, rx_queue): # 统一入口名字 方便多线程调用
"""
类统一调用入口 def do(domain, rx_queue): # 统一入口名字 方便多线程调用
"""
:param str domain: 域名 类统一调用入口
:param rx_queue: 结果集队列
""" :param str domain: 域名
search = FoFa(domain) :param rx_queue: 结果集队列
search.run(rx_queue) """
search = FoFa(domain)
search.run(rx_queue)
if __name__ == '__main__':
result_queue = queue.Queue()
do('example.com', result_queue) if __name__ == '__main__':
result_queue = queue.Queue()
do('example.com', result_queue)