theHarvester/lib/reportgraph.py
2019-01-13 00:17:06 -06:00

100 lines
3.9 KiB
Python

try:
from datetime import datetime
import plotly.graph_objs as go
import plotly.plotly as py
import plotly
import stash
try:
db = stash.stash_manager()
db.do_init()
except Exception as e:
pass
class graphgenerator:
def __init__(self, domain):
self.domain = domain
self.bardata = []
self.barcolumns = []
self.scatterxdata = []
self.scattercountemails = []
self.scattercounthosts = []
self.scattercountips = []
self.scattercountshodans = []
self.scattercountvhosts = []
def drawlatestscangraph(self,domain,latestscandata):
try:
self.barcolumns= ['email', 'host', 'ip', 'shodan', 'vhost']
self.bardata.append(latestscandata['email'])
self.bardata.append(latestscandata['host'])
self.bardata.append(latestscandata['ip'])
self.bardata.append(latestscandata['shodan'])
self.bardata.append(latestscandata['vhost'])
layout = dict(title = 'Latest scan - number of targets identified for ' + domain,
xaxis = dict(title = 'Targets'),
yaxis = dict(title = 'Hits'),)
barchartcode = plotly.offline.plot({
'data': [go.Bar(x=self.barcolumns, y=self.bardata)],
'layout': layout,
}, auto_open=False, include_plotlyjs=False, filename='report.html', output_type='div')
return barchartcode
except Exception as e:
print('Error generating HTML bar graph code for domain: ' + str(e))
def drawscattergraphscanhistory(self,domain,scanhistorydomain):
try:
scandata = scanhistorydomain
for i in scandata:
self.scatterxdata.append(datetime.date(datetime.strptime(i['date'], '%Y-%m-%d')))
self.scattercountemails.append(int(i['email']))
self.scattercounthosts.append(int(i['hosts']))
self.scattercountips.append(int(i['ip']))
self.scattercountshodans.append(int(i['shodan']))
self.scattercountvhosts.append(int(i['vhost']))
trace0 = go.Scatter(
x=self.scatterxdata,
y=self.scattercounthosts,
mode = 'lines+markers',
name = 'hosts')
trace1 = go.Scatter(
x=self.scatterxdata,
y=self.scattercountips,
mode = 'lines+markers',
name = 'IP address')
trace2 = go.Scatter(
x=self.scatterxdata,
y=self.scattercountvhosts,
mode = 'lines+markers',
name = 'vhost')
trace3 = go.Scatter(
x=self.scatterxdata,
y=self.scattercountshodans,
mode='lines+markers',
name='shodan')
trace4 = go.Scatter(
x=self.scatterxdata,
y=self.scattercountemails,
mode='lines+markers',
name='email')
data = [trace0, trace1, trace2, trace3, trace4]
layout = dict(title = 'Scanning history for ' + domain,
xaxis = dict(title = 'Date'),
yaxis = dict(title = 'Results'),
)
scatterchartcode = plotly.offline.plot({
'data': data,
'layout': layout}, auto_open=False, include_plotlyjs=False, filename='report.html', output_type='div')
return scatterchartcode
except Exception as e:
print('Error generating HTML for the historical graph for domain: ' + str(e))
except Exception as e:
print('Error in the reportgraph module: ' + str(e))