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
|
Authority = Node.create(3, {
"tag": "a",
"authority": 1,
"relay": 1,
"torrc": "authority.tmpl"
})
Relay = Node.create(5, {
"tag": "r",
"relay": 1,
"torrc": "intro.tmpl"
})
Client = Node.create(4, {
"tag": "c",
"torrc": "client.tmpl"
})
initialNodes = Authority + Relay + Client
HiddenService = Node(
tag="h",
hiddenservice=1,
torrc="hidden-service.tmpl",
hiddenservicetarget="127.0.0.1:8081"
)
initialNodes.append(HiddenService)
DelayedHiddenService = Node(
tag="h",
hiddenservice=1,
torrc="hidden-service.tmpl",
hiddenservicetarget="127.0.0.1:8082"
)
# Use twisted to create web servers in this script
class Site(resource.Resource):
isLeaf = True
numberRequests = 0
def __init__(self, siteNum):
self.siteNum = siteNum
def render_GET(self, request):
self.numberRequests += 1
request.setHeader("content-type", "text/plain")
return str(self.siteNum)
def start_test():
print("Starting test")
port8081 = reactor.listenTCP(8081, server.Site(Site(1)))
port8082 = reactor.listenTCP(8082, server.Site(Site(2)))
def cleanup():
port8081.stopListening()
print("stopped 8081")
port8082.stopListening()
print("stopped 8082")
reactor.stop()
print("stopped the reactor")
def test():
print("connecting to clients")
responses = {"1": 0, "2": 0}
for c in Client:
result = c.query("http://2oiifbe3wne4iaqb.onion/");
responses[result] += 1
print(result)
print(responses)
cleanup()
thread.start_new_thread(test, ())
print("running reactor")
reactor.run(installSignalHandlers=0)
def start():
print("Starting hidden service test")
if not all([ n.getController().start() for n in initialNodes ]):
return False
else:
print("All initial nodes running")
def start_listener(logevent):
# Probably after what needs waiting for
if "Successfully uploaded v2 rend descriptors" in logevent.message:
start_test()
def log_listener(logevent):
if "Successfully uploaded v2 rend descriptors" in logevent.message:
print("log message: " + logevent.message)
DelayedHiddenService.getController().start()
DelayedHiddenService.getStemController().add_event_listener(start_listener, EventType.INFO)
HiddenService.getStemController().add_event_listener(log_listener, EventType.INFO)
|