- Notifications
You must be signed in to change notification settings - Fork 168
Expand file tree
/
Copy pathhttpscan.py
More file actions
Latest commit
80 lines (68 loc) · 2.4 KB
/
Copy pathhttpscan.py
File metadata and controls
80 lines (68 loc) · 2.4 KB
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
#!/usr/bin/env python
#coding:utf-8
# Author: Zeroh
importre
importsys
importQueue
importthreading
importoptparse
importrequests
fromIPyimportIP
printLock=threading.Semaphore(1) #lock Screen print
TimeOut=5#request timeout
#User-Agent
header= {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36','Connection':'close'}
classscan():
def__init__(self,cidr,threads_num):
self.threads_num=threads_num
self.cidr=IP(cidr)
#build ip queue
self.IPs=Queue.Queue()
foripinself.cidr:
ip=str(ip)
self.IPs.put(ip)
defrequest(self):
withthreading.Lock():
whileself.IPs.qsize() >0:
ip=self.IPs.get()
try:
r=requests.Session().get('http://'+str(ip),headers=header,timeout=TimeOut)
status=r.status_code
title=re.search(r'<title>(.*)</title>', r.text) #get the title
iftitle:
title=title.group(1).strip().strip("\r").strip("\n")[:30]
else:
title="None"
banner=''
try:
banner+=r.headers['Server'][:20] #get the server banner
except:pass
printLock.acquire()
print"|%-16s|%-6s|%-20s|%-30s|"% (ip,status,banner,title)
print"+----------------+------+--------------------+------------------------------+"
#Save log
withopen("./log/"+self.cidr.strNormal(3)+".log",'a') asf:
f.write(ip+"\n")
exceptException,e:
printLock.acquire()
finally:
printLock.release()
#Multi thread
defrun(self):
foriinrange(self.threads_num):
t=threading.Thread(target=self.request)
t.start()
if__name__=="__main__":
parser=optparse.OptionParser("Usage: %prog [options] target")
parser.add_option("-t", "--thread", dest="threads_num",
default=10, type="int",
help="[optional]number of theads,default=10")
(options, args) =parser.parse_args()
iflen(args) <1:
parser.print_help()
sys.exit(0)
print"+----------------+------+--------------------+------------------------------+"
print"| IP |Status| Server | Title |"
print"+----------------+------+--------------------+------------------------------+"
s=scan(cidr=args[0],threads_num=options.threads_num)
s.run()