.*?
(.*?)', re.S)
+ #resp is already parsed as json
try:
- links = link_regx.findall(resp)
- for link in links:
- subdomain = link.strip()
- if not subdomain.endswith(self.domain):
- continue
- if subdomain not in self.subdomains and subdomain != self.domain:
- if self.verbose:
- self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
- self.subdomains.append(subdomain.strip())
+ for i in resp['data']:
+ if i['type'] == 'domain':
+ subdomain = i['id']
+ if not subdomain.endswith(self.domain):
+ continue
+ if subdomain not in self.subdomains and subdomain != self.domain:
+ if self.verbose:
+ self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
+ self.subdomains.append(subdomain.strip())
except Exception:
pass
@@ -714,7 +729,6 @@ class ThreatCrowd(enumratorBaseThreaded):
subdomains = subdomains or []
base_url = 'https://www.threatcrowd.org/searchApi/v2/domain/report/?domain={domain}'
self.engine_name = "ThreatCrowd"
- self.lock = threading.Lock()
self.q = q
super(ThreatCrowd, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
return
@@ -753,7 +767,6 @@ class CrtSearch(enumratorBaseThreaded):
subdomains = subdomains or []
base_url = 'https://crt.sh/?q=%25.{domain}'
self.engine_name = "SSL Certificates"
- self.lock = threading.Lock()
self.q = q
super(CrtSearch, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
return
@@ -778,27 +791,33 @@ class CrtSearch(enumratorBaseThreaded):
try:
links = link_regx.findall(resp)
for link in links:
- subdomain = link.strip()
- if not subdomain.endswith(self.domain) or '*' in subdomain:
- continue
+ link = link.strip()
+ subdomains = []
+ if '
' in link:
+ subdomains = link.split('
')
+ else:
+ subdomains.append(link)
- if '@' in subdomain:
- subdomain = subdomain[subdomain.find('@')+1:]
+ for subdomain in subdomains:
+ if not subdomain.endswith(self.domain) or '*' in subdomain:
+ continue
- if subdomain not in self.subdomains and subdomain != self.domain:
- if self.verbose:
- self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
- self.subdomains.append(subdomain.strip())
+ if '@' in subdomain:
+ subdomain = subdomain[subdomain.find('@')+1:]
+
+ if subdomain not in self.subdomains and subdomain != self.domain:
+ if self.verbose:
+ self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
+ self.subdomains.append(subdomain.strip())
except Exception as e:
+ print(e)
pass
-
class PassiveDNS(enumratorBaseThreaded):
def __init__(self, domain, subdomains=None, q=None, silent=False, verbose=True):
subdomains = subdomains or []
base_url = 'https://api.sublist3r.com/search.php?domain={domain}'
self.engine_name = "PassiveDNS"
- self.lock = threading.Lock()
self.q = q
super(PassiveDNS, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
return
@@ -836,8 +855,7 @@ class portscan():
def __init__(self, subdomains, ports):
self.subdomains = subdomains
self.ports = ports
- self.threads = 20
- self.lock = threading.BoundedSemaphore(value=self.threads)
+ self.lock = None
def port_scan(self, host, ports):
openports = []
@@ -857,6 +875,7 @@ class portscan():
print("%s%s%s - %sFound open ports:%s %s%s%s" % (G, host, W, R, W, Y, ', '.join(openports), W))
def run(self):
+ self.lock = threading.BoundedSemaphore(value=20)
for subdomain in self.subdomains:
t = threading.Thread(target=self.port_scan, args=(subdomain, self.ports))
t.start()
@@ -978,6 +997,8 @@ def interactive():
engines = args.engines
if verbose or verbose is None:
verbose = True
+ if args.no_color:
+ no_color()
banner()
res = main(domain, threads, savefile, ports, silent=False, verbose=verbose, enable_bruteforce=enable_bruteforce, engines=engines)