-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathrequestframe.py
More file actions
60 lines (54 loc) · 2.15 KB
/
Copy pathrequestframe.py
File metadata and controls
60 lines (54 loc) · 2.15 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
import random, headerwrapper, requestgenerator, bodygenerator
class RequestFrame:
def __init__(self, args):
self.header_mutate = float(args.header_mutate_level) / 10
self.body_mutate = float(args.body_mutate_level) / 10
self.request_mutate = float(args.request_mutate_level) / 10
self.body_type = args.body_type
self.num_headers = args.num_headers
self.all_headers = headerwrapper.HeaderWrapper().get_headers()
self.request = ""
def generate(self):
request = self.generate_request()
body = self.generate_body()
params = {'request':request, 'body':body}
headers = self.generate_headers(params)
compiled_headers = self.compile_headers(headers)
self.request = request + compiled_headers + "\r\n" + body
def generate_request(self):
request = requestgenerator.RequestGenerator()
if float(random.randint(1, 10))/10 <= self.request_mutate:
if not random.randint(0, 5):
request.mutate_length()
if not random.randint(0, 5):
request.mutate()
return request.method + ' ' + request.uri + ' ' + request.http_version + "\r\n"
def generate_headers(self, params):
headers = list()
unused = range(len(self.all_headers))
if self.num_headers == -1 or self.num_headers > len(self.all_headers):
self.num_headers = len(self.all_headers)
if self.num_headers == 0:
return headers
for i in range(random.randint(0, self.num_headers - 1)):
index = random.randint(0, len(unused) - 1)
headers.append(self.all_headers[unused[index]](params=params))
unused = unused[:index] + unused[index + 1:]
return headers
def generate_body(self):
body = bodygenerator.BodyGenerator(self.body_type)
if float(random.randint(1, 10))/10 <= self.body_mutate:
body.mutate()
return body.body
def compile_headers(self, header_list):
compiled = ""
for header in header_list:
if float(random.randint(1, 10))/10 <= self.header_mutate:
if random.randint(0, 1):
header.value = header.mutate_validity(header.value)
if random.randint(0, 1):
header.value = header.mutate_length(header.value)
if random.randint(0, 1):
header.value = header.mutate(header.value)
compiled += header.name + ": " + header.value + "\r\n"
return compiled