mirror of
https://github.com/laramies/theHarvester.git
synced 2026-09-18 07:37:44 +02:00
New reporting module with new format and contents
This commit is contained in:
+52
-11
@@ -2,6 +2,50 @@ class htmlgenerator:
|
||||
def __init__(self,word):
|
||||
self.domain = word
|
||||
|
||||
def generatelatestscanresults(self, latestscanresults):
|
||||
try:
|
||||
html='''
|
||||
<h1 style="text-align: center;"><span style="color: #ff0000;">theHarvester Scan Report</span></h1>
|
||||
<h2><span style="color: #000000;"><strong>Latest scan report </strong></span></h2>
|
||||
<p> </p>
|
||||
<table style="height: 63px; border-color: #000000;" border="#000000" width="811">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 156.042px; text-align: center;"><strong>Date</strong></td>
|
||||
<td style="width: 156.042px; text-align: center;"><strong>Domain</strong></td>
|
||||
<td style="width: 157.153px; text-align: center;"><strong>Plugin</strong></td>
|
||||
<td style="width: 157.153px; text-align: center;"><strong>Record type</strong></td>
|
||||
<td style="width: 157.153px; text-align: center;"><strong>Result</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
'''
|
||||
for i in latestscanresults:
|
||||
html += '<td style="width: 156.042px;">' + str(i[0]) + "</td>"
|
||||
html += '<td style="width: 156.042px;">' + str(i[1]) + "</td>"
|
||||
html += '<td style="width: 157.153px;">' + str(i[2]) + "</td>"
|
||||
html += '<td style="width: 157.153px;">' + str(i[3]) + "</td>"
|
||||
html += '<td style="width: 157.153px;">' + str(i[4]) + "</td>"
|
||||
html +='</tr>'
|
||||
html +='''
|
||||
</tbody>
|
||||
</table>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
'''
|
||||
return html
|
||||
except Exception as e:
|
||||
print("Error generating the latest scan results HTML code: " + str(e))
|
||||
|
||||
def beginhtml(self):
|
||||
html ='''
|
||||
<head><script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>
|
||||
<html>
|
||||
<body>
|
||||
'''
|
||||
return html
|
||||
|
||||
def generatedashboardcode(self, scanboarddata):
|
||||
try:
|
||||
totalnumberofdomains = scanboarddata['domains']
|
||||
@@ -11,12 +55,8 @@ class htmlgenerator:
|
||||
totalnumberofemail= scanboarddata['email']
|
||||
totalnumberofshodan= scanboarddata['shodan']
|
||||
html='''
|
||||
<head><script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>
|
||||
<html>
|
||||
<body>
|
||||
<h1 style="text-align: center;"><span style="color: #ff0000;">theHarvester Scan Report</span></h1>
|
||||
<h2><span style="color: #000000;"><strong>TheHarvester scanning dashboard</strong></span></h2>
|
||||
<table align="left" style="height: 108px; border-color: #000000; margin-left: auto; margin-right: auto;" border=" #000000" width="713">
|
||||
<h2 style="text-align: center;"><span style="color: #ff0000;">Scan dashboard</span></h2>
|
||||
<table style="height: 108px; border-color: #000000; margin-left: auto; margin-right: auto;" border=" #000000" width="713">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width: 113px; text-align: center;background: #ffff38"><h2><strong>Domains</strong></h2></td>
|
||||
@@ -40,15 +80,17 @@ class htmlgenerator:
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
'''
|
||||
return html
|
||||
except Exception as e:
|
||||
print("Error generating dashboard HTML code: " + str(e))
|
||||
|
||||
def generatescanstatistics(self, scanhistorystatistics):
|
||||
def generatepluginscanstatistics(self, scanstatistics):
|
||||
try:
|
||||
html='''
|
||||
<h1 style="text-align: center;">theHarvester scan statistics</h1>
|
||||
<h2 style="text-align: center;"><span style="color: #ff0000;">theHarvester plugin statistics</span></h2>
|
||||
<p> </p>
|
||||
<table style="height: 63px; border-color: #000000; margin-left: auto; margin-right: auto;" border="#000000" width="811">
|
||||
<tbody>
|
||||
@@ -61,7 +103,7 @@ class htmlgenerator:
|
||||
</tr>
|
||||
<tr>
|
||||
'''
|
||||
for i in scanhistorystatistics:
|
||||
for i in scanstatistics:
|
||||
html += '<td style="width: 156.042px;">' + str(i[0]) + "</td>"
|
||||
html += '<td style="width: 156.042px;">' + str(i[1]) + "</td>"
|
||||
html += '<td style="width: 157.153px;">' + str(i[2]) + "</td>"
|
||||
@@ -74,12 +116,11 @@ class htmlgenerator:
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
'''
|
||||
print("END")
|
||||
return html
|
||||
except Exception as e:
|
||||
print("Error generating scan statistics HTML code: " + str(e))
|
||||
|
||||
def generatescandetailsdomain(self, word, latestscandomain):
|
||||
def generatescandetailsdomain(self, word, latestscandomain): #This is the old scan details
|
||||
try:
|
||||
emails = latestscandomain['scandetailsemail']
|
||||
hosts = latestscandomain['scandetailshost']
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import sqlite3
|
||||
import datetime
|
||||
|
||||
|
||||
class stash_manager:
|
||||
|
||||
def __init__(self):
|
||||
@@ -12,6 +11,7 @@ class stash_manager:
|
||||
self.domainscanhistory = []
|
||||
self.scanboarddata = {}
|
||||
self.scanstats = []
|
||||
self.latestscanresults = []
|
||||
|
||||
def do_init(self):
|
||||
conn = sqlite3.connect(self.db)
|
||||
@@ -54,7 +54,7 @@ class stash_manager:
|
||||
print(e)
|
||||
return
|
||||
|
||||
def getlatestscandomain(self,domain):
|
||||
def generatedashboardcode(self,domain):
|
||||
try:
|
||||
self.latestscandomain["domain"] = domain
|
||||
conn = sqlite3.connect(self.db)
|
||||
@@ -99,6 +99,38 @@ class stash_manager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def getlatestscanresults(self,domain):
|
||||
#CONTINUE WITH NEW FUNCTION FOR THE PREVIOUS DAY SQL
|
||||
'''
|
||||
SELECT find_date
|
||||
FROM results
|
||||
WHERE find_date = ( SELECT MAX(find_date)
|
||||
FROM results
|
||||
WHERE find_date < ( SELECT MAX(find_date)
|
||||
FROM results
|
||||
)
|
||||
)
|
||||
'''
|
||||
try:
|
||||
conn = sqlite3.connect(self.db)
|
||||
c = conn.cursor()
|
||||
c.execute('''SELECT MAX(find_date) FROM results WHERE domain=?''',(domain,))
|
||||
latestscandate = c.fetchone()
|
||||
c = conn.cursor()
|
||||
c.execute('''
|
||||
SELECT find_date, domain, source,type,resource
|
||||
FROM results
|
||||
WHERE find_date =? and domain=?
|
||||
ORDER BY source,type
|
||||
''',(latestscandate[0],domain,))
|
||||
results = c.fetchall()
|
||||
self.latestscanresults = results
|
||||
return self.latestscanresults
|
||||
except Exception as e:
|
||||
print("Error in getting the latest scan results from the database: " + str(e))
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def getscanboarddata(self):
|
||||
try:
|
||||
conn = sqlite3.connect(self.db)
|
||||
@@ -164,7 +196,7 @@ class stash_manager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def getscanstatistics(self):
|
||||
def getpluginscanstatistics(self):
|
||||
try:
|
||||
conn = sqlite3.connect(self.db)
|
||||
c = conn.cursor()
|
||||
@@ -181,5 +213,49 @@ class stash_manager:
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def latestscanchartdata(self,domain):
|
||||
try:
|
||||
self.latestscandomain["domain"] = domain
|
||||
conn = sqlite3.connect(self.db)
|
||||
c = conn.cursor()
|
||||
c.execute('''SELECT COUNT(*) from results WHERE domain=? AND type="host"''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["host"] = data[0]
|
||||
c.execute('''SELECT COUNT(*) from results WHERE domain=? AND type="email"''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["email"] = data[0]
|
||||
c.execute('''SELECT COUNT(*) from results WHERE domain=? AND type="ip"''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["ip"] = data[0]
|
||||
c.execute('''SELECT COUNT(*) from results WHERE domain=? AND type="vhost"''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["vhost"] = data[0]
|
||||
c.execute('''SELECT COUNT(*) from results WHERE domain=? AND type="shodan"''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["shodan"] = data[0]
|
||||
c.execute('''SELECT MAX(find_date) FROM results WHERE domain=?''',(domain,))
|
||||
data = c.fetchone()
|
||||
self.latestscandomain["latestdate"] = data[0]
|
||||
latestdate = data [0]
|
||||
c.execute('''SELECT * FROM results WHERE domain=? AND find_date=? AND type="host"''',(domain,latestdate,))
|
||||
scandetailshost = c.fetchall()
|
||||
self.latestscandomain["scandetailshost"] = scandetailshost
|
||||
c.execute('''SELECT * FROM results WHERE domain=? AND find_date=? AND type="email"''',(domain,latestdate,))
|
||||
scandetailsemail = c.fetchall()
|
||||
self.latestscandomain["scandetailsemail"] = scandetailsemail
|
||||
c.execute('''SELECT * FROM results WHERE domain=? AND find_date=? AND type="ip"''',(domain,latestdate,))
|
||||
scandetailsip = c.fetchall()
|
||||
self.latestscandomain["scandetailsip"] = scandetailsip
|
||||
c.execute('''SELECT * FROM results WHERE domain=? AND find_date=? AND type="vhost"''',(domain,latestdate,))
|
||||
scandetailsvhost = c.fetchall()
|
||||
self.latestscandomain["scandetailsvhost"] = scandetailsvhost
|
||||
c.execute('''SELECT * FROM results WHERE domain=? AND find_date=? AND type="shodan"''',(domain,latestdate,))
|
||||
scandetailsshodan = c.fetchall()
|
||||
self.latestscandomain["scandetailsshodan"] = scandetailsshodan
|
||||
return self.latestscandomain
|
||||
except Exception as e:
|
||||
print(e)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
+12
-10
@@ -146,8 +146,8 @@ def start(argv):
|
||||
search = googlesearch.search_google(word, limit, start)
|
||||
search.process(google_dorking)
|
||||
emails = search.get_emails()
|
||||
all_emails.extend(emails)
|
||||
hosts = search.get_hostnames()
|
||||
all_emails.extend(emails)
|
||||
all_hosts.extend(hosts)
|
||||
db=stash.stash_manager()
|
||||
db.store_all(word,all_hosts,'host','google')
|
||||
@@ -691,24 +691,26 @@ def start(argv):
|
||||
print("NEW REPORTING BEGINS:")
|
||||
db = stash.stash_manager()
|
||||
scanboarddata = db.getscanboarddata()
|
||||
latestscandomain = db.getlatestscandomain(word)
|
||||
latestscanresults = db.getlatestscanresults(word)
|
||||
latestscanchartdata = db.latestscanchartdata(word)
|
||||
scanhistorydomain = db.getscanhistorydomain(word)
|
||||
scanstatistics = db.getscanstatistics()
|
||||
pluginscanstatistics = db.getpluginscanstatistics()
|
||||
from lib import statichtmlgenerator
|
||||
generator = statichtmlgenerator.htmlgenerator(word)
|
||||
HTMLcode = generator.generatedashboardcode(scanboarddata)
|
||||
HTMLcode += generator.generatescandetailsdomain(word, latestscandomain)
|
||||
HTMLcode = generator.beginhtml()
|
||||
HTMLcode += generator.generatelatestscanresults(pluginscanstatistics)
|
||||
from lib import reportgraph
|
||||
import datetime
|
||||
graph = reportgraph.graphgenerator(word)
|
||||
HTMLcode += graph.drawlatestscangraph(word, latestscandomain)
|
||||
HTMLcode += graph.drawlatestscangraph(word, latestscanchartdata)
|
||||
HTMLcode += graph.drawscattergraphscanhistory(word, scanhistorydomain)
|
||||
HTMLcode += generator.generatescanstatistics(scanstatistics)
|
||||
HTMLcode += generator.generatepluginscanstatistics(pluginscanstatistics)
|
||||
HTMLcode += generator.generatedashboardcode(scanboarddata)
|
||||
HTMLcode += '<p><span style="color: #000000;">Report generated on '+ str(datetime.datetime.now())+'</span></p>'
|
||||
HTMLcode +='''
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
Html_file= open("report.html","w")
|
||||
Html_file.write(HTMLcode)
|
||||
Html_file.close()
|
||||
|
||||
Reference in New Issue
Block a user