mirror of
https://github.com/laramies/theHarvester.git
synced 2024-09-21 15:56:44 +08:00
63 lines
2 KiB
Python
63 lines
2 KiB
Python
from discovery.constants import *
|
|
from lib.core import *
|
|
from parsers import securitytrailsparser
|
|
import requests
|
|
import sys
|
|
import time
|
|
|
|
|
|
class search_securitytrail:
|
|
|
|
def __init__(self, word):
|
|
self.word = word
|
|
self.key = Core.security_trails_key()
|
|
if self.key is None:
|
|
raise MissingKey(True)
|
|
self.results = ""
|
|
self.totalresults = ""
|
|
self.database = "https://api.securitytrails.com/v1/"
|
|
self.info = ()
|
|
|
|
def authenticate(self):
|
|
# Method to authenticate API key before sending requests.
|
|
headers = {'APIKEY': self.key}
|
|
url = self.database + 'ping'
|
|
r = requests.get(url, headers=headers).text
|
|
if 'False' in r or 'Invalid authentication' in r:
|
|
print('\tKey could not be authenticated exiting program.')
|
|
sys.exit(-2)
|
|
time.sleep(2)
|
|
|
|
def do_search(self):
|
|
url = ''
|
|
headers = {}
|
|
try:
|
|
# https://api.securitytrails.com/v1/domain/domain.com
|
|
url = self.database + 'domain/' + self.word
|
|
headers = {'APIKEY': self.key}
|
|
r = requests.get(url, headers=headers)
|
|
time.sleep(2) # Not random delay because 2 seconds is required due to rate limit.
|
|
except Exception as e:
|
|
print(e)
|
|
self.results = r.text
|
|
self.totalresults += self.results
|
|
url += '/subdomains' # Get subdomains now.
|
|
r = requests.get(url, headers=headers)
|
|
time.sleep(2)
|
|
self.results = r.text
|
|
self.totalresults += self.results
|
|
|
|
def process(self):
|
|
self.authenticate()
|
|
self.do_search()
|
|
parser = securitytrailsparser.Parser(word=self.word, text=self.totalresults)
|
|
self.info = parser.parse_text()
|
|
# Create parser and set self.info to tuple returned from parsing text.
|
|
print('\tDone Searching Results')
|
|
|
|
def get_ips(self):
|
|
return self.info[0]
|
|
|
|
def get_hostnames(self):
|
|
return self.info[1]
|