""" 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 """ ############################################################################## #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"; 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])); 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"; 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)); 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"; 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)); nb_individus = nb_individus + 1; temp = rssi_2; #FERMETURE DU FICHIER fp.close(); ##############################################################################