1 from django.shortcuts import render
2 from django.http import HttpResponse, HttpRequest
9 from django.views.decorators.csrf import csrf_exempt
12 dir_list = os.listdir("logs/")
13 connection = sqlite3.connect("logs/"+dir_list[0])
14 cursor = connection.cursor()
15 rows = cursor.execute(query).fetchall()
20 #if request.method == 'POST':
22 if request.path == "/devices/views/all_views.json":
24 dev_count=list(load_db("select count(device) from devices where type='Wi-Fi AP'"))
25 (devcount,) = dev_count[0]
26 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"IEEE802.11 Access Points\", \"kismet.devices.view.id\": \"phydot11_accesspoints\", \"kismet.devices.view.size\": "+str(devcount)+" },"
27 dev_count=list(load_db("select count(device) from devices where phyname='IEEE802.11'"))
28 (devcount,) = dev_count[0]
29 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"IEEE802.11 devices\", \"kismet.devices.view.id\": \"phy-IEEE802.11\", \"kismet.devices.view.size\": "+str(devcount)+" },"
30 dev_count=list(load_db("select count(device) from devices where type='RTL433'"))
31 (devcount,) = dev_count[0]
32 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTL433 devices\", \"kismet.devices.view.id\": \"phy-RTL433\", \"kismet.devices.view.size\": "+str(devcount)+" },"
33 dev_count=list(load_db("select count(device) from devices where type='Z-wave'"))
34 (devcount,) = dev_count[0]
35 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"Z-Wave devices\", \"kismet.devices.view.id\": \"phy-Z-Wave\", \"kismet.devices.view.size\": "+str(devcount)+" },"
36 dev_count=list(load_db("select count(device) from devices where type='BR/EDR'"))
37 (devcount,) = dev_count[0]
38 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"Bluetooth devices\", \"kismet.devices.view.id\": \"phy-Bluetooth\", \"kismet.devices.view.size\": "+str(devcount)+" },"
39 dev_count=list(load_db("select count(device) from devices where type='UAV'"))
40 (devcount,) = dev_count[0]
41 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"UAV devices\", \"kismet.devices.view.id\": \"phy-UAV\", \"kismet.devices.view.size\": "+str(devcount)+" },"
42 dev_count=list(load_db("select count(device) from devices where type='NrfMousejack'"))
43 (devcount,) = dev_count[0]
44 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"NrfMousejack devices\", \"kismet.devices.view.id\": \"phy-NrfMousejack\", \"kismet.devices.view.size\": "+str(devcount)+"},"
45 dev_count=list(load_db("select count(device) from devices where type='BTLE'"))
46 (devcount,) = dev_count[0]
47 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"BTLE devices\", \"kismet.devices.view.id\": \"phy-BTLE\", \"kismet.devices.view.size\": "+str(devcount)+" },"
48 dev_count=list(load_db("select count(device) from devices where phyname='AMR'"))
49 (devcount,) = dev_count[0]
50 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTLAMR devices\", \"kismet.devices.view.id\": \"phy-RTLAMR\", \"kismet.devices.view.size\": "+str(devcount)+" },"
51 dev_count=list(load_db("select count(device) from devices where phyname='ADSB'"))
52 (devcount,) = dev_count[0]
53 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RTLADSB devices\", \"kismet.devices.view.id\": \"phy-RTLADSB\", \"kismet.devices.view.size\": "+str(devcount)+" },"
54 dev_count=list(load_db("select count(device) from devices where phyname='802.15.4'"))
55 (devcount,) = dev_count[0]
56 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"802.15.4 devices\", \"kismet.devices.view.id\": \"phy-802.15.4\", \"kismet.devices.view.size\": "+str(devcount)+" },"
57 dev_count=list(load_db("select count(device) from devices where phyname='RADIATION'"))
58 (devcount,) = dev_count[0]
59 uuid_members = uuid_members + "{ \"kismet.devices.view.description\": \"RADIATION devices\", \"kismet.devices.view.id\": \"phy-RADIATION\", \"kismet.devices.view.size\": "+str(devcount)+" },"
60 total_dev=list(load_db("select count(device) from devices"))
61 (devcount,) = total_dev[0]
62 uuid_members=uuid_members+"{ \"kismet.devices.view.description\": \"All devices\", \"kismet.devices.view.id\": \"all\", \"kismet.devices.view.size\": "+str(devcount)+" },"
63 uuid_list = list(load_db("select uuid from datasources"))
64 for uuid in uuid_list:
66 uuid_count = list(load_db("select count(*) from data where datasource='"+str(single_uuid)+"'"))
67 (single_uuid_count,) = uuid_count[0]
68 uuid_members = uuid_members + "{\"kismet.devices.view.description\": \"Devices seen by datasource "+single_uuid+"\","
69 uuid_members = uuid_members + "\"kismet.devices.view.id\": \"seenby-"+single_uuid+"\","
70 uuid_members = uuid_members + "\"kismet.devices.view.size\": "+str(single_uuid_count)+"},"
71 uuid_members=uuid_members[:-1]
72 uuid_members=uuid_members+"]"
73 return HttpResponse(uuid_members, content_type='text/json')
74 elif request.path == "/system/user_status.json":
76 user_status = open('dbview/user_status.json')
77 return HttpResponse(user_status, content_type='text/json')
78 elif request.path == "/session/check_setup_ok":
79 return HttpResponse('Login configured in user config')
80 elif request.path == "/session/check_login":
81 return HttpResponse('Login valid')
82 elif request.path == "/dynamic.js":
83 #INCOMPLETE - read the devices and create a dynamic.js output
84 devices = load_db("select distinct(typestring) from datasources")
85 load_file = open('static/dynamic.js')
86 return HttpResponse(load_file, content_type='application/javascript')
87 elif request.path == "/gps/location.json":
88 #hardcoded cus it doesnt matter
89 user_status = open('dbview/gps_status.json')
90 return HttpResponse(user_status, content_type='text/json')
91 elif request.path == "/alerts/wrapped/last-time/0/alerts.json":
92 alerts = list(load_db("select cast(json as text) from alerts"))
93 alert_string="{\"kismet.alert.list\": ["
95 (single_alert,) = alert
96 alert_string = alert_string + single_alert + ","
97 alert_string = alert_string[:-1]
98 alert_string = alert_string + "] ,\"kismet.alert.timestamp\": "+str(time.time())+"}"
99 return HttpResponse(alert_string, content_type='text/json')
100 elif request.path == "/phy/phy80211/ssids/views/ssids.json":
101 ssid_count = list(load_db("select count(device) from devices where type='Wi-Fi AP'"))
102 ssid_list = "{ \"recordsTotal\": "+str(ssid_count[0][0])+", \"data\": ["
103 ssids = list(load_db("select cast(device as text) from devices where type='Wi-Fi AP'"))
105 (single_ssid,) = ssid
106 ssid_json = json.loads(single_ssid)
108 ssid_list = ssid_list + "{"
109 ssid_list = ssid_list + "\"dot11.ssidgroup.first_time\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.first_time']) +"\","
110 ssid_list = ssid_list + "\"dot11.ssidgroup.ssid_len\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.ssidlen'])+"\","
111 ssid_list = ssid_list + "\"dot11.ssidgroup.crypt_set\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.crypt_set'])+"\","
112 ssid_list = ssid_list + "\"dot11.ssidgroup.hash\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.ssid_hash'])+"\","
113 ssid_list = ssid_list + "\"dot11.ssidgroup.advertising_devices_len\": \"" + str(ssid_json['dot11.device']['dot11.device.num_advertised_ssids'])+"\","
114 ssid_list = ssid_list + "\"dot11.ssidgroup.probing_devices_len\": \"" + str(ssid_json['dot11.device']['dot11.device.num_probed_ssids'])+"\","
115 ssid_list = ssid_list + "\"dot11.ssidgroup.ssid\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.ssid'])+"\","
116 ssid_list = ssid_list + "\"dot11.ssidgroup.responding_devices_len\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.probe_response'])+"\","
117 ssid_list = ssid_list + "\"dot11.ssidgroup.last_time\": \"" + str(ssid_json['dot11.device']['dot11.device.last_beaconed_ssid_record']['dot11.advertisedssid.last_time'])+"\""
118 ssid_list = ssid_list + "},"
120 ssid_list = ssid_list[:-1]
122 ssid_list = ssid_list[:-2]+ "}], \"draw\": 3, \"recordsFiltered\": "+str(ssid_count[0][0])+" }"
123 return HttpResponse(ssid_list, content_type='text/json')
124 elif request.path == "/system/status.json":
125 #Hardcoded - Setup for other users
126 user_status = open('dbview/status.json')
127 return HttpResponse(user_status, content_type='text/json')
128 elif request.path == "/alerts/alerts_view.json":
129 #INCOMPLETE - Check device Mappings
130 total_alerts=list(load_db("select count(json) from alerts"))
131 (alert_count,) = total_alerts[0]
132 alerts = list(load_db("select cast(json as text) from alerts"))
133 alert_string="{\"recordsTotal\": "+str(alert_count)+",\"data\": ["
135 (single_alert,) = alert
136 alert_string = alert_string + single_alert + ","
137 alert_string = alert_string[:-1]
138 alert_string = alert_string + "], \"draw\": 6,\"recordsFiltered\": "+str(alert_count)+"}"
139 return HttpResponse(alert_string, content_type='text/json')
140 elif request.path == "/messagebus/last-time/0/messages.json":
141 messages = list(load_db("select * from messages DESC limit 30"))
142 message_string="{\"kismet.messagebus.list\": ["
143 for message in messages:
144 message_string = message_string + "{"
145 message_string = message_string + "\"kismet.messagebus.message_string\": \"" + message[4] + "\","
147 if message[3] == "INFO":
149 if message[3] == "LOW":
151 if message[3] == "MEDIUM":
153 if message[3] == "HIGH":
155 if message[3] == "CRITICAL":
157 if message[3] == "ERROR":
159 message_string = message_string + "\"kismet.messagebus.message_flags\": \"" + str(flag) + "\","
160 message_string = message_string + "\"kismet.messagebus.message_time\": \"" + str(message[0]) + "\""
161 message_string = message_string + "},"
162 message_string = message_string[:-1]
163 message_string = message_string + "], \"kismet.messagebus.timestamp\": "+str(time.time())+" }"
164 return HttpResponse(message_string, content_type='text/json')
165 elif request.path == "/channels/channels.json":
166 user_status = open('dbview/channels.json')
167 return HttpResponse(user_status, content_type='text/json')
168 elif request.path == "/devices/views/all/devices.json":
169 #gotta figure out paging
171 total_dev=list(load_db("select count(device) from devices"))
172 (dev_count,) = total_dev[0]
173 dev_string = "{ \"recordsTotal\": "+str(dev_count)+", \"data\": ["
174 dev_list = list(load_db("select cast(device as text) from devices limit 126"))
175 for device in dev_list:
177 dev_string = dev_string + dev + ","
178 dev_string = dev_string[:-1]
179 dev_string = dev_string + "],\"draw\": 5,\"recordsFiltered\": "+str(dev_count)+"}"
180 return HttpResponse(dev_string, content_type='text/json')
181 elif request.path == "/eventbus/events.ws":
182 return HttpResponse("[]", content_type='text/json')
183 elif request.path == "/devices/multikey/as-object/devices.json":
184 #ClientMap incomplete.... figure out where the rest of the JSON comes from
187 for key, value in request.POST.items():
188 search_json=json.loads(value)
189 for device in search_json['devices']:
190 device_json = list(load_db("select cast(device as text) from devices where devkey='"+str(device)+"'"))
192 device_json_x = json.loads(str(tmp[0]))
193 multikey = multikey + "\""+str(device)+"\": {"
194 for field in search_json['fields']:
195 if (field[0:6] == "kismet"):
196 multikey = multikey + "\""+field+"\": \""+device_json_x[field]+"\","
197 multikey = multikey + "\"dot11.device.client_map\": {},"
198 multikey = multikey[:-1]
199 multikey = multikey + "},"
200 multikey = multikey[:-1]
201 multikey = multikey + "}"
202 return HttpResponse(multikey, content_type='text/json')