recorder.py 5.57 KB
"""
Created on Thu Jan 11 15:22:56 2018
@author: Robin Cavalieri 
IMA5SC - PFE 2018
P32 - Détection automatique de DoS sur réseau LoRa
Enregistrements des trafics normaux
"""
##############################################################################
#LIBRAIRIES UTILES 
##############################################################################
import csv;
import serial;  
import time;
##############################################################################

##############################################################################
#CONSTANTES
##############################################################################
POPULATION = 3000;
TRAME_SIZE = 13;
##############################################################################

##############################################################################
#FONCTIONS UTILES
##############################################################################
#Enregistre ou non la séquence reçue 
def record_condition(sequence):
    if (0x46 in sequence):
        return True;
    else:
        return False;
##############################################################################

##############################################################################
#DEFINITION DE LA LECTURE DE PORT 
##############################################################################
ser = serial.Serial(      
 #Pour Linux
 #port='/dev/ttyACM0',
 #Pour Windows
 port='COM4',
 #Vitesse de communication
 baudrate = 9600,
 #Parité 
 parity=serial.PARITY_NONE,
 #Bit de stop
 stopbits=serial.STOPBITS_ONE,
 #Taille du message 
 bytesize=serial.EIGHTBITS,
 #Out
 timeout=1
)
counter=0;
##############################################################################

##############################################################################
#ENREGISTREMENT DES TRAMES
##############################################################################
#INITIALISATION
nb_individus = 1;
#file_name = "C:/Users/Utilisateur/PFE/python/datasets/trame_norm.csv";
file_name = "C:/Users/Utilisateur/PFE/python/datasets/trame_attack.csv";
fp = open(file_name, "w");
writer = csv.writer(fp);

#BOUCLE D'ENREGISTREMENT
while(nb_individus <= POPULATION):
 #Vérification du contenu 
 x=ser.readline();
 print(x); 
 #Condition d'enregistrement
 if(record_condition(x)==True):
     writer.writerow(('1', x[0:TRAME_SIZE]));
     #writer.writerow(('2', x[0:TRAME_SIZE]));
     nb_individus = nb_individus + 1;
 
#TRAITEMENT DES DONNEES : suppression des caractères inutiles
fp.write(open(file_name).read().replace('\n',''));
###A DEVELOPPER POUR SUPPRIMER TOUS LES CARACTERES INUTILES

#FERMETURE DU FICHIER
fp.close();
##############################################################################

##############################################################################
#ENREGISTREMENT DES PING 
##############################################################################
#INITIALISATION
nb_individus = 1;
temp = 0;
#file_name = "C:/Users/Utilisateur/PFE/python/datasets/ping_norm.csv";
file_name = "C:/Users/Utilisateur/PFE/python/datasets/ping_attack.csv";
fp = open(file_name, "w");
writer = csv.writer(fp);

#BOUCLE D'ENREGISTREMENT
while(nb_individus <= POPULATION+1):
    
 #Vérification du contenu 
 x=ser.readline();
 print(x);
 
 if(record_condition(x)==True and nb_individus == 1):    
     debut = time.time();
     nb_individus = nb_individus + 1;
     temp = debut;
 
 #Condition d'enregistrement après le 1er individu 
 if(record_condition(x)==True and nb_individus > 1):
     fin = time.time();
     delta_t = round((fin - temp)*1000); #stocké en ms
     writer.writerow(('1', delta_t));
     #writer.writerow(('2', delta_t));
     nb_individus = nb_individus + 1;
     temp = fin;

#FERMETURE DU FICHIER
fp.close();
##############################################################################

##############################################################################
#ENREGISTREMENT DE PUISSANCE DE SIGNAL
##############################################################################
#Ici j'enregistre le delta de puissance entre deux réception.
#Si le delta est trop important, alors il est possible que l'émetteur soit usurpé 

#INITIALISATION
nb_individus = 1;
temp = 0;
#file_name = "C:/Users/Utilisateur/PFE/python/datasets/rssi_norm.csv";
file_name = "C:/Users/Utilisateur/PFE/python/datasets/rssi_attack.csv";
fp = open(file_name, "w");
writer = csv.writer(fp);

#BOUCLE D'ENREGISTREMENT
while(nb_individus <= POPULATION+2):
    
 #Vérification du contenu 
 x=ser.readline();
 print(x);
 
 #Ne pas enregistrer la premiere valeurs 
 if(record_condition(x)==True and nb_individus == 1):
     nb_individus = nb_individus + 1;
 
 if(record_condition(x)==True and nb_individus == 2):    
     #On ne lit que la ligne de puissance
     x=ser.readline();
     
     #Suppression des caractères parasites
     #Conversion en décimal
     y=x[1]+x[2]-48;
     print(y);
     rssi_1 = y;
     
     #Calculs et écriture
     temp = rssi_1;
     nb_individus = nb_individus + 1;
 
 #Condition d'enregistrement après le 1er individu 
 if(record_condition(x)==True and nb_individus > 2):
     #On ne lit que la ligne de puissance
     x=ser.readline();
     
     #Suppression des caractères parasites
     #Conversion en décimal
     print(x);
     y=x[1]+x[2]-48;
     rssi_2 = y;
     
     #Calculs et écriture
     delta_t = abs(rssi_2 - temp);
     #writer.writerow(('1', delta_t));
     writer.writerow(('2', delta_t));
     nb_individus = nb_individus + 1;
     temp = rssi_2;

#FERMETURE DU FICHIER
fp.close();
##############################################################################