This commit is contained in:
shmilylty
2019-08-16 19:13:19 +08:00
parent 8d46ce0862
commit f52768632a
50 changed files with 161 additions and 162 deletions
+7 -7
View File
@@ -29,22 +29,22 @@ class CensysAPI(Query):
resp = self.post(self.addr, json=data, auth=(self.id, self.secret)) resp = self.post(self.addr, json=data, auth=(self.id, self.secret))
if not resp: if not resp:
return return
resp_json = resp.json() data = resp.json()
status = resp_json.get('status') status = data.get('status')
if status != 'ok': if status != 'ok':
logger.log('ALERT', status) logger.log('ALERT', status)
return return
subdomains_find = self.match(self.domain, str(resp_json)) subdomains = self.match(self.domain, str(data))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
pages = resp_json.get('metadata').get('pages') pages = data.get('metadata').get('pages')
for page in range(2, pages + 1): for page in range(2, pages + 1):
time.sleep(self.delay) time.sleep(self.delay)
data['page'] = page data['page'] = page
resp = self.post(self.addr, json=data, auth=(self.id, self.secret)) resp = self.post(self.addr, json=data, auth=(self.id, self.secret))
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -29,11 +29,11 @@ class CertDBAPI(Query):
if not resp: if not resp:
return return
json = resp.json() json = resp.json()
subdomains_find = utils.match_subdomain(self.domain, str(json)) subdomains = utils.match_subdomain(self.domain, str(json))
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
page_num += 1 page_num += 1
# 默认每次查询最多返回30条 当前条数小于30条说明已经查完 # 默认每次查询最多返回30条 当前条数小于30条说明已经查完
if json.get('count') < 30: if json.get('count') < 30:
@@ -23,9 +23,9 @@ class CertSpotter(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = utils.match_subdomain(self.domain, str(resp.json())) subdomains = utils.match_subdomain(self.domain, str(resp.json()))
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -22,8 +22,8 @@ class Crtsh(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = utils.match_subdomain(self.domain, str(resp.json())) subdomains = utils.match_subdomain(self.domain, str(resp.json()))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -23,8 +23,8 @@ class Entrust(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = utils.match_subdomain(self.domain, str(resp.json())) subdomains = utils.match_subdomain(self.domain, str(resp.json()))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -24,9 +24,9 @@ class Google(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = utils.match_subdomain(self.domain, resp.text) subdomains = utils.match_subdomain(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+6 -6
View File
@@ -1,11 +1,11 @@
""" """
查询域名的NS记录(域名服务器记录,记录该域名由哪台域名服务器解析),检查查出的域名服务器是否开启 查询域名的NS记录(域名服务器记录,记录该域名由哪台域名服务器解析),检查查出的域名服务器是
DNS域传送,如果开启且没做访问控制和身份验证便加以利用获取域名的所有记录 否开启DNS域传送,如果开启且没做访问控制和身份验证便加以利用获取域名的所有记录。
DNS域传送(DNS zone transfer)指的是一台备用域名服务器使用来自主域名服务器的数据刷新自己的域 DNS域传送(DNS zone transfer)指的是一台备用域名服务器使用来自主域名服务器的数据刷新自己
数据库,目的是为了做冗余备份,防止主域名服务器出现故障时 dns 解析不可用。 的域数据库,目的是为了做冗余备份,防止主域名服务器出现故障时 dns 解析不可用。
当主服务器开启DNS域传送同时又对来请求的备用服务器未作访问控制和身份验证便可以利用此漏洞获取某个 当主服务器开启DNS域传送同时又对来请求的备用服务器未作访问控制和身份验证便可以利用此漏洞获
域的所有记录。 取某个域的所有记录。
""" """
import dns.resolver import dns.resolver
import dns.zone import dns.zone
-1
View File
@@ -10,7 +10,6 @@ class CheckCDX(Module):
""" """
检查crossdomain.xml文件收集子域名 检查crossdomain.xml文件收集子域名
""" """
def __init__(self, domain: str): def __init__(self, domain: str):
Module.__init__(self) Module.__init__(self)
self.domain = self.register(domain) self.domain = self.register(domain)
+2 -2
View File
@@ -31,8 +31,8 @@ class CheckCert(Module):
except Exception as e: except Exception as e:
logger.log('ERROR', e) logger.log('ERROR', e)
return return
subdomains_find = utils.match_subdomain(self.domain, str(cert_dict)) subdomains = utils.match_subdomain(self.domain, str(cert_dict))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+4 -2
View File
@@ -25,8 +25,10 @@ class CheckCSP(Module):
正则匹配响应头中的内容安全策略字段以发现子域名 正则匹配响应头中的内容安全策略字段以发现子域名
""" """
if not self.header: if not self.header:
urls = [f'http://{self.domain}', f'https://{self.domain}', urls = [f'http://{self.domain}',
f'http://www.{self.domain}', f'https://www.{self.domain}'] f'https://{self.domain}',
f'http://www.{self.domain}',
f'https://www.{self.domain}']
response = None response = None
for url in urls: for url in urls:
self.header = self.get_header() self.header = self.get_header()
+2 -2
View File
@@ -26,10 +26,10 @@ class ArchiveCrawl(Crawl):
for resp in cdx.iter(url, limit=limit): for resp in cdx.iter(url, limit=limit):
if resp.data.get('status') not in ['301', '302']: if resp.data.get('status') not in ['301', '302']:
url = resp.data.get('url') url = resp.data.get('url')
subdomains_find = self.match(self.register(domain), subdomains = self.match(self.register(domain),
url + resp.text) url + resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -27,9 +27,9 @@ class CommonCrawl(Crawl):
for resp in tqdm(cdx.iter(url, limit=limit), total=limit): for resp in tqdm(cdx.iter(url, limit=limit), total=limit):
if resp.data.get('status') not in ['301', '302']: if resp.data.get('status') not in ['301', '302']:
subdomains_find = self.match(self.register(domain), resp.text) subdomains = self.match(self.register(domain), resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -24,8 +24,8 @@ class BinaryEdgeAPI(Query):
resp = self.get(url) resp = self.get(url)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -21,9 +21,9 @@ class BufferOver(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -21,9 +21,9 @@ class Chinaz(Query):
resp = self.get(self.addr) resp = self.get(self.addr)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -23,9 +23,9 @@ class ChinazAPI(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -23,9 +23,9 @@ class CirclAPI(Query):
resp = self.get(self.addr + self.domain, auth=(self.user, self.pwd)) resp = self.get(self.addr + self.domain, auth=(self.user, self.pwd))
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+4 -4
View File
@@ -54,13 +54,13 @@ class DNSdb(Query):
resp = self.get(url) resp = self.get(url)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
else: else:
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -26,9 +26,9 @@ class DNSdbAPI(Query):
if not resp: if not resp:
return return
if resp.status_code == 200: if resp.status_code == 200:
subdomains_find = utils.match_subdomain(self.domain, resp.text) subdomains = utils.match_subdomain(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -28,10 +28,10 @@ class DNSdumpster(Query):
resp = self.post(self.addr, data) resp = self.post(self.addr, data)
if not resp: if not resp:
return return
subdomains_find = utils.match_subdomain(self.domain, resp.text) subdomains = utils.match_subdomain(self.domain, resp.text)
if subdomains_find: if subdomains:
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -21,10 +21,10 @@ class HackerTarget(Query):
if not resp: if not resp:
return return
if resp.status_code == 200: if resp.status_code == 200:
subdomains_find = utils.match_subdomain(self.domain, resp.text) subdomains = utils.match_subdomain(self.domain, resp.text)
if subdomains_find: if subdomains:
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+5 -5
View File
@@ -26,14 +26,14 @@ class IPv4InfoAPI(Query):
return return
if resp.status_code != 200: if resp.status_code != 200:
break # 请求不正常通常网络是有问题,不再继续请求下去 break # 请求不正常通常网络是有问题,不再继续请求下去
resp_json = resp.json() data = resp.json()
subdomains_find = self.match(self.domain, str(resp_json)) subdomains = self.match(self.domain, str(data))
if not subdomains_find: if not subdomains:
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
# 不直接使用subdomains是因为可能里面会出现不符合标准的子域名 # 不直接使用subdomains是因为可能里面会出现不符合标准的子域名
subdomains = resp_json.get('Subdomains') subdomains = data.get('Subdomains')
if subdomains: if subdomains:
# ipv4info子域查询接口每次最多返回300个 用来判断是否还有下一页 # ipv4info子域查询接口每次最多返回300个 用来判断是否还有下一页
if len(subdomains) < 300: if len(subdomains) < 300:
+3 -3
View File
@@ -46,11 +46,11 @@ class NetCraft(Query):
resp = self.get(self.addr + last, params) resp = self.get(self.addr + last, params)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
if 'Next page' not in resp.text: # 搜索页面没有出现下一页时停止搜索 if 'Next page' not in resp.text: # 搜索页面没有出现下一页时停止搜索
break break
last = re.search(r'&last=.*' + self.domain, resp.text).group(0) last = re.search(r'&last=.*' + self.domain, resp.text).group(0)
+3 -3
View File
@@ -25,10 +25,10 @@ class PTRArchive(Query):
if not resp: if not resp:
return return
if resp.status_code == 200: if resp.status_code == 200:
subdomains_find = utils.match_subdomain(self.domain, resp.text) subdomains = utils.match_subdomain(self.domain, resp.text)
if subdomains_find: if subdomains:
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+2 -2
View File
@@ -21,9 +21,9 @@ class Riddler(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -32,10 +32,10 @@ class Robtex(Query):
resp = self.get(url) resp = self.get(url)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
if subdomains_find: if subdomains:
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
@@ -26,10 +26,10 @@ class SecurityTrailsAPI(Query):
if not resp: if not resp:
return return
prefixs = resp.json()['subdomains'] prefixs = resp.json()['subdomains']
subdomains_find = [f'{prefix}.{self.domain}' for prefix in prefixs] subdomains = [f'{prefix}.{self.domain}' for prefix in prefixs]
if subdomains_find: if subdomains:
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -26,11 +26,11 @@ class SiteDossier(Query):
resp = self.get(url) resp = self.get(url)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
# 搜索页面没有出现下一页时停止搜索 # 搜索页面没有出现下一页时停止搜索
if 'Show next 100 items' not in resp.text: if 'Show next 100 items' not in resp.text:
break break
+2 -2
View File
@@ -25,9 +25,9 @@ class ThreatCrowd(Query):
return return
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+3 -3
View File
@@ -60,9 +60,9 @@ class BruteSRV(Module):
for result in results: for result in results:
if result: if result:
for answer in result: for answer in result:
subdomain = utils.match_subdomain(self.domain, answer.host) subdomains = utils.match_subdomain(self.domain, answer.host)
if subdomain: if subdomains:
self.subdomains = self.subdomains.union(subdomain) self.subdomains = self.subdomains.union(subdomains)
else: else:
logger.log('DEBUG', f'{answer.host}不是{self.domain}的子域') logger.log('DEBUG', f'{answer.host}不是{self.domain}的子域')
if not len(self.subdomains): if not len(self.subdomains):
+3 -5
View File
@@ -24,11 +24,9 @@ class RiskIQ(Query):
auth=(self.user, self.key)) auth=(self.user, self.key))
if not resp: if not resp:
return return
resp_json = resp.json() data = resp.json()
subnames = resp_json.get('subdomains') names = data.get('subdomains')
if subnames: self.subdomains = set(map(lambda sub: f'{sub}.{self.domain}', names))
self.subdomains = set(map(lambda sub: f'{sub}.{self.domain}',
subnames))
def run(self): def run(self):
""" """
@@ -23,8 +23,8 @@ class ThreatBookAPI(Query):
resp = self.post(self.addr, params) resp = self.post(self.addr, params)
if not resp: if not resp:
return return
subdomain_find = self.match(self.domain, str(resp.json())) subdomains = self.match(self.domain, str(resp.json()))
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
@@ -23,9 +23,9 @@ class ThreatMiner(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+6 -6
View File
@@ -30,19 +30,19 @@ class VirusTotal(Query):
resp = self.get(url=self.addr.format(self.domain), params=params) resp = self.get(url=self.addr.format(self.domain), params=params)
if not resp: if not resp:
return return
resp_json = resp.json() data = resp.json()
subdomain_find = set() subdomains = set()
datas = resp_json.get('data') datas = data.get('data')
if datas: if datas:
for data in datas: for data in datas:
subdomain = data.get('id') subdomain = data.get('id')
if subdomain: if subdomain:
subdomain_find.add(subdomain) subdomains.add(subdomain)
else: else:
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
meta = resp_json.get('meta') meta = data.get('meta')
if meta: if meta:
next_cursor = meta.get('cursor') next_cursor = meta.get('cursor')
else: else:
@@ -21,9 +21,9 @@ class VirusTotalAPI(Query):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
resp_json = resp.json() data = resp.json()
subdomain_find = set(resp_json.get('subdomains')) subdomains = set(data.get('subdomains'))
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
def run(self): def run(self):
""" """
+4 -4
View File
@@ -30,14 +30,14 @@ class Ask(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += 1 self.page_num += 1
if '>Next<' not in resp.text: if '>Next<' not in resp.text:
break break
+5 -5
View File
@@ -50,17 +50,17 @@ class Baidu(Search):
return return
if len(domain) > 12: # 解决百度搜索结果中域名过长会显示不全的问题 if len(domain) > 12: # 解决百度搜索结果中域名过长会显示不全的问题
# 获取百度跳转URL响应头的Location字段获取直链 # 获取百度跳转URL响应头的Location字段获取直链
subdomains_find = self.redirect_match(domain, resp.text) subdomains = self.redirect_match(domain, resp.text)
else: else:
subdomains_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomains_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += self.per_page_num self.page_num += self.per_page_num
# 搜索页面没有出现下一页时停止搜索 # 搜索页面没有出现下一页时停止搜索
if '&pn={next_pn}&'.format(next_pn=self.page_num) not in resp.text: if '&pn={next_pn}&'.format(next_pn=self.page_num) not in resp.text:
+4 -4
View File
@@ -36,15 +36,15 @@ class Bing(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomains_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
# 搜索页面没有出现下一页时停止搜索 # 搜索页面没有出现下一页时停止搜索
if '<div class="sw_next>' not in resp.text: if '<div class="sw_next>' not in resp.text:
break break
+4 -4
View File
@@ -36,15 +36,15 @@ class BingAPI(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(domain, str(resp.json())) subdomains = self.match(domain, str(resp.json()))
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomains_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += self.per_page_num self.page_num += self.per_page_num
if self.page_num >= self.limit_num: # 搜索条数限制 if self.page_num >= self.limit_num: # 搜索条数限制
break break
+4 -4
View File
@@ -30,14 +30,14 @@ class DuckDuckGO(Search):
resp = self.post(self.addr, data) resp = self.post(self.addr, data)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
try: try:
s = re.findall(r'name="s" value="(\d.*)"', resp.text)[-1] s = re.findall(r'name="s" value="(\d.*)"', resp.text)[-1]
dc = re.findall(r'name="dc" value="(\d.*)"', resp.text) dc = re.findall(r'name="dc" value="(\d.*)"', resp.text)
+4 -4
View File
@@ -32,13 +32,13 @@ class Exalead(Search):
resp = self.get(url=self.addr, params=params) resp = self.get(url=self.addr, params=params)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += self.per_page_num self.page_num += self.per_page_num
if self.page_num > 1999: if self.page_num > 1999:
break break
+3 -3
View File
@@ -32,10 +32,10 @@ class FoFa(Search):
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) subdomains = self.match(self.domain, resp.text)
if not subdomain_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += 1 self.page_num += 1
def run(self): def run(self):
+4 -4
View File
@@ -40,13 +40,13 @@ class Google(Search):
resp = self.get(url=self.addr, params=payload) resp = self.get(url=self.addr, params=payload)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
page_num += per_page_num page_num += per_page_num
if 'start=' + str(page_num) not in resp.text: if 'start=' + str(page_num) not in resp.text:
break break
+4 -4
View File
@@ -35,13 +35,13 @@ class GoogleAPI(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, str(resp.json())) subdomains = self.match(domain, str(resp.json()))
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += self.per_page_num self.page_num += self.per_page_num
if self.page_num > 100: # 免费的API只能查询前100条结果 if self.page_num > 100: # 免费的API只能查询前100条结果
break break
+4 -4
View File
@@ -25,11 +25,11 @@ class ShodanAPI(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomain_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
if not subdomain_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if subdomain_find: if subdomains:
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
page += 1 page += 1
def run(self): def run(self):
+4 -4
View File
@@ -31,14 +31,14 @@ class So(Search):
resp = self.get(url=self.addr, params=payload) resp = self.get(url=self.addr, params=payload)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
page_num += 1 page_num += 1
# 搜索页面没有出现下一页时停止搜索 # 搜索页面没有出现下一页时停止搜索
if '<a id="snext"' not in resp.text: if '<a id="snext"' not in resp.text:
+4 -4
View File
@@ -28,14 +28,14 @@ class Sogou(Search):
resp = self.get(self.addr, payload) resp = self.get(self.addr, payload)
if not resp: if not resp:
return return
subdomain_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomain_find: if not subdomains:
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomain_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
self.page_num += 1 self.page_num += 1
# 搜索页面没有出现下一页时停止搜索 # 搜索页面没有出现下一页时停止搜索
if '<a id="sogou_next"' not in resp.text: if '<a id="sogou_next"' not in resp.text:
+4 -4
View File
@@ -36,15 +36,15 @@ class Yahoo(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomains_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
if '>Next</a>' not in resp.text: # 搜索页面没有出现下一页时停止搜索 if '>Next</a>' not in resp.text: # 搜索页面没有出现下一页时停止搜索
break break
self.page_num += self.per_page_num self.page_num += self.per_page_num
+4 -4
View File
@@ -36,15 +36,15 @@ class Yandex(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomains_find = self.match(domain, resp.text) subdomains = self.match(domain, resp.text)
if not subdomains_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
if not full_search: if not full_search:
# 搜索中发现搜索出的结果有完全重复的结果就停止搜索 # 搜索中发现搜索出的结果有完全重复的结果就停止搜索
if subdomains_find.issubset(self.subdomains): if subdomains.issubset(self.subdomains):
break break
# 合并搜索子域名搜索结果 # 合并搜索子域名搜索结果
self.subdomains = self.subdomains.union(subdomains_find) self.subdomains = self.subdomains.union(subdomains)
if '>next</a>' not in resp.text: # 搜索页面没有出现下一页时停止搜索 if '>next</a>' not in resp.text: # 搜索页面没有出现下一页时停止搜索
break break
self.page_num += 1 self.page_num += 1
+6 -6
View File
@@ -25,12 +25,12 @@ class ZoomEyeAPI(Search):
if not resp: if not resp:
logger.log('FETAL', f'登录失败无法获取{self.source}的访问token') logger.log('FETAL', f'登录失败无法获取{self.source}的访问token')
return return
resp_json = resp.json() data = resp.json()
if resp.status_code == 200: if resp.status_code == 200:
logger.log('DEBUG', f'{self.source}模块登录成功') logger.log('DEBUG', f'{self.source}模块登录成功')
return resp_json.get('access_token') return data.get('access_token')
else: else:
logger.log('ALERT', resp_json.get('message')) logger.log('ALERT', data.get('message'))
exit(1) exit(1)
def search(self): def search(self):
@@ -48,10 +48,10 @@ class ZoomEyeAPI(Search):
resp = self.get(self.addr, params) resp = self.get(self.addr, params)
if not resp: if not resp:
return return
subdomain_find = self.match(self.domain, resp.text) subdomains = self.match(self.domain, resp.text)
if not subdomain_find: # 搜索没有发现子域名则停止搜索 if not subdomains: # 搜索没有发现子域名则停止搜索
break break
self.subdomains = self.subdomains.union(subdomain_find) self.subdomains = self.subdomains.union(subdomains)
page_num += 1 page_num += 1
if page_num > 500: if page_num > 500:
break break