mirror of
https://github.com/laramies/theHarvester.git
synced 2025-02-25 23:13:24 +08:00
126 lines
5.8 KiB
Python
126 lines
5.8 KiB
Python
from lib.core import *
|
|
from parsers import censysparser
|
|
import requests
|
|
|
|
|
|
class SearchCensys:
|
|
|
|
def __init__(self, word, limit):
|
|
self.word = word
|
|
self.urlhost = ""
|
|
self.urlcert = ""
|
|
self.page = ""
|
|
self.resultshosts = ""
|
|
self.resultcerts = ""
|
|
self.total_resultshosts = ""
|
|
self.total_resultscerts = ""
|
|
self.server = 'censys.io'
|
|
self.ips = []
|
|
self.hostnamesall = []
|
|
self.limit = limit
|
|
|
|
def do_searchhosturl(self):
|
|
try:
|
|
headers = {'user-agent': Core.get_user_agent(), 'Accept': '*/*', 'Referer': self.urlhost}
|
|
responsehost = requests.get(self.urlhost, headers=headers)
|
|
self.resultshosts = responsehost.text
|
|
self.total_resultshosts += self.resultshosts
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module downloading pages from Censys - IP search: + {e}')
|
|
|
|
def do_searchcertificateurl(self):
|
|
try:
|
|
headers = {'user-agent': Core.get_user_agent(), 'Accept': '*/*', 'Referer': self.urlcert}
|
|
responsecert = requests.get(self.urlcert, headers=headers)
|
|
self.resultcerts = responsecert.text
|
|
self.total_resultscerts += self.resultcerts
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module downloading pages from Censys - certificates search: {e}')
|
|
|
|
def process(self):
|
|
try:
|
|
self.urlhost = 'https://' + self.server + '/ipv4/_search?q=' + str(self.word) + '&page=1'
|
|
self.urlcert = 'https://' + self.server + '/certificates/_search?q=' + str(self.word) + '&page=1'
|
|
self.do_searchhosturl()
|
|
self.do_searchcertificateurl()
|
|
counter = 2
|
|
pages = censysparser.Parser(self)
|
|
totalpages = pages.search_totalpageshosts()
|
|
pagestosearch = int(self.limit / 25) # 25 results/page
|
|
if totalpages <= pagestosearch:
|
|
while counter <= totalpages:
|
|
try:
|
|
self.page = str(counter)
|
|
self.urlhost = 'https://' + self.server + '/ipv4/_search?q=' + str(self.word) + '&page=' + str(
|
|
self.page)
|
|
print('\tSearching Censys IP results page ' + self.page + '.')
|
|
self.do_searchhosturl()
|
|
counter += 1
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module requesting the pages: {e}')
|
|
else:
|
|
while counter <= pagestosearch:
|
|
try:
|
|
self.page = str(counter)
|
|
self.urlhost = 'https://' + self.server + '/ipv4/_search?q=' + str(self.word) + '&page=' + str(
|
|
self.page)
|
|
print(f'\tSearching results page {self.page}.')
|
|
self.do_searchhosturl()
|
|
counter += 1
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module requesting the pages: {e}')
|
|
counter = 2
|
|
totalpages = pages.search_totalpagescerts()
|
|
if totalpages <= pagestosearch:
|
|
while counter <= totalpages:
|
|
try:
|
|
self.page = str(counter)
|
|
self.urlhost = 'https://' + self.server + '/certificates/_search?q=' + str(
|
|
self.word) + '&page=' + str(self.page)
|
|
print(f'\tSearching Censys certificates results page {self.page}.')
|
|
self.do_searchcertificateurl()
|
|
counter += 1
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module requesting the pages: {e}')
|
|
else:
|
|
while counter <= pagestosearch:
|
|
try:
|
|
self.page = str(counter)
|
|
self.urlhost = 'https://' + self.server + '/ipv4/_search?q=' + str(self.word) + '&page=' + str(
|
|
self.page)
|
|
print('\tSearching Censys IP results page ' + self.page + '.')
|
|
self.do_searchhosturl()
|
|
counter += 1
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module requesting the pages: {e}')
|
|
|
|
except Exception as e:
|
|
print(f'Error occurred in the main Censys module: {e}')
|
|
|
|
def get_hostnames(self):
|
|
try:
|
|
ips = self.get_ipaddresses()
|
|
headers = {'user-agent': Core.get_user_agent(), 'Accept': '*/*', 'Referer': self.urlcert}
|
|
response = requests.post('https://censys.io/ipv4/getdns', json={'ips': ips}, headers=headers)
|
|
responsejson = response.json()
|
|
domainsfromcensys = []
|
|
for key, jdata in responsejson.items():
|
|
if jdata is not None:
|
|
domainsfromcensys.append(jdata)
|
|
else:
|
|
pass
|
|
matchingdomains = [s for s in domainsfromcensys if str(self.word) in s]
|
|
self.hostnamesall.extend(matchingdomains)
|
|
hostnamesfromcerts = censysparser.Parser(self)
|
|
self.hostnamesall.extend(hostnamesfromcerts.search_hostnamesfromcerts())
|
|
return self.hostnamesall
|
|
except Exception as e:
|
|
print(f'Error occurred in the Censys module - hostname search: {e}')
|
|
|
|
def get_ipaddresses(self):
|
|
try:
|
|
ips = censysparser.Parser(self)
|
|
self.ips = ips.search_ipaddresses()
|
|
return self.ips
|
|
except Exception as e:
|
|
print(f'Error occurred in the main Censys module - IP address search: {e}')
|