-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathWebserverwatcher.py
137 lines (109 loc) · 3.64 KB
/
Webserverwatcher.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
130
131
132
133
134
135
136
#!usr/bin/python
import httplib, socket, time, re, os, sys, datetime
# Hello world!
os.system('clear')
print "==================================================="
print "== Webserverwatcher.py | www.ethicalhack3r.co.uk =="
print "==================================================="
print
url = raw_input("Enter the URL you want to keep an eye on: ")
# Check URL
http = "http://"
if http in url:
print
print "ERROR! Remove http:// from the URL."
url = raw_input("Enter the URL you want to keep an eye on: ")
count = 0
while 1:
# Count how many times the script has run
count = count + 1
# Get todays date/time
getdate = datetime.datetime.today()
today = getdate.strftime("%d/%m/%Y %H:%M:%S")
# Get webserver IP
socket.setdefaulttimeout(15)
try: socket.gethostbyname(url)
except socket.error:
os.system('clear')
print "==================================================="
print "== Webserverwatcher.py | www.ethicalhack3r.co.uk =="
print "==================================================="
print
print "SOCKET ERROR! 1)Check the URL 2)Check your internet connection 3)Try again."
print
sys.exit()
# HTTP HEAD request
conn = httplib.HTTPConnection(url, 80)
try: conn.request("HEAD", "/")
except socket.timeout:
print "Webserver has timed out. Check URL and internet connection."
# Read HTTP response
res = conn.getresponse()
# Close HTTP connection
conn.close()
# Turn headers into variables
ip = socket.gethostbyname(url)
server = res.getheader('Server')
xpoweredby = res.getheader('x-powered-by')
date = res.getheader('date')
# Print some output
os.system('clear')
print "==================================================="
print "== Webserverwatcher.py | www.ethicalhack3r.co.uk =="
print "==================================================="
print
print res.status, res.reason
print
if xpoweredby == None:
print ip + " " + server + " " + date
else:
print ip + " " + server + " " + xpoweredby + " " + date
print
print "The script has run", count, "time/s."
if (count < 2):
# Save header data to log file
outfile = file('log.txt', 'w')
outfile.write("Started on " + today + "\n")
outfile.write(ip + " ")
outfile.write(server + " ")
# Check if xpoweredby header exists, if it does save to log
if xpoweredby != None:
outfile.write(xpoweredby + " ")
outfile.write(date + "\n")
outfile.close()
else:
outfile.write(date + "\n")
outfile.close()
# Print some output
print
print "Logged!"
print
else:
# Read file to compare old/new headers
readfile = open('log.txt', "r")
text = readfile.read()
# Check if log file IP is same as new IP
if ip not in text:
outfile = file('log.txt', 'a')
outfile.write('IP address has been changed! New IP is ' + ip + ' ' + date + '\n')
outfile.close()
# Check if log file server is same as new server
if server not in text:
outfile = file('log.txt', 'a')
outfile.write('Web Server software has been changed! New server is ' + server + ' ' + date + '\n')
outfile.close()
# Check if log file x-powered-by header is same as new one
if xpoweredby != None and xpoweredby not in text:
outfile = file('log.txt', 'a')
outfile.write('X-powered-by header has been changed! New header is ' + xpoweredby + ' ' + date + '\n')
outfile.close()
# Time to wait between HTTP requests (3600 seconds = 1hr)
try: time.sleep(3600)
except KeyboardInterrupt:
outfile = file('log.txt', 'a')
outfile.write("Finished on " + today)
outfile.close()
print
print "Check log.txt."
print
sys.exit()