New reporting module with new format and contents

This commit is contained in:
Janos Zold
2018-12-19 09:08:42 +00:00
parent 4c2e1a09df
commit eabbb30c4d
3 changed files with 143 additions and 24 deletions
+52 -11
View File
@@ -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>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</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']
+79 -3
View File
@@ -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
View File
@@ -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()