This repository has been archived by the owner on Jul 26, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrpc_call.py
126 lines (112 loc) · 5.53 KB
/
rpc_call.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
#!/usr/bin/env python
import subprocess, os, sys, random, socket, time, argparse, tempfile
parser = argparse.ArgumentParser(description='Call RPCs in different modes.')
parser.add_argument('-m', dest='mode', required=True, help='call mode (t, r, s, d)')
parser.add_argument('-n', dest='count', required=True, type=int, help='number of RPCs to be called')
parser.add_argument('-d', dest='dest', required=True, help='destination (any, all, sid)')
parser.add_argument('-s', dest='size', required=True, type=int, help='size of the file for complex cases')
args = parser.parse_args()
globals().update(vars(args))
SERVALD_BIN = "servald"
def mkpayload():
return os.urandom(31).encode('hex')+"::"
def getSid():
sid = subprocess.check_output(SERVALD_BIN + " id self", shell=True)
return sid.split('\n')[2]
def getNeightbourSids():
with open("/tmp/serval-all-sids", 'r') as sid_file:
return filter(lambda x: x != getSid(), map(lambda x: x.replace('\n', ''), sid_file.readlines()))
if __name__ == '__main__':
random.seed(socket.gethostname())
my_sid = getSid()
other_sids = getNeightbourSids()
devnull = open(os.devnull, 'w')
if size == 0:
# simple call
if dest == 'sid':
# simple call to sid
if mode == 't':
# simple call to sid transparent
while count > 0:
receiver = random.choice(other_sids)
subprocess.call(["rpc", "-c", "--", receiver, "simple", mkpayload()+my_sid, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# simple call to sid special mode
while count > 0:
receiver = random.choice(other_sids)
subprocess.call(["rpc", "-c", '-'+mode, "--", receiver, "simple", mkpayload()+my_sid, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# simple call to any/all
if mode == 't':
# simple call to any/all transparent
while count > 0:
subprocess.call(["rpc", "-c", "--", dest, "simple", mkpayload()+my_sid, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# simple call to any/all special mode
while count > 0:
subprocess.call(["rpc", "-c", '-'+mode, "--", dest, "simple", mkpayload()+my_sid, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# complex call
if dest == 'sid':
# complex call to sid
if mode == 't':
# complex call to sid transparent
while count > 0:
temp = tempfile.NamedTemporaryFile(dir='/tmp')
temp.write(os.urandom(1024))
temp.write('\0' * 1024 * (int(size)-1))
receiver = random.choice(other_sids)
subprocess.call(["rpc", "-c", "--", receiver, "complex", temp.name, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
temp.close()
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# complex call to sid special mode
while count > 0:
temp = tempfile.NamedTemporaryFile(dir='/tmp')
temp.write(os.urandom(1024))
temp.write('\0' * 1024 * (int(size)-1))
receiver = random.choice(other_sids)
subprocess.call(["rpc", "-c", '-'+mode, "--", receiver, "complex", temp.name, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
temp.close()
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# complex call to any/all
if mode == 't':
# complex call to any/all transparent
while count > 0:
temp = tempfile.NamedTemporaryFile(dir='/tmp')
temp.write(os.urandom(1024))
temp.write('\0' * 1024 * (int(size)-1))
subprocess.call(["rpc", "-c", "--", dest, "complex", temp.name, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
temp.close()
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
else:
# complex call to any/all special mode
while count > 0:
temp = tempfile.NamedTemporaryFile(dir='/tmp')
temp.write(os.urandom(1024))
temp.write('\0' * 1024 * (int(size)-1))
subprocess.call(["rpc", "-c", '-'+mode, "--", dest, "complex", temp.name, "0,0,0,0,0,0,0,0"], stdout=devnull, stderr=devnull)
count = count - 1
temp.close()
sleeptime = random.randint(10, 20)
time.sleep(sleeptime)
devnull.close()