-
Notifications
You must be signed in to change notification settings - Fork 1
/
sonarscan.py
115 lines (101 loc) · 4.28 KB
/
sonarscan.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
# coding: utf-8
import urllib2
from bs4 import BeautifulSoup
import requests
import gzip
from hurry.filesize import size
import os
import json
import io
#################################### TEST Data
test = "2018-12-29-1546111673-fdns_cname.json.gz"
url1 = "https://opendata.rapid7.com/sonar.fdns_v2/2018-12-29-1546111673-fdns_cname.json.gz"
query = "tesla.com"
##############################################
#Global Realtime data source URL
url = 'https://opendata.rapid7.com/sonar.fdns_v2'
host_url = 'https://opendata.rapid7.com'
param = 'cname'
hlist = ['']
def get_data(url,param): #Finds the URL to required fdns file
page_data = urllib2.urlopen(url)
soup = BeautifulSoup(page_data,"html.parser")
databuf = soup.find('div',attrs={"class":"table-scroll"})
databuf = databuf.findAll('td')
for i in databuf:
link = i.findAll('a')
for x in link:
x = x.get('href')
if "cname" in str(x):
u = x;
return(host_url + u)
def downloader(url):
file_name = url.split('/')[-1]
if not os.path.isfile('./' + file_name):
if 'y' == raw_input("\nLatest Database needs to be downloaded from Rapid7's Project Sonar, type 'y' to proceed! "):
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Size: %s" % (file_name, size(file_size))
file_size_dl = 0
block_sz = 8192
while True:
buffer = u.read(block_sz)
if not buffer:
break
file_size_dl += len(buffer)
f.write(buffer)
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
status = status + chr(8)*(len(status)+1)
print status,
f.close()
return (file_name)
else: exit("\nExiting, Thank you")
print "\nLatest Database already found... %s" % (file_name)
return (file_name)
def open_file(filename,query):
with gzip.open(filename, 'r') as f:
g = io.BufferedReader(f)
hlist.insert(1,query) # Initiaing List
print "\nSearching %s records, Please wait ..." % (param)
print "\n\n####################################### Results ############################################"
print "------ URL ------------------------------------------------- Record Address ----------------"
print "####################################### ####### ############################################ \n\n "
for line in g:
if query in line:
data = json.loads(line)
hlist.append(str(data['name'])) # Adding http to all hosts and send to list
# print "%s \t %s" % (data['name'],data['value'])
print '{:<60}{:<40}'.format(' '.join(data['name'].split()[-1:]), ' '.join(data['value'].split()[-1:]))
g.close()
print "\n\nSearch complete..."
def ping(list):
for item in list:
try:
r = requests.get("http://" + item, timeout=3)
print '{:<60}{:<10}'.format(' '.join(item.split()[-1:]), ' '.join(str(r.status_code).split()[-1:]))
except requests.exceptions.RequestException as e:
if e:
print '{:<60}{:<20}'.format(' '.join(item.split()[-1:]), ' '.join('Timeout'.split()[-1:]))
print "\n\n\n\t\t\tExiting..."
exit()
def pingy(h): #Testfunction
try:
r = requests.get("http://" + h, timeout=3)
stat = r.status_code
except requests.exceptions.RequestException as e:
if e:
stat = 'No Response'
return(stat)
print "\n##################################### SONARSCAN v1.0 ###################################"
print "################################## post2steve@live.in ##################################"
print "\nReading Settings..."
url1 = get_data(url,param);
print "\nSource URL -> %s" % (url1)
local_filename = downloader(url1);
query = raw_input("\nPlease enter hostname to search -> ")
open_file(local_filename,query);
print "\n Sending GET requests all the URLs "
print "\n##################################### Status codes #####################################"
ping(hlist);