This repository has been archived by the owner on May 18, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathserver.py
executable file
·129 lines (120 loc) · 4.26 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env python
import subprocess
import json
import datetime
import time
import sys
import logging
import urllib
import urlparse
from tornado import template
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.wsgi
import tornado.escape
import tornado.options
from nmapfacts import nmapassert
from httpassert import httpfacts
#from sshassert import sshassert
from connect import sshfacts
from dnsassert import dnsfacts
from sslassert import sslassert
from wordpressfacts import wordpressfacts
class PageHandler(tornado.web.RequestHandler):
def get(self, pagename):
if pagename == '':
pagename = 'home'
self.render(
pagename + '.html',
title = pagename.replace('-',' '),
ssl_protocol=self.request.headers.get('X-SSL-Protocol', ''),
ssl_cipher=self.request.headers.get('X-SSL-Cipher', '')
)
class FactHandler(tornado.web.RequestHandler):
def get(self, engine, url):
now = time.time()
facts = {}
facts['meta_timestamp'] = now
if engine == 'home':
self.render(
pagename + '.html',
title = pagename.replace('-',' '),
ssl_protocol=self.request.headers.get('X-SSL-Protocol', ''),
ssl_cipher=self.request.headers.get('X-SSL-Cipher', '')
)
elif engine == 'http':
if not url.startswith('http'):
url = 'http://' + url
for k,v in httpfacts(url):
facts[k] = v
elif engine == 'ports':
parts = urlparse.urlparse(url)
if parts.scheme == '':
url = 'https://' + url
parts = urlparse.urlparse(url)
host = parts.netloc
s = nmapassert()
for k,v in s.smoke(host):
facts[k] = v
elif engine == 'ssl':
parts = urlparse.urlparse(url)
if parts.scheme == '':
url = 'https://' + url
parts = urlparse.urlparse(url)
host = parts.netloc
if parts.path == '':
path = '/'
else:
path = parts.path
s = sslassert()
# need to fix in sslassert test
tmpdict = s.test(host, path)
if tmpdict is not None:
for k,v in tmpdict.iteritems():
facts[k] = v
elif engine == 'dns':
parts = urlparse.urlparse(url)
if parts.scheme == '':
url = 'http://' + url
parts = urlparse.urlparse(url)
host = parts.netloc
for k,v in dnsfacts(host):
facts[k] = v
elif engine == 'wordpress':
parts = urlparse.urlparse(url)
if parts.scheme == '':
url = 'http://' + url
for k,v in wordpressfacts(url):
facts[k] = v
elif engine == 'ssh':
parts = urlparse.urlparse(url)
if parts.scheme == '':
url = 'https://' + url
parts = urlparse.urlparse(url)
host = parts.netloc
jsontext = subprocess.check_output(['./connect.py', host])
facts = json.loads(jsontext)
facts['meta_duration'] = time.time() - now
self.set_header('Content-Type', 'application/json')
self.write(json.dumps(facts, indent=2, sort_keys=True))
import os
settings = {
"static_path": os.path.join(os.path.dirname(__file__), "static"),
"template_path": os.path.join(os.path.dirname(__file__), "."),
"xsrf_cookies": True,
"gzip": False
}
application = tornado.web.Application([
(r"/facts/([a-z]+)/(.*)", FactHandler),
(r'/robots.txt', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.dirname(__file__), "static")}),
(r'/favicon.ico', tornado.web.StaticFileHandler, {'path': os.path.join(os.path.dirname(__file__), "static")}),
(r"/([a-z-]*)", PageHandler)
], **settings)
if __name__ == "__main__":
tornado.options.parse_command_line()
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(process)d %(message)s")
server = tornado.httpserver.HTTPServer(application)
server.bind(8888)
server.start(2)
tornado.ioloop.IOLoop.instance().start()