Frequency Detection Wireless è un'applicazione per la rilevazione delle presenze all'interno di un'aula attraverso la connessione wifi. Verrà effettuata un'associazione univoca tra l'utente e l'indirizzo MAC
del proprio dispositivo per registrare la presenza una volta rilevato in prossimità del master del sistema.
Il progetto si basa su una Web App
e su un applicazione che cattura la presenza nella rete del Mac adress
del dispositivo. L'admin dopo aver eseguito l'associazione utente:mac fisicamente alla prima connessione, avvia l'applicazione di rilevazione che si interfaccia con il db. Verrà registrato il timestamp di avvio connessione e quello di fine connessione del dispositivo. La presenza sarà registrata in secondi, con un errore acnora da stabilire, e su di essa verrà costruita una funzione monotona che determinerà progressivamente il punteggio accumulato.
- Analisi dei requisiti
- Analisi di fattibilità
- Analisi dell'infrastruttura
Riassumiamo e descriviamo i passi principali per la realizzazione del nostro sistema:
Applicazione web per la memorizzazione delle presenze in linguaggio python3
interpretato a lato server. Costruzione di un web-server attraverso il modulo Flask
interfacciato al database NoSQL CouchDb
basato su JSON
. Il sistema accetta principalmente due tipologie di persone: admin e utente normale. L'admin ha una propria view per controllare l'andamento delle presenze. L'utente è colui che utilizza questo servizio di "timbratura" digitale attraverso il proprio smartphone.
Installazione del modulo attraverso:
$ pip3 install Flask
e utilizzo del medesimo nel programma python:
from flask import Flask, session, request, flash, escape
from flask.templating import render_template
from django.utils.html import strip_tags
if __name__ == '__main__':
app.run(debug = True)
Altri moduli da scaricare e importare:
$ pip3 install Django
In questo modo possiamo attivare un web-server sul quale fare girare le nostre pagine.
- Installazione del modulo Flask
- Avvio tramite applicazione python sulla porta 5000
- Costruire un sistema modulare: controller, model e data-mapper.
(Sottoprogetto assegnato a Davide Molinari)
Installazione dei moduli utilizzati per la gestione dell'autenticazione:
$ pip3 install flask-login
$ pip3 install flask-sessionstore
Per problemi di cache e non corretta gestione del ricaricamento delle pagine da parte di Safari, è stato introdotto uno script nelle pagine html per impedire all'utente sloggato di tornare nelle pagine con richiesta di autenticazione esplicita.
<script type="text/javascript">
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
</script>
- Installazione dei moduli Flask per l'autenticazione
- Gestione caching e history sia lato client che lato server
- Ottimizzazione della classe Controller
- Gestione dei ruoli mediante la classe flask_user
- Cambio protocollo di crittografia (per ora è md5)
- Modifica degli utenti che hanno la password codificata con ancora il protocollo md5
- Eliminazione dell'oggetto session per gestire il profilo dell'utente selezionato
- Offuscamento del codice Javascript
(Sottoprogetto assegnato a Alessandro Cosma)
Installazione del modulo attraverso:
$ pip3 install couchdb
e utilizzo del medesimo nel programma python:
import couchdb
def __open(cls)
cls.__db4LogCon = couchdb.Server("http://%s:%s@%s:5984/" % (cls.__user, cls.__pw, cls.__server))
logging.info("Connection to database " + cls.__dbName + " created.")
Per installare il servizio abbiamo utilizzato Apache CouchDB, mentre per effettuare il dump:
$ brew install gnu-sed
(per utenti Ios)
Le informazioni dettagliate riguardanti l'installazione del servizio CouchDB, lo schema del database dell'applicazione, i comandi di restore e backup dello stesso si trovano nella cartella dumpedDb.
Essendo un database NoSQL creiamo N documenti per N utenti dove possiamo estrarre informazioni e memorizzare i tempi di entrata e uscita.
- Installazione di apache-CouchDB in locale
- Analisi della struttura dati
- Costruzione delle View
- Interrogazione alla base di dati in Python (con script automatici)
Realizzazione di un template dinamico basato su html5
, css3
e javascript
, soprattutto responsive.
- Pagina di login
- Pagina privata per l'utente
- Pagina privata per l'admin
L'idea è di esportare questa applicazione per farla girare per esempio su un webserver Apache
.
- Creare un webserver con Apache
- Installare database CouchDB
- Aggiornamento del database (couchdb2.ini)
- Porting della web-app
Installare i pacchetti necessari tramite il comando: pip3 install -r requirements.txt --record files.txt
ATTENZIONE: E' necessario installare la versione 2.4.0 di scapy!
Applicazione utilizzata dall'utente master per la rilevazione di reti Wireless basate su tecnologia Wi-Fi. Questa applicazione, all'avvio, fornisce due modalità di funzionamento mutualmente esclusive:
- AP-only: L'applicazione apre un access point (WAP) al quale uno o più utenti (slave) possono connettersi e rimanere connessi per tutta la durata della sessione prestabilita. In questa modalità potrebbe non essere consentita la navigazione web ai dispositivi collegati, a causa dei limiti della scheda di rete del dispositivo master o delle configurazioni dell'infrastruttura di rete alla quale si è collegati.
- Monitor mode: La scheda di rete viene inizialmente settata in modalità monitor. Durante questa modalità vengono rilevati tutti i dispositivi Wireless (MAC Adress e Hostname) in trasmissione nel raggio di 10-20 metri, filtrando solo quelli riconosciuti come appartenenti al corso.
Nota:
- Per i limiti del segnale fare riferimento alla propria scheda di rete.
- Per permettere all'applicazione di riconoscere/filtrare correttamente i dispositivi, è necessario che indirizzi MAC e hostname siano già presenti nel database della Web app.
Offuscamento del codice python attraverso il modulo Cython.
Le informazioni dettagliate riguardanti l'installazione del servizio e i vari comand si trovano nella cartella Cython.
L'idea è di tenere traccia di tutte le nostre azioni attraverso il sistema di GitHub
.
- Realizzazione repository
- Creazione branch (master e dev) di lavoro
- Condivisione della repository
- Realizzazione e aggiornamento del file README.MD di ogni sottoprogetto
Per critiche o nuove idee contattare liberamente:
- giovanni.bellorio@studenti.univr.it (GIOVANNI BELLORIO)
- simone.girardi@studenti.univr.it (SIMONE GIRARDI)
con Davide Molinari, Alessandro Cosma, Enrico Carlo Agrillo e Francesco Lumpp.